Redface 2 · #1417 · vocabulaire de travail

Anatomie de l'éditeur

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.

01

La planche

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.

10:41◍ ▲ ▮
A
←
Répondre[HFR] Redface 2 — client Android
👁
B Message
[quotemsg=…]les bords haut et bas[/quotemsg]
Exactement ça, c'est le lot R1.
Le spike a tranché sur BTF2.
C GrasItalique SoulignéCita…
D ❝ 3 ↺ Envoi 2/3…
E Aa☺🖼 ⋯Envoyer
F
a
z
e
r
t
y
u
i
o
p
q
s
d
f
g
h
j
k
l
m
?123
espace
↵
  1. AApp bar — la barre du haut. Retour, titre de l'écran, contexte en seconde ligne, et les actions qui changent de surface (aperçu). Hauteur fixe, elle ne bouge jamais.
  2. BChamp — la zone de saisie elle-même, avec son label flottant et son cadre. Le texte défile dedans : c'est tout l'objet de la refonte. Rien ne s'intercale entre l'app bar et lui.
  3. CTiroir de format — la rangée de chips BBCode, dépliée par Aa. Elle se superpose au bas du champ : le champ garde sa hauteur, le caret est remonté au-dessus par défilement interne.
  4. DBande de contexte — la ligne qui porte tout le reste : à gauche l'état durable en pastilles (citations en mode cartes, brouillon retrouvé, destinataires en réponse MP, sondage préservé), à droite l'événement du moment (upload, erreur) — résumé d'une ligne, hauteur constante.
  5. EBarre d'action — la barre du bas. Les actions qui agissent sur le message : format, smileys, image, options, envoyer. En icônes, épinglée au-dessus du clavier.
  6. FIME — le clavier logiciel, fourni par le système. On ne le dessine pas, mais sa hauteur est la contrainte numéro un.
02

Le lexique

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.

Structure d'écran

App bar

top app bar · barre d'application

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.

Barre d'action

action bar · bottom bar

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.

Bande de contexte

context band

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.

Tiroir de format

format drawer

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.

Champ

text field · zone de saisie

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.

Panneau d'en-tête

header panel

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.

Panneau

panel

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.

Partage

split

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.

Feuille

bottom sheet

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.

Dialogue

dialog

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.

IME

input method editor · clavier logiciel

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.

Composants

Gras

Chip

assist chip

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.

Opt Env

Bouton tonal · bouton rempli

filled tonal · filled button

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.

❝ 3

Pastille

pill · badge

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.

❝ styx42
les bords…

Carte de citation

quote card

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.

inline
· cartes

Mode de citation

inline · cards

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.

Brouillon
retrouvé

Bandeau

banner

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.

Confirmer

Bouton armé

armed submit

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

Mise en page et mesures

dp

dp

density-independent pixel

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.

Inset

window insets · encarts système

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.

Fenêtre utile

usable window

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.

Zone bornée · budget

bounded zone · layout budget

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.

AA

fontScale

échelle de police système

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.

⇅

Cran

detent

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.

texte sélec

Poignée de sélection

selection handle

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.

texte

Caret

curseur de saisie

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.

Compact

Size class

window size class

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

Vocabulaire du projet

4

Surface d'écriture

writing surface

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

Réponse rapide

quick reply

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.

[b]gras[/b]

BBCode

—

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

C1 C2 C3
C4 C5 C6

Critères C1 … C10

acceptance criteria

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

R0a‑R4

Lots

—

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 →
bêta →
prod

Canaux

dev · bêta · prod

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.

03

Ce qui n'est pas la même chose

Les paires qu'on confond le plus vite, et le critère qui les sépare.

Barre d'action ≠ barre d'outils BBCode

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.

Bande de contexte ≠ bandeau

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.

Feuille ≠ panneau ≠ dialogue

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.

Champ ≠ zone bornée

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

Aperçu ≠ rendu de la vue Topic

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

Bouton armé ≠ confirmation

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.