diff --git a/android/app/src/main/kotlin/nl/jknaapen/fladder/utility/ImmersiveSystemBars.kt b/android/app/src/main/kotlin/nl/jknaapen/fladder/utility/ImmersiveSystemBars.kt index 03ff402..8739e4b 100644 --- a/android/app/src/main/kotlin/nl/jknaapen/fladder/utility/ImmersiveSystemBars.kt +++ b/android/app/src/main/kotlin/nl/jknaapen/fladder/utility/ImmersiveSystemBars.kt @@ -3,7 +3,6 @@ package nl.jknaapen.fladder.utility import android.app.Activity import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsControllerCompat @@ -11,25 +10,25 @@ import androidx.core.view.WindowInsetsControllerCompat @Composable fun ImmersiveSystemBars(isImmersive: Boolean) { val view = LocalView.current - LaunchedEffect(view) { - val activity = view.context as? Activity - val window = activity?.window - if (window != null) { - WindowCompat.setDecorFitsSystemWindows(window, false) - } - } DisposableEffect(view, isImmersive) { val activity = view.context as? Activity val window = activity?.window val controller = window?.let { WindowInsetsControllerCompat(it, view) } + if (window != null) { + WindowCompat.setDecorFitsSystemWindows(window, false) + } + if (isImmersive) { controller?.hide(androidx.core.view.WindowInsetsCompat.Type.systemBars()) + controller?.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE } else { controller?.show(androidx.core.view.WindowInsetsCompat.Type.systemBars()) } - onDispose { } + onDispose { + controller?.show(androidx.core.view.WindowInsetsCompat.Type.systemBars()) + } } } \ No newline at end of file diff --git a/lib/screens/video_player/video_player_controls.dart b/lib/screens/video_player/video_player_controls.dart index 74255d4..f28d773 100644 --- a/lib/screens/video_player/video_player_controls.dart +++ b/lib/screens/video_player/video_player_controls.dart @@ -60,6 +60,7 @@ class _DesktopControlsState extends ConsumerState { final fadeDuration = const Duration(milliseconds: 350); bool showOverlay = true; bool wasPlaying = false; + SystemUiMode? _currentSystemUiMode; late final double topPadding = MediaQuery.of(context).viewPadding.top; late final double bottomPadding = MediaQuery.of(context).viewPadding.bottom; @@ -625,7 +626,14 @@ class _DesktopControlsState extends ConsumerState { if (showOverlay == (value ?? !showOverlay)) return; setState(() => showOverlay = (value ?? !showOverlay)); resetTimer(); - SystemChrome.setEnabledSystemUIMode(showOverlay ? SystemUiMode.edgeToEdge : SystemUiMode.leanBack, overlays: []); + + final desiredMode = showOverlay ? SystemUiMode.edgeToEdge : SystemUiMode.immersiveSticky; + + if (_currentSystemUiMode != desiredMode) { + _currentSystemUiMode = desiredMode; + SystemChrome.setEnabledSystemUIMode(desiredMode, overlays: []); + } + SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( statusBarColor: Colors.transparent, systemNavigationBarColor: Colors.transparent,