PlannedAndroid : refaire la fenêtre « Style du widget » avec des aperçus (mise en page native à nous)
Contexte Un appui long sur un widget › Paramètres (et, avant Android 12, la pose du widget) ouvre WidgetStyleActivity (apps/mobile/android/app/src/main/java/app/loomkeep/widgets/WidgetStyleActivity.kt). C'est une activité transparente (WidgetStyleTheme) qui n'affiche qu'un AlertDialog standard avec setSingleChoiceItems : un titre et deux boutons radio, « Affiches » / « Liste ». On ne contrôle donc que le contenu (titre, options, option cochée, ce qui se passe au choix), pas la mise en page : fenêtre, radios, polices et animation sont celles d'Android. Défaut visible en plus : WidgetStyleTheme ne définit pas de colorAccent, donc les radios sont sarcelle (défaut AppCompat) au lieu de l'ambre Séance. Et « Affiches / Liste » écrit en texte se comprend mal tant qu'on ne voit pas le résultat. ## Décision On part directement sur l'option 2 : remplacer l'AlertDialog par une mise en page à nous. On ne passe pas par l'étape « habiller le dialogue avec un thème » (qui ne permet ni image ni aperçu). ## Ce qu'on construit L'activité n'est pas obligée d'ouvrir un AlertDialog : c'est une vraie activité, elle peut afficher n'importe quelle vue avec setContentView(...) sur son fond transparent. C'est la même technique que l'écran de verrouillage (AppLock.java, PR #541), qui construit ses LinearLayout / TextView / ImageView à la main. - Un panneau en bas (ou une carte centrée) : « Style du widget ». - Deux grandes cartes d'aperçu, « Affiches » et « Liste », qui montrent à quoi ressemblera le widget. Les aperçus existent déjà : res/layout/widget_preview_.xml (ceux du sélecteur de widgets d'Android). - Toucher une carte : elle s'entoure d'ambre et se soulève légèrement, puis choose() enregistre et ferme (logique actuelle inchangée : updateAppWidgetState, redessin du widget, RESULT_OK). - Couleurs Séance (widget_ / seance_*, clair et sombre), animations d'entrée et de sortie (apps/web/DESIGN.md › Motion ; l'échelle d'animation d'Android les coupe pour le mouvement réduit). ## Comment l'écrire - Vues classiques (XML dans res/layout/, ou en code comme AppLock) : aucune dépendance nouvelle. Recommandé. - Compose : Kotlin et le compilateur Compose sont déjà là pour Glance, mais Glance n'apporte pas les composants d'interface ; il faudrait ajouter androidx.compose.material3 (nouvelle dépendance, à valider). - Police Séance : les polices n'existent qu'en woff2 (apps/mobile/www/shell-fonts), illisibles par une vue Android ; il faut ajouter les .ttf dans res/font. Sinon, police système. ## Coût à garder en tête - Plus de code natif à maintenir ; les textes dans strings.xml en, fr, it. - Accessibilité TalkBack (cartes = vrais éléments cliquables avec description), clair et sombre à gérer nous-mêmes. - Une modification n'arrive qu'avec une nouvelle version de l'APK. ## Fini quand - Les deux styles sont choisis par leurs aperçus, en clair comme en sombre, avec TalkBack. - Annuler (retour, toucher hors du panneau) ne change rien et ferme. - Une maquette validée avant le code (3 pistes).
Logan·8 days ago