using Android.App; using Android.Content.PM; using Android.OS; using Android.Views; using AndroidX.Core.View; using Microsoft.Extensions.DependencyInjection; using SteUp.Shared.Core.Messages.System; namespace SteUp.Maui { [Activity( Theme = "@style/Maui.SplashTheme", MainLauncher = true, WindowSoftInputMode = SoftInput.AdjustResize | SoftInput.StateHidden, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] public class MainActivity : MauiAppCompatActivity { protected override void OnCreate(Bundle? savedInstanceState) { base.OnCreate(savedInstanceState); // Da Android 15 (API 35) il edge-to-edge e' forzato e adjustResize non ridimensiona // piu' la finestra: la tastiera si limita a coprire la WebView. Riduciamo noi il // content view dell'altezza dell'IME cosi' il layout Blazor (100vh) si ricalcola. if (FindViewById(Android.Resource.Id.Content) is { } content) ViewCompat.SetOnApplyWindowInsetsListener(content, new ImeInsetsListener()); } public override void OnBackPressed() { // Se la UI Blazor ha un form aperto se ne occupa lei (propone il salvataggio // come bozza); altrimenti comportamento standard. var backButton = IPlatformApplication.Current?.Services.GetService(); if (backButton?.TryHandleBackPressed() == true) return; base.OnBackPressed(); } private sealed class ImeInsetsListener : Java.Lang.Object, IOnApplyWindowInsetsListener { public WindowInsetsCompat OnApplyWindowInsets(Android.Views.View? v, WindowInsetsCompat? insets) { if (v is null || insets is null) return insets!; var ime = insets.GetInsets(WindowInsetsCompat.Type.Ime()).Bottom; var systemBars = insets.GetInsets(WindowInsetsCompat.Type.SystemBars()).Bottom; // La barra di navigazione e' gia' gestita da SafeAreaEdges in MainPage: // teniamo solo la parte di tastiera che la eccede, per non sommare due volte. var bottom = System.Math.Max(0, ime - systemBars); if (v.PaddingBottom != bottom) v.SetPadding(v.PaddingLeft, v.PaddingTop, v.PaddingRight, bottom); return insets; } } } }