# 4.2 — Navigation verrouillée ## Objectif Faire en sorte que l'espace enfant s'épingle automatiquement et qu'aucune action de l'interface ne permette de sortir de l'app ou d'atteindre le système. ## Périmètre & hors-périmètre - Inclus : déclenchement auto de l'épinglage à l'entrée de l'espace enfant, audit des sorties UI possibles, gestion du bouton retour. - Exclus : la porte parentale (J5) ; les limites (J6). ## Dépendances 1.2 (use cases de verrouillage), 4.1 (espace enfant existant). ## Conception - À l'entrée de l'espace enfant : `StartLockUseCase` appelé (via le contrôleur ou un observateur de cycle de vie). Gérer `LockUnsupportedFailure` → message parent au moment de la config, pas de crash. - **Audit des échappatoires UI** : - Pas de lien hypertexte ouvrant un navigateur, pas d'`intent` externe, pas de partage. - Bouton retour Android : intercepté (`PopScope`/`WillPopScope`) pour ne pas quitter l'app. - L'icône ⚙️ d'accès parent (posée ici) mène à la **porte parentale** (J5) ; sans le code, on ne sort pas de l'app. - Réafficher/relancer l'épinglage si l'app revient au premier plan (cycle de vie `resumed`). - **Honnêteté UI** : ne pas afficher de message laissant croire à un verrouillage inviolable. ## Plan TDD 1. **Red** : `child_shell_locking_test.dart` (widget/contrôleur) — à l'affichage de l'espace enfant, `StartLockUseCase` est appelé (provider mocké). En `unsupported`, pas de crash et état dégradé documenté. 2. **Green** : brancher l'appel d'épinglage au cycle de vie de l'écran. 3. **Red** : `child_shell_back_button_test.dart` — le `PopScope` empêche la fermeture (callback de pop non déclenché / app non quittée). 4. **Green** : implémenter l'interception. 5. **Validation manuelle** : sur appareil, parcourir l'écran enfant et tenter toutes les sorties (retour, accueil, multitâche) → bloquées ; consigner. 6. **Refactor**. ## Definition of Done - Tests d'épinglage auto + interception retour verts. - Audit manuel des sorties UI réalisé sur appareil, résultats consignés. - `tool/check.sh` passe ; étape 4.2 cochée dans `ROADMAP.md`. ## Risques / notes - Le re-épinglage au `resumed` doit éviter les boucles/flickers : tester le comportement de reprise.