Redface 2 · #1417 · Vue Éditeur 2

Le champ est l'écran

Maquettes de la refonte de l'éditeur, posées sur l'inventaire complet de ce que les quatre surfaces d'écriture savent déjà faire en bêta 0.60.0. Rien n'est retiré : tout ce qui existe est replacé, et ce qui est replacé rend des pixels au champ de saisie.

23 septembre 2026 — ces maquettes ne font plus foi. La spec de l'éditeur (v0.3, relue deux fois contre le code) les remplace et les corrige sur plusieurs points : les citations sont en BBCode dans le champ par défaut (les cartes sont opt-in) ; le titre et la sous-catégorie d'un sujet, les destinataires et le sujet d'un MP quittent la colonne pour un panneau d'en-tête ; le lot R3 sort de la phase ; deux lots préalables (R0a, R0b) s'ajoutent. Les rendus Roborazzi montrent la cible à jour.

bêta 0.60.0 · app-v343 4 surfaces + réponse rapide 360 × 740 dp (S10e / S9) schéma M3 réel de l'app 22 septembre 2026 · V4.3 (gelée)
01

Ce qui existe aujourd'hui

Le contrat de la refonte : chaque ligne ci-dessous doit se retrouver dans les maquettes. Relevé dans le code de 0.60.0 — :core:ui/editor, :feature:editor, :feature:messages, QuickReplySheet.

Les quatre surfaces

  • Répondre au sujet / Modifier votre message PostEditorScreen
  • Nouveau sujet / Modifier le premier message TopicFormScreen
  • Nouveau MP (destinataires + sujet) PrivateMessageCompose
  • Réponse MP dans la conversation MessageEditorComponents
  • + la feuille de réponse rapide de la vue Topic QuickReplySheet

Champ de saisie

  • BasicTextField 2 depuis 0.59.8, réserve de 160 dp
  • Label flottant « Contenu BBCode », placeholder « Saisissez votre message… »
  • Autofocus à l'ouverture #555
  • Capitalisation en début de phrase #237
  • Poignées de sélection + autoscroll dans le champ #447
  • TextClassifier neutralisé (smart selection Android) #1427
  • Verrouillé en lecture seule pendant un upload par lot

Barre d'outils BBCode

  • Uploader épinglé en tête, spinner pendant l'envoi #459
  • Gras · Italique · Souligné · Barré
  • Citation · Code · Bloc fixé · Spoiler
  • Lien · Image (dialogue URL)
  • Couleur → Rouge, Bleu, Vert, Orange, Gris
  • Défilement horizontal, chips M3 (onze : dix actions + Couleur)

Citations

  • Cartes ❝ auteur — extrait, dans l'ordre de citation
  • Monter / descendre / retirer par carte
  • Tout vider à partir de deux cartes #436
  • BBCode [quotemsg] matérialisé à l'envoi, jamais dans le champ
  • Annonces TalkBack + focus après retrait
  • Cartes plafonnées et scrollables en réponse rapide #808

Brouillons

  • Autosave Room par clé d'éditeur EditorDraftStore
  • Bandeau « Un brouillon non envoyé a été retrouvé »
  • Restaurer (concatène) / Ignorer (supprime) #405 #1415
  • L'offre survit à la saisie du titre et des destinataires
  • Purge par rétention DraftRetentionPurger

Images

  • Photo picker / GET_CONTENT / explorateur #1128
  • Upload multiple, compteur « Envoi n/N… »
  • Hébergeurs imgur et diberie
  • Insertion d'URL manuelle Insérer une image
  • 7 erreurs typées, dont « Aucune image reçue du sélecteur » #1420

Smileys

  • Onglet Standard — les 58 builtin, synchrones
  • Onglet Wiki — recherche perso à partir de 3 caractères
  • États Idle / Recherche… / Résultats / Vide / Erreur
  • Grille 62 % de la hauteur écran, plancher 320 dp #900
  • Décoration de cellule : aucune / contour / séparateurs #989
  • Insertion au token, la feuille se referme

Options du message

  • Activer votre signature
  • Désactiver les smilies
  • Activer la notification par email du sujet
  • Ton du message — 16 icônes HFR, replié par défaut #340
  • Valeurs par défaut lues dans le formulaire HFR

Envoi

  • Barre épinglée au-dessus du clavier, inset unique #624 #1404
  • Options · Smileys · Envoyer
  • Envoi armé → Confirmer, les secondaires s'effacent
  • Spinner de chargement du formulaire et d'envoi
  • 9 erreurs d'envoi typées, dont anti-flood et sujet fermé

Propre au sujet

  • Titre du sujet (capitalisation phrase)
  • Sélecteur de sous-catégorie, absent si la catégorie n'en a pas #213
  • Note « sondage préservé, non éditable »

Propre au MP

  • Destinataires en CSV = conversation de groupe #606
  • Sujet avec compteur de caractères
  • Résumé « Destinataires : N » + feuille Gérer pour l'owner #618

Réponse rapide

  • Feuille depuis la vue Topic, champ autofocus
  • Bouton plein écran (escalade vers l'éditeur)
  • Cartes de citation plafonnées à 112 dp
  • « Insertion de la citation… » pendant le fetch
  • Envoyer + dialogue « Publier la réponse ? »
02

Ce qui coince

Sur un S9 en 360 × 740 dp, clavier ouvert, il reste 330 dp de fenêtre. Le chrome actuel en mange 202. Voici ce que le testeur voit.

Aujourd'hui Répondre, clavier fermé

Tout est empilé en colonne : bandeau, titre, barre d'outils, cartes, aperçu, puis le champ, puis la barre d'envoi.

10:41◍ ▲ ▮
←
Redface 2
Répondre au sujet 1
⬆ UploaderGras ItaliqueSouli…
❝ styx42 les bords haut et bas de la zone de saisie restent…
↑ ↓ ✕
Afficher l'aperçu
Contenu BBCod… 2
Saisissez votre message…
Options Smileys Envoyer
  • 1Un titre de 28 dp qui répète ce que l'utilisateur vient de toucher dans la vue Topic.
  • 2« Contenu BBCode » tronqué à fontScale 1.3. #872
Aujourd'hui Répondre, clavier ouvert

Le budget borné a sauvé la barre d'envoi et les 160 dp du champ. Mais trois lignes de texte, c'est le retour terrain d'antiseptiqueIncolore sur S9.

10:41◍ ▲ ▮
←
Redface 2
Répondre au sujet
⬆ UploaderGrasItali…
Afficher l'aperçu
Contenu BBCode
Le spike device a tranché : BTF2
gère nativement le drag de
poignée. 3
OptionsSmileys Envoyer
poignéepoignéespoigné
a
z
e
r
t
y
u
i
o
p
q
s
d
f
g
h
j
k
l
m
⇧
w
x
c
v
b
n
⌫
?123
espace
↵
  • 3Trois lignes visibles. Le titre, la barre d'outils et le bouton d'aperçu consomment 98 dp de la fenêtre utile, sans qu'aucun ne serve pendant la frappe.
Le relevé

Répartition de la fenêtre utile (330 dp) quand le clavier est ouvert, aujourd'hui contre la proposition.

Élément
0.60.0
Refonte
App bar
—
48 dp
Titre d'écran
28 dp
0
Barre d'outils BBCode
46 dp
0
Bouton d'aperçu
36 dp
0
Espacements de colonne
36 dp
12 dp
Barre d'action
56 dp
56 dp
Bande de contexte
—
0 ou 32 dp
Champ de saisie
128 dp
182–214 dp
  • 4De 3 à 6-7 lignes pendant la frappe : le titre passe dans l'app bar, la barre d'outils devient un tiroir superposé, l'aperçu devient une action, les bandeaux se regroupent en une bande de 32 dp.
  • 5La refonte ajoute 48 dp de chrome neuf : aujourd'hui ces écrans n'ont pas d'app bar du tout, juste un titre dans le flux. Le gain net est de +54 à +86 dp, pas des 134 que la V1 de ce tableau annonçait — elle avait oublié de déduire l'app bar.
  • 6Cibles calculées, non mesurées. Elles ne valent pas critère d'acceptation tant qu'un état filmé sur S9 et S10e ne les a pas confirmées. Le critère à tenir est 182 dp, le cas avec bande.
03

Trois règles

Le principe produit vient de styx42 sur le topic DEV : les bords du champ restent visibles et le texte défile dedans. Ces trois règles en sont la conséquence de mise en page.

Règle 1

Le chrome est à hauteur fixe, le champ est élastique

Une app bar de 48 dp en haut (retour, titre, contexte), une barre d'action de 56 dp en bas. Entre les deux, le champ prend tout, jamais moins de 160 dp.

Le titre d'écran et le sujet cité montent dans l'app bar, sur deux lignes : c'est le seul endroit qui ne bouge plus jamais.

Portrait Compact. Sous 400 dp de hauteur de fenêtre — paysage téléphone — l'app bar s'efface avec son titre ; la barre d'action reste et accueille 👁 en sixième icône, le retour passe par le geste système. Sans cette clause le chrome fixe vaudrait 136 dp sur les ~150 disponibles, et la règle serait fausse.

Règle 2

Une barre en icônes, un tiroir superposé

La barre d'action porte cinq actions permanentes en icônes : format, smileys, image, options, envoyer. Les chips BBCode vivent dans un tiroir déplié par Aa, replié à la frappe suivante.

Le tiroir est superposé au bas du champ, pas inséré dans la colonne : sinon son ouverture et son repli feraient sauter le texte à chaque aller-retour. Rien n'est perdu — les dix chips (neuf actions plus Couleur ; Image a rejoint le menu 🖼) sont à un tap.

Contrepartie à tenir : le champ réserve la hauteur du tiroir comme marge basse de défilement, sinon un caret dans les dernières lignes se retrouve recouvert et l'insertion se fait hors de vue — ce que le critère C5 interdit.

Règle 3

Une bande unique, toujours de la même hauteur

Citations armées, brouillon retrouvé, upload, erreur : une bande de contexte de 32 dp au-dessus de la barre d'action. L'état durable à gauche en pastilles, l'événement du moment à droite, réduit à un résumé d'une ligne avec un accès au détail.

Elle est absente quand elle n'a rien à dire, et elle n'apparaît ni ne disparaît sur une frappe. Deux conséquences, l'une sur le dessin, l'autre sur le code : l'autosave reste silencieuse, sinon 32 dp surgiraient sous le caret une seconde après la première lettre ; et une erreur cesse de s'effacer au premier caractère tapé — elle attend « Masquer », le prochain envoi, ou la fermeture de l'éditeur. Aujourd'hui elle part toute seule, et la bande se replierait sous le doigt.

Les citations deviennent un panneau qui remplace le champ au lieu de le comprimer. L'aperçu, lui, reste à côté du source — en dessous en portrait, à droite en paysage — parce que comparer les deux est tout son intérêt.

04

Les écrans

Douze écrans, quatorze états, rendus avec le schéma de couleurs réel de l'app et les libellés français réels des strings.xml.

Refonte Répondre, au repos

Le contexte du sujet est dans l'app bar. Le champ démarre plein écran, curseur posé.

10:41◍ ▲ ▮
←
Répondre[HFR] Redface 2 — client Android
👁
Message
Saisissez votre message…
❝ 1 citation 1
Aa☺🖼 ⋯Envoyer
  • 1La bande de contexte remplace les cartes dépliées : une pastille par chose active, tap = ouvre la surface qui la gouverne. Pas de pastille pour l'autosave — elle reste silencieuse, sinon la bande surgirait sous le caret une seconde après la première lettre.
  • 2Aa déplie le format, ⋯ ouvre les options, 👁 l'aperçu. Icônes seules : le nom accessible TalkBack reprend le libellé actuel. Un appui long affiche le libellé en info-bulle (TooltipBox) : une première dans l'app, sur une API encore expérimentale — mais 32 fichiers du projet utilisent déjà des API M3 expérimentales.
Refonte En train d'écrire

Clavier ouvert, même écran : sept lignes au lieu de trois. La bande se réduit au compteur de citations.

10:42◍ ▲ ▮
←
Répondre[HFR] Redface 2 — client Android
👁
Message
[quotemsg] styx42
Exactement ça : les bords haut et bas
de la zone de saisie doivent rester
visibles, et le texte défile dedans.
C'est le comportement de K-9 Mail.

Le lot R1 s'en occupe. 3
❝ 1
Aa☺🖼 ⋯Envoyer
occupeoccupéoccuper
a
z
e
r
t
y
u
i
o
p
q
s
d
f
g
h
j
k
l
m
⇧
w
x
c
v
b
n
⌫
?123
espace
↵
  • 3Critères C3 et C4 de l'issue : la ligne courante reste visible, la barre d'envoi reste au-dessus du clavier, inset unique navigationBars ∪ ime.
Refonte Tiroir de format

Les dix chips — neuf actions plus Couleur — à un tap sur Aa. Le tiroir se superpose au bas du champ et se replie à la frappe suivante.

10:43◍ ▲ ▮
←
Répondre[HFR] Redface 2 — client Android
👁
Message
Le spike device a tranché :
BTF2 gère nativement le drag
de poignée et l'autoscroll. 4
GrasItaliqueSouligné BarréCitation
CodeBloc fixéSpoiler LienCouleur ▾
❝ 1
Aa☺🖼 ⋯Envoyer
l'autoscrollautoscrollauto
a
z
e
r
t
y
u
i
o
p
q
s
d
f
g
h
j
k
l
m
⇧
w
x
c
v
b
n
⌫
?123
espace
↵
  • 4Deux rangées fixes au lieu d'un défilement horizontal : les dix chips sont visibles d'un coup, plus de chip qui se cache à droite.
  • 5Le tiroir se superpose au bas du champ : le champ ne change pas de hauteur, ses dernières lignes passent dessous le temps qu'il est ouvert. La sélection ne bouge pas d'un pixel (C6).
Refonte Panneau citations

Les cartes prennent l'écran au lieu de le grignoter : on réordonne, on coupe, on revient. Ouvre la porte à l'interleaving.

10:44◍ ▲ ▮
←
Citations3 citations · ordre d'envoi
Tout vider
❝ styx42les bords haut et bas de la zone de saisie…
↑ ↓ ✕
❝ thibwle retour intra-lien renvoie à la liste…
↑ ↓ ✕
❝ antiseptiqueIncolore(citation sans texte)
↑ ↓ ✕
Insertion 6
Toutes en tête Une par une, au curseur
Longueur de « Citer le début » 7
1 phrase3 lignesTout
Retour au message
  • 6« Une par une, au curseur » est la réponse à l'interleaving demandé en 0.23 : répondre entre les citations. #805
  • 7Le réglage de longueur vit ici, au contact de l'objet qu'il règle, plutôt que dans les réglages globaux. #1254
  • 8Re-citer un post ajoute une carte et le dit dans la bande à la réouverture, au lieu de recoller silencieusement. #878
  • 8bRetirer la dernière carte vide la bande : au retour, le champ a 32 dp de plus. Changement voulu et provoqué par un geste, mais à annoncer pour qu'un testeur ne le rapporte pas comme un saut.
Refonte Aperçu, portrait

Le source reste à l'écran, l'aperçu s'ouvre dessous. L'écran montre l'état après le cran, clavier fermé.

10:45◍ ▲ ▮
←
Répondre[HFR] Redface 2 — client Android
👁
Message
[quotemsg=…]les bords haut et bas de la zone de saisie restent toujours visibles[/quotemsg]
Exactement ça. C'est le comportement de [b]K-9 Mail[/b], et c'est ce que fait le lot R1.

Le spike device a tranché : [u]BTF2[/u] gère nativement le drag de poignée. :)
9
❝ styx42 — les bords haut et bas de la zone de saisie restent toujours visibles
Exactement ça. C'est le comportement de K-9 Mail, et c'est ce que fait le lot R1.
Le spike device a tranché : BTF2 gère nativement le drag de poignée. 🙂 10
❝ 1
Aa☺🖼 ⋯Envoyer
  • 9Ouvrir l'aperçu ne touche pas au clavier : le source garde ses 160 dp, l'aperçu prend le reste. Tirer le séparateur au-delà du plancher — il résiste — puis relâcher ferme le clavier, une seule fois. La puce « Relâcher pour fermer le clavier » n'apparaît que pendant ce sur-glissement. Position mémorisée en dp, par size class.
  • 10L'aperçu utilise déjà le moteur de rendu des posts ; ce qui manque est la résolution des smileys dans le parser BBCode de l'aperçu. #873
  • 11Le BBCode reste visible en source pendant qu'on lit le rendu — c'est tout l'intérêt, et ce que le toggle actuel permettait déjà.
Refonte Aperçu, paysage et tablette

La largeur devient la ressource à partager ; la hauteur, elle, reste comptée (note 13) : sur un paysage téléphone, l'app bar s'efface. Même partage sur tablette et en écran scindé large, où l'app bar reste.

10:46◍ ▲ ▮
Message
[quotemsg=…]les bords haut et bas de la zone de saisie restent toujours visibles[/quotemsg]
Exactement ça. C'est le comportement de [b]K-9 Mail[/b], et c'est ce que fait le lot R1.
❝ styx42 — les bords haut et bas de la zone de saisie restent toujours visibles
Exactement ça. C'est le comportement de K-9 Mail, et c'est ce que fait le lot R1. 12
Aa☺🖼 ⋯👁Envoyer
  • 12Le point de bascule : windowWidthSizeClass au-delà de Compact, ou hauteur utile sous 400 dp. Une seule mise en page, deux directions de flex. Sans app bar, 👁 passe dans la barre d'action, qui a toute la largeur pour une sixième icône ; le retour passe par le geste système.
  • 13En paysage clavier ouvert il ne reste qu'environ 100 dp de hauteur : le plancher de 160 est hors d'atteinte et ne s'applique pas. Le partage en colonnes évite seulement que l'aperçu prenne sur cette hauteur.
  • 14La barre d'action ne change pas entre écrire et relire : on peut envoyer sans refermer l'aperçu.
Refonte Smileys

Les deux onglets actuels, plus les sections que les testeurs réclament. La décoration de cellule reste un réglage.

10:46◍ ▲ ▮
←
Répondre[HFR] Redface 2 — client Android
👁
Standard
Wiki
Favoris 15
😀
😁
😂
🤣
😅
😉
😊
Récents
🙄
😐
😏
🤔
😱
🥲
😴
Standard — 58 smileys
😃
😇
😎
😡
😭
🤮
👍
👎
🙏
💀
🔥
🍿
🤡
🫠
  • 15Favoris / Récents : hors périmètre de la refonte, la fonction vit dans #1154. Montrée ici pour la cohérence de la feuille, pas livrée avec la phase.
  • 16Appui long = loupe sur la vignette, sans changer la taille des cellules. #1022
Refonte Options du message

Les trois bascules HFR et les 16 tons, à l'identique. Le ton se choisit sans déplier une seconde fois.

10:47◍ ▲ ▮
←
Répondre[HFR] Redface 2 — client Android
👁
Options du message
Activer votre signature
Désactiver les smilies
Activer la notification par email du sujet
Ton du message
Aucun
💬
❓
💡
⚠️
✅
🔧
🎁
📢
🎬
🎵
📷
🖥
🏁
🔒
⭐
Valeurs par défaut lues dans le formulaire HFR. 17
  • 17Inchangé fonctionnellement : mêmes trois champs POST, mêmes 16 msg_icon. Seul le repli par défaut du ton disparaît — la grille tient dans la feuille.
Refonte La bande de contexte, ses trois états

Tout ce qui était un bandeau empilé en tête vit ici : état durable à gauche, événement du moment à droite. Un seul événement à la fois, par priorité erreur → upload. Le brouillon retrouvé est une pastille, pas un événement. Hauteur constante dans tous les cas.

10:48◍ ▲ ▮
←
Répondre[HFR] Redface 2
👁
Message
Voilà les captures du S9.
❝ 3 citations ↺ Brouillon retrouvé 18
Aa☺🖼 ⋯Envoyer

État seul — 32 dp. Les pastilles portent leur libellé complet.

10:49◍ ▲ ▮
←
Répondre[HFR] Redface 2
👁
Message
Voilà les captures du S9 :
[img]…545423[/img]
❝ 3↺ Envoi 2/3… 19
Aa☺🖼 ⋯Envoyer

État + événement — toujours 32 dp. Les pastilles se réduisent à leur compteur nu et restent visibles.

10:50◍ ▲ ▮
←
Répondre[HFR] Redface 2
👁
Message
Voilà les captures du S9 :
[img]…545423[/img]
❝ 3 ⚠ Anti-flood HFR, patientezDétails 20
Aa☺🖼 ⋯Envoyer

Erreur — toujours 32 dp. Un résumé court, le texte entier derrière « Détails ».

  • 18Les pastilles d'état sont des raccourcis : `❝ 3` ouvre le panneau citations, `↺ Brouillon retrouvé` propose Restaurer / Ignorer.
  • 19Un événement ne masque jamais les pastilles, il les compacte : on ne découvre pas après l'envoi qu'on citait trois personnes.
  • 20La bande ne change jamais de hauteur. Passer à deux lignes pendant une erreur laisserait 150 dp au champ, sous le plancher de 160 — et le repli au premier caractère tapé serait un saut sous le doigt. Donc : résumé d'une ligne, texte entier derrière « Détails ». #872 F3/F4
  • 21Un événement ne se vide pas non plus de lui-même : à la fin de l'upload « Envoi 2/3… » devient « 3 images insérées » et attend « Masquer » ou le prochain envoi — jamais une frappe. Sinon la bande se replierait au moment exact où l'utilisateur reprend la main sur le champ.
Refonte Nouveau sujet

Titre et sous-catégorie sont des champs d'en-tête collants : ils restent atteignables sans jamais chasser le corps (critère C7).

10:50◍ ▲ ▮
←
Nouveau sujetHardware & Périphériques
👁
Titre du sujet
[Topic unik] Redface 2
Sous-catégorie
Smartphones et tablettes
▾
Message
Saisissez votre message… 22
Smartphones
Aa☺🖼 ⋯Envoyer
  • 22Quand le clavier s'ouvre sur le corps, les deux champs d'en-tête se replient en une ligne résumée : [Topic unik] Redface 2 · Smartphones ▾. Un tap les redéploie.
  • 23La pastille Smartphones est posée dès l'ouverture, alors même que l'en-tête déployé dit déjà la sous-catégorie. Elle est redondante tant que l'en-tête est visible : c'est le prix de C6, elle ne doit pas surgir à l'ouverture du clavier.
  • 24Le sélecteur disparaît pour les catégories sans sous-catégorie, exactement comme aujourd'hui. #213
Refonte Nouveau message privé

Destinataires en puces plutôt qu'en CSV brut, avec le même contrat : plusieurs pseudos = conversation de groupe.

10:52◍ ▲ ▮
←
Nouveau MP
👁
Destinataires
styx42 ✕thibw ✕ XaTriX ✕+ ajouter
Sujet
Retours bêta 0.60.0 19/80
Message
Saisissez votre message…
3 destinataires
Aa☺🖼 ⋯Envoyer
  • 25Les puces se saisissent au clavier comme la CSV actuelle ; la virgule valide une puce, jamais l'espace — les pseudos HFR en contiennent. Le POST reste identique. #606
  • 26En réponse de conversation, la même ligne devient « Destinataires : 29 · Gérer » pour l'owner du DT. #618
Refonte Réponse rapide

La même barre d'action, la même barre de format : la réponse rapide devient l'éditeur en mode feuille, pas une surface parallèle amputée.

10:54◍ ▲ ▮
styx42 — 20/09/2026 à 09:12
Objectif produit : les bords haut et bas de la zone de saisie restent toujours visibles et le texte défile dans le champ, comme K-9 Mail.
Réponse rapide ⤢ 27
❝ styx42les bords haut et bas de la zone de saisie…
✕
Votre message…
Exactement ça, c'est le lot R1.
❝ 1 Insertion de la citation…
Aa☺🖼 ⋯Envoyer
lotLotlots
a
z
e
r
t
y
u
i
o
p
q
s
d
f
g
h
j
k
l
m
?123
espace
↵
  • 27⤢ escalade en plein écran en conservant le texte et les citations — pas la sélection, l'escalade ne la transmet pas. La feuille sort du statut expérimental ; le préréglage de surface existe déjà et l'éditeur plein écran est le défaut. #951
  • 28La feuille gagne les smileys et le format, qu'elle n'a pas aujourd'hui : une seule implémentation pour les cinq surfaces.
Refonte Menu de sélection

Le geste qui a occupé tout #447. Avec BTF2, le menu contextuel devient un point d'entrée produit.

10:56◍ ▲ ▮
←
Répondre[HFR] Redface 2 — client Android
👁
Message
Le spike device a tranché :
BTF2 gère nativement le drag de poignée
et l'autoscroll, y compris en paysage.
Couper Copier Citer 🌐 ⋮
Aa☺🖼 ⋯Envoyer
paysagepaysagespays
a
z
e
r
t
y
u
i
o
p
?123
espace
↵
  • 29Citer dans le menu de sélection = citer uniquement la portion sélectionnée, depuis la vue Topic. #381
  • 30🌐 Rechercher sur internet : hors périmètre également, #1431.
  • 31Le menu est fourni par BTF2, donc il survit au ContextWrapper qui neutralise le TextClassifier — à vérifier sur device avant de le promettre.
05

Où va chaque fonction

Le contrôle de non-perte : une ligne par fonction existante, sa place dans la refonte, et l'écran qui la montre.

Fonction en 0.60.0Dans la refonteÉcranÉtat
Champ BBCode borné 160 dpChamp élastique, plancher 160 dp conservé1, 2conservé
Label « Contenu BBCode »Label « Message », court à fontScale 1.31corrigé #872
Titre d'écran, 28 dpLigne 1 de l'app bar, + le sujet en ligne 21déplacé
11 chips BBCode (dont Couleur)Tiroir Aa, 10 chips en deux rangées — Image passe dans le menu 🖼3déplacé
Bouton « Uploader » épingléIcône 🖼 permanente de la barre d'action1, 8déplacé
Dialogue « Insérer une image »Second choix du menu 🖼 (upload / URL)—conservé
Compteur « Envoi n/N… »Événement de la bande + fine barre de progression8déplacé
7 erreurs d'upload typéesRésumé d'une ligne + « Détails » ; ne s'efface plus à la frappe8 · § 06reformulé
9 erreurs d'envoi typéesRésumé d'une ligne + « Détails » ; ne s'efface plus à la frappe8 · § 06reformulé
Bandeau brouillon Restaurer/IgnorerPastille de la bande, mêmes deux actions8déplacé
Cartes de citation ↑ ↓ ✕Panneau plein écran + pastille dans la bande1, 4déplacé
« Tout vider » (≥ 2 cartes)Action d'app bar du panneau citations4conservé
Aperçu Afficher / MasquerIcône 👁 d'app bar → partage source / rendu, dessous en portrait, à droite en paysage5, 5benrichi
Feuille Smileys Standard / WikiIdentique (Favoris / Récents : #1154, hors phase)6conservé
Décoration de cellule (#989)Reste un réglage, inchangé6conservé
3 bascules d'options HFRFeuille Options, identique7conservé
Ton du message, 16 icônesGrille dépliée dans la feuille Options7déplié
Envoi armé → « Confirmer »Identique, secondaires masqués1conservé
Titre du sujet + sous-catégorieEn-tête collant, replié en une ligne pendant la frappe9déplacé
Note sondage non éditablePastille durable, mode « Modifier le premier message » seulement—déplacé
Destinataires CSVPuces, même POST10reformulé
Compteur de sujet MPSuffixe du champ Sujet10conservé
« Destinataires : N · Gérer »Identique en réponse de conversation10conservé
Feuille de réponse rapideMême éditeur en mode feuille, + format et smileys11unifié #951
Bouton plein écran de la feuille⤢, conserve le texte et les citations (pas la sélection)11conservé
« Insertion de la citation… »Bande de contexte de la feuille11déplacé
Confirmation « Publier la réponse ? »Envoi armé, comme les autres surfaces11unifié
Poignées de sélection + autoscrollBTF2, inchangé3, 12conservé
Autofocus, capitalisation phraseInchangétoutesconservé
Autosave et purge des brouillonsInchangé et silencieux : aucune pastille—conservé
conservé tel quel même fonction, autre endroit corrige une issue ouverte
06

Les messages d'erreur

Une bande d'une seule ligne laisse environ 204 dp au message, soit ≈ 34 caractères à fontScale 1 et ≈ 22 au pire cas (1,3 système × 1,15 du préréglage de lecture L de l'app, qui se multiplient). Cible : 30 caractères, une ligne, ellipse. Les textes actuels doivent donc être réécrits en résumés, avec le texte intégral derrière « Détails ». Une troncature automatique couperait le remède.

CauseRésumé dans la bandeDétail
Message videMessage vide—
Hash invalideFormulaire rechargé, réessayezoui
Anti-floodAnti-flood HFR, patientezoui — la règle des 3 par 10 min
Sujet ferméSujet fermé, envoi impossible—
Connexion requiseConnexion requiseoui — l'onglet Messages
Réponse inattendueRéponse inattendue, réessayezoui
RéseauErreur réseau, réessayez—
Session expiréeSession expirée, reconnectez-vous—
Sous-catégorie absenteSujet à actualiser avant envoioui
Aucune image reçueAucune image reçueoui — explorateur, redémarrage
Image trop lourdeImage trop volumineuseoui
Type refuséFormat d'image refuséoui
Refus serveurRefus de %1$s (HTTP %2$d)oui
Réponse illisibleRéponse illisible de %1$soui
Hébergeur non configuréHébergeur non configuréoui — Client-ID, Réglages
Upload interrompuUpload interrompu, réessayezoui
Citation non récupéréeCitation non récupéréeoui — le bouton Citer
Un seul emplacement d'action

« Détails », ou « Masquer » quand il n'y a rien à détailler

Deux boutons ne tiennent pas dans les 204 dp. La surface de détail porte elle-même le « Masquer ». Évolution naturelle : quand le remède est une navigation — Se connecter, Réglages, Actualiser — l'emplacement porte le remède au lieu de « Détails ».

Ce que le relevé a corrigé

Ce ne sont pas 16 messages, mais 33 chaînes en quatre jeux

:core:ui porte les 7 d'upload, :feature:editor 9 d'envoi, :feature:topic 8 copies mot pour mot plus une qui lui est propre, et :feature:messages 8 avec une rédaction différente pour la même cause — plus un état que les autres n'ont pas, l'avertissement « votre message a peut-être été envoyé ».

Une bande partagée a besoin d'une seule paire (résumé, détail) par cause. R1a pose le type dans :core:ui et y migre le jeu de l'éditeur ; MP suit en R1b, la feuille en R4.

07

Le plan

Ce qui est décidé, dans quel ordre on le livre, et ce qui reste ouvert. Trois avis se sont croisés sur ce cadrage ; les désaccords sont notés là où ils portent.

Tranché Icônes dans la barre d'action

Cinq icônes, pour rendre la largeur à « Envoyer ». Le nom accessible TalkBack reprend les libellés, et un appui long les affiche en info-bulle, dès R1a.

Tranché Une seule bande, hauteur constante

32 dp, jamais plus, absente quand elle n'a rien à dire. L'autosave reste silencieuse pour qu'elle n'apparaisse jamais en pleine frappe, et elle ne disparaît pas davantage sur une frappe : une erreur attend un geste. Les erreurs passent par un résumé.

Tranché Aperçu en partage, cran physique

Pas de réglage. Ouvrir l'aperçu ne touche pas au clavier ; le séparateur s'arrête quand le champ atteint 160 dp, au-delà le glissement devient élastique et une puce « Relâcher pour fermer le clavier » apparaît sur l'aperçu. La résistance est l'affordance — un libellé permanent ne tient physiquement pas dans 18 dp à fontScale 1,3.

Tranché Portrait Compact d'abord

Sous 400 dp de hauteur, l'app bar s'efface avec son titre ; 👁 rejoint la barre d'action, le retour passe par le geste système. Sinon le chrome fixe vaudrait 136 dp sur les ~150 d'un paysage téléphone.

Les lots

Un lot = une PR = une build dev = un retour des testeurs avant le suivant. Promotion en bêta seulement à la fin de la phase, pas lot par lot : entre deux lots, le critère C9 est explicitement dérogé et annoncé, pas prétendu tenu.

LotContenuÉcransPrécondition
R1aComposants partagés dans :core:ui — app bar, bande, barre d'action en icônes, tiroir superposé — appliqués à l'éditeur de post seul. Type (résumé, détail) posé et jeu de l'éditeur migré.1-3, 8—
R1bNouveau sujet, nouveau MP, réponse MP. Migration des jeux de messages restants. Clôture de C9.9, 10géométrie R1a validée sur device
R2Panneau citations (réordonner, interleaving) et partage de l'aperçu avec son cran.4, 5, 5bparse d'aperçu hors main thread ; mécanisme d'insertion au curseur défini
R3Menu de sélection : citer la portion sélectionnée.12—
R4Unification de la réponse rapide : même éditeur en mode feuille, même confirmation, format et smileys.11géométrie du tiroir en fenêtre Dialog tranchée
Pourquoi la feuille n'est pas dans R1a

Ce n'est pas le même éditeur dans une autre géométrie

La réponse rapide est une autre implémentation : champ BTF1 et non BbcodeTextField, ViewModel distinct, brouillon appliqué d'office au lieu de la bannière, confirmation par dialogue au lieu du bouton armé, et surtout une fenêtre Dialog avec ses propres insets empilés. L'inclure dans R1, c'est faire R4 dans le premier lot.

Le contre-argument — deux façons de répondre incohérentes dans la vue Topic — ne tient pas : la feuille est opt-in depuis #951, l'éditeur plein écran est le défaut, et elle est déjà visuellement étrangère faute de barre de format et de smileys.

Préconditions techniques relevées

Deux choses à régler avant de dessiner plus loin

R2 est bloqué par une régression latente : l'aperçu re-parse tout le BBCode à chaque caractère, sur le thread principal. Tolérable pour un aperçu qu'on ouvre rarement, intenable en partage permanent. Debounce et parse hors main d'abord.

R4 a deux problèmes non résolus : dans la feuille, titre, cartes, champ, bande, barre et tiroir demandent ~420 dp sur les 330 disponibles — soit le tiroir y est superposé, soit la feuille devient plein écran, c'est-à-dire l'éditeur. Et « Insertion de la citation… » s'y termine de façon asynchrone pendant que la frappe est autorisée : la bande s'y viderait en pleine saisie, ce que la règle 3 interdit ailleurs.

Encore ouvert

Un validateur d'équilibre de balises BBCode : la V3 en montrait un dans la bande, il n'existe pas. Retiré des maquettes, fiché à part hors de cette phase. #1444