refactor(arch): split App into shared library + Desktop + Android heads

The Avalonia UI code (App, Views, ViewModels, Localization, Assets) now
lives in src/App as a plain library (no OutputType). Two thin heads
reference it:

- src/App.Desktop/ — WinExe, Avalonia.Desktop, hosts MainView in a
  MainWindow; carries Program.cs and app.manifest (moved from src/App)
- src/App.Android/ — net10.0-android, Avalonia.Android, MainActivity/
  MainApplication; targets API 23+, EmbedAssembliesIntoApk=true so the
  apk is self-contained for sideloading

All event handlers and TopLevel-dependent calls (file picker, clipboard,
folder picker) moved from MainWindow.axaml.cs into the new shared
MainView.axaml.cs (UserControl), using TopLevel.GetTopLevel(this) so
they work on both platforms. Esc/Back key handling is also in MainView.
MainWindow becomes a thin shell that hosts MainView.

Framework bump: all projects move to net10.0; Cli and Tests follow.
This commit is contained in:
2026-06-12 16:06:37 +02:00
parent a9ded6497a
commit e94eaf7700
19 changed files with 1110 additions and 939 deletions
@@ -82,6 +82,11 @@ public partial class MainWindowViewModel : ViewModelBase
/// <summary>Titolo della finestra con la versione, es. "Palladium Wallet 0.9.0".</summary>
public string WindowTitle => $"Palladium Wallet {AppVersion}";
/// <summary>true su desktop (Windows/Linux); false su mobile. Nasconde le funzioni
/// legate al filesystem libero (apri-da-file, scelta cartella dati) non valide nel
/// sandbox Android.</summary>
public bool IsDesktop => !OperatingSystem.IsAndroid() && !OperatingSystem.IsIOS();
/// <summary>Unità corrente per il campo importo del pannello Invia.</summary>
public string UnitLabel => _config.Unit;