--- issueRef: "#108" version: 3 updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} updatedAt: 1785134675226 --- ## #108 — Bandeau notification téléphone pendant une séance (UX, 2026-07-26) Statut : **cadrage UX exploitable, prêt pour Architect/DevFrontend**, pas de blocage. ### Principe La notification est un **résumé d'accès rapide**, jamais une copie de l'écran de séance. Elle répond à une seule question en un regard : « où j'en suis, et ce que fait le chrono ». Référence Heavy : titre = contexte, corps = donnée vivante, pas d'action complexe. ### Contenu compact (état replié, vue par défaut) - **Titre** : nom de l'exercice en cours (ex. « Squats bulgares »). - **Texte** : une seule ligne combinant série et mesure pertinente, priorité dans cet ordre si plusieurs mesures actives : 1. Chrono actif → `mm:ss` en cours (temps écoulé de l'étape/série, ou chrono score s'il est démarré — cf. [[gametime-ux-score-chrono]]). 2. Sinon Répétitions/Score → `Série 2/4 · 8 reps`. 3. Sinon (étape sans mesure, ex. consigne) → nom court de l'étape. - **Icône** : icône app (monochrome, cf. exigence notification Android — silhouette du logo "GT" sur fond transparent). - **État repos** : titre devient « Repos », texte = décompte `mm:ss` restant + « Ensuite : » tronqué si besoin. - **État pause de séance** : titre inchangé, texte préfixé par « En pause · » avant l'info gelée (le chrono affiché est figé, pas de tick visuel — cohérent avec la règle « jamais actif pendant une pause » de [[gametime-ux-score-chrono]]). ### Contenu étendu (notification développée / longue) Deuxième ligne ajoutée sous la ligne compacte : - Fil de contexte discret : `Programme 1/2 · Exercice 3/8` (même format que le header d'exécution, cf. [[gametime-ux-series-counter]]) — pas de répétition du nom d'exercice déjà en titre. - Pas de 3e ligne, pas de liste d'étapes à venir : la notification reste un résumé, l'utilisateur rouvre l'app pour le détail. ### Actions MVP : **aucune action bouton dans la notification** (pas de Pause/Suivant intégrés). Justification : réduit le risque d'appui accidentel hors app, évite de dupliquer des commandes qui existent déjà dans l'app et sur la montre (#105/#118), et simplifie l'implémentation (pas de PendingIntent supplémentaire à maintenir en cohérence avec le moteur d'exécution). Le tap sur la notification entière ramène à l'écran d'exécution en cours. À réévaluer seulement si retour utilisateur explicite après usage réel — ne pas anticiper. ### Règles de rafraîchissement - Notification **persistante** (non "swipeable") tant qu'une séance est active — cohérent avec le statut foreground service déjà en place pour la montre ([[gametime-watch-companion-implementation]], #91-D). - Mise à jour du texte à chaque tick de seconde **uniquement si un chrono est affiché** (chrono score, repos) ; sinon mise à jour uniquement sur changement d'état (série suivante, pause, reprise) — pas de rafraîchissement inutile qui viderait la batterie ou ferait clignoter la notification. - Notification retirée immédiatement à la fin de séance (Terminer/Abandonner), jamais laissée en état "orpheline". ### États à couvrir (design implémentable) | État | Titre | Texte | |---|---|---| | Série active, chrono | `` | `02:14` | | Série active, reps/score, sans chrono | `` | `Série 2/4 · 8 reps` | | Repos | `Repos` | `01:30 restant · Ensuite : ` | | Pause séance | `` | `En pause · ` | | Séance terminée / abandonnée | — | notification retirée | ### Hors périmètre MVP - Actions rapides (pause/suivant) dans la notification. - Notification enrichie avec image/illustration d'exercice (pas de média viewer en notification, cf. [[gametime-ux-exercise-media-viewer]] réservé à l'app).