Feature Requests
Planned

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 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).

0 Comments

Sign in to comment

No comments yet. Be the first to share your thoughts!