mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-16 02:35:59 -07:00
fix: System bars contiuously showing on Android video player (#568)
Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
parent
861d75b1e9
commit
b9c1e82b43
2 changed files with 17 additions and 10 deletions
|
|
@ -3,7 +3,6 @@ package nl.jknaapen.fladder.utility
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.DisposableEffect
|
import androidx.compose.runtime.DisposableEffect
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
|
||||||
import androidx.compose.ui.platform.LocalView
|
import androidx.compose.ui.platform.LocalView
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.core.view.WindowInsetsControllerCompat
|
import androidx.core.view.WindowInsetsControllerCompat
|
||||||
|
|
@ -11,25 +10,25 @@ import androidx.core.view.WindowInsetsControllerCompat
|
||||||
@Composable
|
@Composable
|
||||||
fun ImmersiveSystemBars(isImmersive: Boolean) {
|
fun ImmersiveSystemBars(isImmersive: Boolean) {
|
||||||
val view = LocalView.current
|
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) {
|
DisposableEffect(view, isImmersive) {
|
||||||
val activity = view.context as? Activity
|
val activity = view.context as? Activity
|
||||||
val window = activity?.window
|
val window = activity?.window
|
||||||
val controller = window?.let { WindowInsetsControllerCompat(it, view) }
|
val controller = window?.let { WindowInsetsControllerCompat(it, view) }
|
||||||
|
|
||||||
|
if (window != null) {
|
||||||
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||||
|
}
|
||||||
|
|
||||||
if (isImmersive) {
|
if (isImmersive) {
|
||||||
controller?.hide(androidx.core.view.WindowInsetsCompat.Type.systemBars())
|
controller?.hide(androidx.core.view.WindowInsetsCompat.Type.systemBars())
|
||||||
|
controller?.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||||
} else {
|
} else {
|
||||||
controller?.show(androidx.core.view.WindowInsetsCompat.Type.systemBars())
|
controller?.show(androidx.core.view.WindowInsetsCompat.Type.systemBars())
|
||||||
}
|
}
|
||||||
|
|
||||||
onDispose { }
|
onDispose {
|
||||||
|
controller?.show(androidx.core.view.WindowInsetsCompat.Type.systemBars())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -60,6 +60,7 @@ class _DesktopControlsState extends ConsumerState<DesktopControls> {
|
||||||
final fadeDuration = const Duration(milliseconds: 350);
|
final fadeDuration = const Duration(milliseconds: 350);
|
||||||
bool showOverlay = true;
|
bool showOverlay = true;
|
||||||
bool wasPlaying = false;
|
bool wasPlaying = false;
|
||||||
|
SystemUiMode? _currentSystemUiMode;
|
||||||
|
|
||||||
late final double topPadding = MediaQuery.of(context).viewPadding.top;
|
late final double topPadding = MediaQuery.of(context).viewPadding.top;
|
||||||
late final double bottomPadding = MediaQuery.of(context).viewPadding.bottom;
|
late final double bottomPadding = MediaQuery.of(context).viewPadding.bottom;
|
||||||
|
|
@ -625,7 +626,14 @@ class _DesktopControlsState extends ConsumerState<DesktopControls> {
|
||||||
if (showOverlay == (value ?? !showOverlay)) return;
|
if (showOverlay == (value ?? !showOverlay)) return;
|
||||||
setState(() => showOverlay = (value ?? !showOverlay));
|
setState(() => showOverlay = (value ?? !showOverlay));
|
||||||
resetTimer();
|
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(
|
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
|
||||||
statusBarColor: Colors.transparent,
|
statusBarColor: Colors.transparent,
|
||||||
systemNavigationBarColor: Colors.transparent,
|
systemNavigationBarColor: Colors.transparent,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue