Browse Source

Force app theme change when status bar theme changes on android.

pull/10145/head
Emmanuel Hansen 4 years ago
parent
commit
34c1b46b30
  1. 2
      samples/ControlCatalog.Android/Resources/values/styles.xml
  2. 4
      samples/ControlCatalog/MainView.xaml.cs
  3. 3
      src/Android/Avalonia.Android/AvaloniaMainActivity.cs
  4. 11
      src/Android/Avalonia.Android/Platform/AndroidInsetsManager.cs

2
samples/ControlCatalog.Android/Resources/values/styles.xml

@ -4,7 +4,7 @@
<style name="MyTheme">
</style>
<style name="MyTheme.NoActionBar" parent="@style/Theme.AppCompat.NoActionBar">
<style name="MyTheme.NoActionBar" parent="@style/Theme.AppCompat.DayNight.NoActionBar">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>

4
samples/ControlCatalog/MainView.xaml.cs

@ -122,7 +122,7 @@ namespace ControlCatalog
};
ViewModel.DisplayEdgeToEdge = insets.DisplayEdgeToEdge;
ViewModel.IsSystemBarVisible = insets.IsSystemBarVisible ?? false;
ViewModel.IsSystemBarVisible = insets.IsSystemBarVisible ?? true;
ViewModel.PropertyChanged += async (sender, args) =>
{
@ -138,7 +138,7 @@ namespace ControlCatalog
// Give the OS some time to apply new values and refresh the view model.
await Task.Delay(100);
ViewModel.DisplayEdgeToEdge = insets.DisplayEdgeToEdge;
ViewModel.IsSystemBarVisible = insets.IsSystemBarVisible ?? false;
ViewModel.IsSystemBarVisible = insets.IsSystemBarVisible ?? true;
};
}

3
src/Android/Avalonia.Android/AvaloniaMainActivity.cs

@ -33,6 +33,9 @@ namespace Avalonia.Android
lifetime.View = View;
}
Window?.ClearFlags(WindowManagerFlags.TranslucentStatus);
Window?.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
base.OnCreate(savedInstanceState);
SetContentView(View);

11
src/Android/Avalonia.Android/Platform/AndroidInsetsManager.cs

@ -2,6 +2,7 @@
using System.Collections.Generic;
using Android.OS;
using Android.Views;
using AndroidX.AppCompat.App;
using AndroidX.Core.View;
using Avalonia.Android.Platform.SkiaPlatform;
using Avalonia.Controls.Platform;
@ -124,6 +125,8 @@ namespace Avalonia.Android.Platform
{
_statusBarTheme = value;
var isDefault = _statusBarTheme == null;
if (!_topLevel.View.IsShown)
{
return;
@ -143,6 +146,8 @@ namespace Avalonia.Android.Platform
compat.AppearanceLightStatusBars = value == Controls.Platform.SystemBarTheme.Light;
compat.AppearanceLightNavigationBars = value == Controls.Platform.SystemBarTheme.Light;
AppCompatDelegate.DefaultNightMode = isDefault ? AppCompatDelegate.ModeNightFollowSystem : compat.AppearanceLightStatusBars ? AppCompatDelegate.ModeNightNo : AppCompatDelegate.ModeNightYes;
}
}
@ -150,7 +155,11 @@ namespace Avalonia.Android.Platform
{
get
{
var compat = ViewCompat.GetRootWindowInsets(_topLevel.View);
if(_activity.Window == null)
{
return true;
}
var compat = ViewCompat.GetRootWindowInsets(_activity.Window.DecorView);
return compat?.IsVisible(WindowInsetsCompat.Type.StatusBars() | WindowInsetsCompat.Type.NavigationBars());
}

Loading…
Cancel
Save