Les mots qu'on emploie pour parler de la refonte, chacun rattaché à une zone précise de l'écran. Objectif : que « barre d'action », « bande de contexte » ou « feuille » désignent la même chose des deux côtés de la conversation. Les maquettes qui utilisent ce vocabulaire sont dans Vue Éditeur #1417.
Un éditeur de réponse, clavier ouvert, avec toutes les zones nommées en même temps. En vrai elles ne coexistent jamais toutes : le tiroir est replié la plupart du temps, et la bande de contexte n'apparaît que si elle a quelque chose à dire — et jamais sur une frappe : ses déclencheurs sont posés à l'ouverture ou par un geste, et une erreur ne s'efface que sur un geste. Le tiroir, lui, est dessiné ici dans le flux pour pouvoir être nommé ; en vrai il se superpose au bas du champ, qui ne change pas de hauteur.
Chaque terme avec sa zone, sa hauteur cible quand elle est fixe, et le nom anglais quand il sert à retrouver la chose dans le code ou la doc Material.
La barre du haut, 48 dp. Elle porte le retour, le titre de l'écran, une seconde ligne de contexte (le sujet, le nombre de destinataires) et les actions qui font changer de surface : l'aperçu. Sous 400 dp de hauteur (paysage téléphone), elle s'efface : 👁 passe dans la barre d'action.
Règle : rien de ce qui s'y trouve ne dépend de ce que tu es en train de taper.
La barre du bas, 56 dp, épinglée juste au-dessus du clavier. Elle porte les actions qui agissent sur le message en cours : format, smileys, image, options, envoyer.
Aujourd'hui elle existe déjà, avec « Options », « Smileys » et « Envoyer » en toutes lettres. La refonte y ajoute le format et l'image, et passe tout en icônes seules pour rendre la largeur à « Envoyer ». Les libellés survivent comme nom accessible TalkBack, et un appui long les affiche en info-bulle.
Une ligne unique de 32 dp, ancrée au-dessus de la barre d'action, absente si elle n'a rien à dire, jamais plus haute que 32 dp, et jamais apparue ni disparue sur une frappe. Elle porte deux registres :
À gauche, l'état durable, en pastilles : citations (en mode cartes seulement), brouillon retrouvé (Restaurer / Ignorer — l'autosave, elle, est silencieuse), sondage préservé, et le nombre de destinataires en réponse MP (« Gérer » pour l'owner d'un DT). Chaque pastille est un raccourci vers la surface qui la gouverne.
À droite, l'événement du moment : « Envoi 2/3… », erreur. Un seul à la fois, l'erreur d'abord.
La règle qui les fait cohabiter : un événement ne masque jamais les pastilles, il les compacte à leur compteur nu. Une erreur tient sur la même ligne : un résumé court, le texte entier derrière « Détails ». La bande ne change jamais de hauteur — la faire passer à deux lignes laisserait 150 dp au champ, sous son plancher.
Elle remplace deux choses : les bandeaux actuels, qui s'empilent en tête et poussent le champ sous le pli — c'est ce qui cachait les boutons Restaurer/Ignorer sur le S9 — et le « rail de contexte » de la V1 des maquettes, qui faisait la même chose en haut de l'écran. Les fusionner supprime un concept et rend 26 dp au sommet.
La rangée de chips BBCode, dépliée par l'icône Aa et repliée à la frappe suivante. 2 × 38 dp quand elle est ouverte.
Elle se superpose au bas du champ : le champ garde sa hauteur, ses dernières lignes passent dessous, et le caret est remonté au-dessus par défilement interne — sinon l'insertion se ferait hors de vue, ce que le critère C5 interdit.
La zone de saisie elle-même : le cadre, le label flottant, le texte, le curseur, les poignées. Depuis la 0.59.8 c'est un BasicTextField à état, l'API Compose moderne.
Sa hauteur minimale est de 160 dp. « Le champ est l'écran » veut dire : tout le reste est à hauteur fixe, il prend ce qui reste.
Les champs qui décrivent le message plutôt que son corps : titre et sous-catégorie d'un sujet, destinataires et sujet d'un nouveau MP. Ils quittent la colonne : la seconde ligne de l'app bar les résume, un appui ouvre ce panneau pour les modifier.
Aucun repli déclenché par le clavier ou le focus — ce serait une seconde animation. Un nouveau MP sans destinataire s'ouvre directement sur ce panneau. Remplace l'« en-tête collant » des maquettes V3-V4.
Une surface plein écran qui remplace temporairement le champ, avec sa propre app bar et sa propre barre du bas (« Retour au message ») : le panneau citations du mode cartes, par exemple. On y fait une tâche, on revient.
À ne pas confondre avec une feuille : un panneau occupe l'écran et a sa propre app bar, une feuille se superpose et laisse voir ce qu'il y a dessous.
Deux surfaces visibles en même temps, séparées par une poignée déplaçable : le source BBCode et son rendu. Dessous en portrait, à droite en paysage et sur tablette.
Le point de bascule est la size class de la fenêtre, pas l'orientation du téléphone : un écran scindé large se comporte comme un paysage.
Une surface qui monte du bas et se superpose à l'écran, avec un voile sombre derrière. Les smileys et les options en sont. On la referme en tapant à côté ou en la tirant vers le bas.
La réponse rapide est aussi une feuille : elle contiendra l'éditeur complet au lot R4, c'est un champ nu aujourd'hui. Une feuille M3 vit dans sa propre fenêtre, avec ses propres insets — c'est ce qui la sépare des quatre éditeurs.
Une boîte centrée, modale, qui bloque jusqu'à ce qu'on réponde. « Insérer une image » en est un. On en met le moins possible.
La confirmation d'envoi n'en est pas un dans les autres éditeurs : c'est un bouton armé, qui ne bloque rien.
Le clavier fourni par le système. Sa hauteur varie selon le clavier installé et la langue : on ne peut pas la supposer, on la lit dans les insets.
Clavier ouvert sur un 360 × 740, il reste environ 330 dp de fenêtre pour tout le reste.
Un petit bouton en pilule, bordé, pour une action ponctuelle. Les chips BBCode en sont (dix actions + Couleur aujourd'hui). Contrairement à un bouton, un chip est fait pour vivre en rangée avec ses semblables.
La paire d'emphase Material : le tonal (fond clair teinté) pour les actions secondaires, le rempli (fond plein) pour l'action principale. Aujourd'hui : tonal pour Options et Smileys, rempli pour Envoyer. Dans la refonte, seul Envoyer reste un bouton rempli ; les quatre autres sont des boutons-icônes.
Une étiquette arrondie, compacte, qui affiche un état plutôt qu'elle ne déclenche une action — même si on peut taper dessus pour aller voir. Le côté gauche de la bande de contexte en est fait.
Une ligne par personne citée : auteur, extrait, et les boutons monter / descendre / retirer. Elles portent l'ordre dans lequel les citations seront collées.
Elles n'existent qu'en mode cartes, qui est opt-in : le BBCode [quotemsg] y est fabriqué au moment de l'envoi, à partir des cartes. Dans la refonte, elles quittent le haut de l'éditeur pour le panneau citations.
Comment « Citer » arrive dans l'éditeur, choisi par un réglage et lu une fois à l'ouverture. Inline, le défaut : le [quotemsg] est collé dans le champ, éditable, et on répond entre les citations à la main. Cartes : les citations restent hors du champ jusqu'à l'envoi.
La refonte garde les deux et ne convertit jamais un brouillon de l'un à l'autre. La pastille ❝ et le panneau citations n'existent qu'en mode cartes.
Le format actuel des messages d'état : un bloc pleine largeur inséré dans le flux, qui pousse tout ce qui suit vers le bas. C'est précisément ce que la bande de contexte remplace.
« Envoyer » qui, au premier tap, devient « Confirmer » au lieu d'envoyer. Un garde-fou sans dialogue modal. Les boutons secondaires disparaissent pendant l'armement, pour que le libellé ne passe pas à la ligne.
L'unité de mesure Android, indépendante de la finesse de l'écran. Un S9 fait 360 dp de large, un S25 aussi ou presque : les téléphones ont grandi en pixels, pas en dp. C'est pourquoi une mise en page qui tient sur 360 tient partout.
Les bandes de l'écran occupées par le système : barre de statut, barre de navigation, clavier, encoche. L'app doit les lire et s'y ajuster.
Le bug Samsung de l'an dernier venait de deux insets qui s'additionnaient : la barre se décalait deux fois. D'où le union() qui n'en garde qu'un.
Ce qui reste à l'app une fois les insets déduits. Sur un 360 × 740 : environ 590 dp clavier fermé, 330 dp clavier ouvert. Tous les budgets de hauteur se comptent là-dedans.
La mécanique qui empêche le chrome de manger le champ : on plafonne la hauteur de tout ce qui n'est pas la saisie, en réservant d'abord les 160 dp du champ, et ce qui dépasse défile.
Le bug du S9 venait de là : la cause première était dans l'éditeur de post, dont le titre et la barre d'outils étaient hors de la zone bornée — le correctif a fini par toucher les cinq surfaces.
Le réglage d'accessibilité qui grossit tout le texte, de 0,85 à 2. À 1,3 le label « Contenu BBCode » ne tient plus sur une ligne et se fait couper — c'est un des défauts fichés.
L'app y ajoute son propre préréglage de lecture (S 0,9 · M 1 · L 1,15), et les deux se multiplient : le pire cas à dimensionner est 1,3 × 1,15.
Le point où le séparateur du partage s'arrête : le source vient d'atteindre ses 160 dp. Au-delà, le glissement devient élastique, la poignée change de couleur et une puce « Relâcher pour fermer le clavier » apparaît sur l'aperçu.
Relâcher au-delà du cran ferme le clavier, une seule fois, jamais pendant le glissement. La résistance est l'affordance : un libellé permanent ne tiendrait pas dans les 18 dp du séparateur à fontScale 1,3.
Les deux gouttes qu'on tire pour étendre une sélection. Elles vivent dans une fenêtre flottante séparée — c'est pourquoi aucun test automatisé ne prouve ce geste, et que chaque correctif qui y touche exige une preuve filmée sur téléphone réel.
Le trait clignotant. « Le caret suit » veut dire que le champ défile tout seul pour le garder visible quand on tape ou quand le clavier monte — ce qui a occupé tout #447.
La catégorie de largeur de la fenêtre — Compact, Medium, Expanded — et non du téléphone. C'est elle qui décide si l'aperçu se met dessous ou à côté ; un écran scindé la fait changer sans qu'on tourne l'appareil.
La hauteur compte aussi : sous 400 dp, l'app bar s'efface (règle 1).
Les quatre écrans où l'on tape un message : répondre / modifier un post, nouveau sujet / modifier le premier message, nouveau MP, réponse MP. Plus la feuille de réponse rapide, qui est une cinquième surface aujourd'hui distincte.
« Dans les quatre éditeurs » veut toujours dire ces quatre-là.
La feuille qui monte depuis la vue Topic pour répondre sans quitter la lecture. Elle n'a aujourd'hui ni format ni smileys, et son bouton ⤢ escalade vers l'éditeur plein écran en emportant le texte et les citations — pas la sélection.
Elle est opt-in par préréglage de surface depuis #951 : l'éditeur plein écran est le défaut.
Le balisage de HFR. Deux pièges maison : [fixed] est un bloc et jamais de l'inline, et la couleur se ferme avec son propre code ([#FF0000]…[/#FF0000]).
Les dix conditions d'acceptation écrites dans l'issue #1417, à vérifier sur téléphone réel et filmées. Quand on dit « ça casse C6 », on parle du critère « aucun saut ni double animation à l'ouverture du clavier ou au retour d'une feuille ».
Le découpage livrable de la refonte : R0a (spike device du tiroir), R0b (contrat d'erreur unique), R1a (éditeur de post), R1b-1 (nouveau sujet), R1b-2 (MP), R2a (panneau citations), R2b (aperçu en partage), R4 (réponse rapide). R3 est sorti de la phase (#381), R5 (BTF2) est déjà livré.
Un lot = une PR, une build dev, un retour terrain. Promotion en bêta à la fin de la phase seulement. Les règles que chaque lot doit tenir sont numérotées ED-nn dans la spec de l'éditeur.
dev = build à chaque lot, GitHub et F-Droid, pour les testeurs du topic DEV. bêta = ce qui a survécu aux retours, Play en test ouvert. La promotion de dev vers bêta demande un go explicite.
Les paires qu'on confond le plus vite, et le critère qui les sépare.
La barre d'action est en bas, à hauteur fixe, et porte les actions du message (envoyer, options, smileys).
La barre d'outils BBCode est la rangée de chips de formatage. Aujourd'hui elle est en haut, dans le flux ; dans la refonte elle devient le tiroir de format, superposé au bas du champ.
Le bandeau est le format actuel : un bloc pleine largeur inséré dans le flux, qui pousse tout ce qui suit vers le bas et peut finir sous le pli.
La bande est hors du flux, à hauteur fixe, collée à la barre d'action. Elle ne prend jamais de place au champ au-delà de ses 32 dp, et ne change jamais de hauteur — ce qu'elle affiche est toujours à portée du pouce.
La feuille se superpose, laisse voir l'écran derrière, se ferme en tapant à côté. Le panneau prend l'écran et a sa propre app bar. Le dialogue est centré, modal, et bloque.
Test simple : « est-ce que je peux encore voir mon message ? » Oui pour la feuille, non pour le panneau.
Le champ est la boîte de saisie. La zone bornée est la mécanique qui lui garantit ses 160 dp en plafonnant tout le reste.
« Le titre n'était pas dans la zone bornée » est la formulation exacte du bug S9 : le champ allait bien, c'est ce qui l'entourait qui n'était pas compté.
L'aperçu passe déjà par le moteur de rendu des posts ; ce qui diffère est le parser BBCode qui l'alimente, et qui ne résout pas les smileys (#873).
La refonte les fait converger, pour que ce qu'on relit soit littéralement ce qu'on verra publié.
Le bouton armé change de libellé et attend un second tap, sans rien bloquer : on peut encore modifier son texte.
La confirmation de la réponse rapide est un vrai dialogue modal. Les unifier sur le bouton armé fait partie de la refonte.