Android : 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 commeAppLock) : 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.ttfdansres/font. Sinon, police système.
Coût à garder en tête
- Plus de code natif à maintenir ; les textes dans
strings.xmlen, 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).
0 Comments
Sign in to comment
No comments yet. Be the first to share your thoughts!
