chore(wip): consolidation intermédiaire multi-tickets (sprints Statistiques, UI, Bug resolution, Serveur-client)
Regroupe l'état de travail en cours réalisé dans un même worktree sur plusieurs tickets/sprints (#85, #136, #145, #155-160, #162-164), mélangeant des tickets QA et inProgress. Ne constitue pas une feature terminée : commit de sauvegarde avant triage/split par ticket en branches feature/* dédiées. Exclut les dossiers d'environnement de build locaux et le heap dump parasite (.gitignore mis à jour). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
49
.ideai/tickets/108/carnet.md
Normal file
49
.ideai/tickets/108/carnet.md
Normal file
@ -0,0 +1,49 @@
|
||||
---
|
||||
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 : <exercice> » 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 | `<Exercice>` | `02:14` |
|
||||
| Série active, reps/score, sans chrono | `<Exercice>` | `Série 2/4 · 8 reps` |
|
||||
| Repos | `Repos` | `01:30 restant · Ensuite : <Exercice>` |
|
||||
| Pause séance | `<Exercice>` | `En pause · <dernière valeur gelée>` |
|
||||
| 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).
|
||||
26
.ideai/tickets/108/issue.md
Normal file
26
.ideai/tickets/108/issue.md
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
id: "2382d9da-b640-48a1-9acf-8828bc73fd61"
|
||||
number: 108
|
||||
title: "#102-A [UX] Conception du bandeau notification téléphone pendant une séance"
|
||||
status: "closed"
|
||||
priority: "medium"
|
||||
sprint: null
|
||||
links: [{"target":"#102","kind":"relatesTo"}]
|
||||
agentRefs: [{"agentId":"f3408f5d-469c-4f64-9485-d8b218f3ff26","role":"assigned"}]
|
||||
createdBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
|
||||
updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
|
||||
createdAt: 1785093288487
|
||||
updatedAt: 1785134675226
|
||||
version: 3
|
||||
---
|
||||
Partie du ticket #102.
|
||||
|
||||
Définir la surface notification Android pendant une séance active :
|
||||
- contenu minimal visible en compact et étendu ;
|
||||
- hiérarchie des informations : séance, exercice, chrono pertinent, état pause/repos si utile ;
|
||||
- libellés des actions éventuelles ;
|
||||
- règles de rafraîchissement visuel sans surcharge.
|
||||
|
||||
Contrainte : s'inspirer de Heavy sur l'accès rapide, sans dupliquer l'écran complet de séance dans la notification.
|
||||
|
||||
Définition de done : cadrage UX autonome consigné dans le carnet avec états nominaux et dégradés.
|
||||
Reference in New Issue
Block a user