diff --git a/src/CommunityToolkit.Maui.MediaElement/Views/MauiMediaElement.android.cs b/src/CommunityToolkit.Maui.MediaElement/Views/MauiMediaElement.android.cs index b9799a387..244a7dd54 100644 --- a/src/CommunityToolkit.Maui.MediaElement/Views/MauiMediaElement.android.cs +++ b/src/CommunityToolkit.Maui.MediaElement/Views/MauiMediaElement.android.cs @@ -7,6 +7,8 @@ using AndroidX.Core.View; using AndroidX.Media3.UI; using CommunityToolkit.Maui.Views; +using View = Android.Views.View; +using Window = Android.Views.Window; [assembly: UsesPermission(Android.Manifest.Permission.ForegroundServiceMediaPlayback)] [assembly: UsesPermission(Android.Manifest.Permission.ForegroundService)] @@ -23,8 +25,6 @@ public class MauiMediaElement : CoordinatorLayout readonly RelativeLayout relativeLayout; readonly PlayerView playerView; - int defaultSystemUiVisibility; - bool isSystemBarVisible; bool isFullScreen; #pragma warning disable CS8618 // Non-nullable field is uninitialized. Consider declaring as nullable. @@ -78,7 +78,7 @@ protected override void OnVisibilityChanged(Android.Views.View changedView, [Gen base.OnVisibilityChanged(changedView, visibility); if (isFullScreen && visibility is ViewStates.Visible) { - SetSystemBarsVisibility(); + SetStatusBarsHidden(isFullScreen); } } @@ -131,77 +131,33 @@ void OnFullscreenButtonClick(object? sender, PlayerView.FullscreenButtonClickEve isFullScreen = false; layout?.RemoveView(relativeLayout); AddView(relativeLayout); + relativeLayout.Invalidate(); } // Hide/Show the SystemBars and Status bar - SetSystemBarsVisibility(); + SetStatusBarsHidden(isFullScreen); } - void SetSystemBarsVisibility() + public static void SetStatusBarsHidden(bool hidden) { - var currentWindow = CurrentPlatformContext.CurrentWindow; - var windowInsetsControllerCompat = WindowCompat.GetInsetsController(currentWindow, currentWindow.DecorView); - - var barTypes = WindowInsetsCompat.Type.StatusBars() - | WindowInsetsCompat.Type.SystemBars() - | WindowInsetsCompat.Type.NavigationBars(); - - if (isFullScreen) - { - WindowCompat.SetDecorFitsSystemWindows(currentWindow, false); - if (OperatingSystem.IsAndroidVersionAtLeast(30)) - { - var windowInsets = currentWindow.DecorView.RootWindowInsets; - if (windowInsets is not null) - { - isSystemBarVisible = windowInsets.IsVisible(WindowInsetsCompat.Type.NavigationBars()) || windowInsets.IsVisible(WindowInsetsCompat.Type.StatusBars()); - - if (isSystemBarVisible) - { - currentWindow.InsetsController?.Hide(WindowInsets.Type.SystemBars()); - } - } - } - else - { - defaultSystemUiVisibility = (int)currentWindow.DecorView.SystemUiFlags; - - currentWindow.DecorView.SystemUiFlags = currentWindow.DecorView.SystemUiFlags - | SystemUiFlags.LayoutStable - | SystemUiFlags.LayoutHideNavigation - | SystemUiFlags.LayoutFullscreen - | SystemUiFlags.HideNavigation - | SystemUiFlags.Fullscreen - | SystemUiFlags.Immersive; - } - - if (windowInsetsControllerCompat is not null) - { - windowInsetsControllerCompat.Hide(barTypes); - windowInsetsControllerCompat.SystemBarsBehavior = WindowInsetsControllerCompat.BehaviorShowTransientBarsBySwipe; - } - - } - else + Window window = Platform.CurrentActivity?.Window ?? throw new InvalidOperationException("Current activity is null"); + View decorView = window.DecorView ?? throw new InvalidOperationException("DecorView is null"); + AndroidX.Core.View.WindowInsetsControllerCompat insetsController = WindowCompat.GetInsetsController(window, decorView) ?? throw new InvalidOperationException("InsetsController is null"); + if (OperatingSystem.IsAndroidVersionAtLeast(26)) { - if (OperatingSystem.IsAndroidVersionAtLeast(30)) + if (hidden) { - if (isSystemBarVisible) - { - currentWindow.InsetsController?.Show(WindowInsets.Type.SystemBars()); - } + window.ClearFlags(WindowManagerFlags.LayoutNoLimits); + window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen); + insetsController.SystemBarsBehavior = WindowInsetsControllerCompat.BehaviorShowTransientBarsBySwipe; + insetsController.Hide(WindowInsetsCompat.Type.SystemBars()); } else { - currentWindow.DecorView.SystemUiFlags = (SystemUiFlags)defaultSystemUiVisibility; - } - - if (windowInsetsControllerCompat is not null) - { - windowInsetsControllerCompat.Show(barTypes); - windowInsetsControllerCompat.SystemBarsBehavior = WindowInsetsControllerCompat.BehaviorDefault; + window.ClearFlags(WindowManagerFlags.Fullscreen); + window.SetFlags(WindowManagerFlags.DrawsSystemBarBackgrounds, WindowManagerFlags.DrawsSystemBarBackgrounds); + insetsController.SystemBarsBehavior = WindowInsetsControllerCompat.BehaviorDefault; + insetsController.Show(WindowInsetsCompat.Type.SystemBars()); } - - WindowCompat.SetDecorFitsSystemWindows(currentWindow, true); } }