Files
SteUP_Dotnet/SteUp.Maui/Platforms/Android/MainActivity.cs
T
MarcoE 811d8a86d8 Correzioni alla UI dopo la verifica sul terminale
Prime correzioni fatte guardando l'app su un Honeywell EDA52 (720x1440
@320dpi, cioe' 360 punti logici di larghezza) invece che a occhio.

- Barra di stato: era tinta di corallo da colorPrimaryDark, cioe' l'accento
  usato come decorazione della cornice di sistema. Ora si fonde con lo
  sfondo dell'app, con icone scure (WindowInsetsController).
- Gradino compatto sotto i 380px: la scala di STILE_UI e' tarata su telefoni
  piu' larghi, e a misura piena i titoli si troncavano e in una schermata
  entrava pochissimo lavoro. Le proporzioni restano, cambia la taglia.
  Sui telefoni normali non cambia nulla.
- Icone delle azioni costruttive: usavano il fondo del tono danger, quindi
  "Nuova scheda" e "Aggiungi una foto" erano identiche a "Elimina
  ispezione". Ora usano il tono info. Un --primary-surface non risolveva:
  il primario di SteUP e' gia' un rosso, quindi un suo fondo tenue resta
  indistinguibile da quello danger.
- Testata: il titolo puo' andare su due righe prima di troncare. Il nome del
  punto vendita e' l'ancora del compito, "D11-PRIMO PREZ..." non aiuta.
- Schermata ispezione: il nome del punto vendita non e' piu' ripetuto nel
  pannello di riepilogo, dove era gia' in testata.
- Padding dei gruppi di form e della barra azioni ridotti su schermo stretto.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 11:52:31 +02:00

79 lines
3.2 KiB
C#

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);
ApplySystemBarsAppearance();
// 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());
}
/// <summary>
/// Le barre di sistema si fondono con lo sfondo chiaro dell'app: icone
/// scure su fondo chiaro. Senza questo la barra di stato resta tinta
/// dell'accento, che nel sistema di design indica l'azione, non la
/// cornice.
/// </summary>
private void ApplySystemBarsAppearance()
{
if (Window is null) return;
var controller = WindowCompat.GetInsetsController(Window, Window.DecorView);
controller.AppearanceLightStatusBars = true;
controller.AppearanceLightNavigationBars = true;
}
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<BackButtonService>();
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;
}
}
}
}