# 1.3 — Fallback natif Kotlin (platform channel) ## Objectif Si le plugin `kiosk_mode` s'est révélé insuffisant en 1.1, fournir une implémentation native Kotlin du verrouillage via un platform channel, derrière la même interface `LockingRepository`. ## Condition d'exécution **Étape conditionnelle.** À réaliser uniquement si 1.1 a conclu que le plugin ne tient pas. Sinon : marquer « N/A » dans la roadmap et passer au jalon 2. ## Périmètre & hors-périmètre - Inclus : `MethodChannel` Dart↔Kotlin, code Kotlin appelant `Activity.startLockTask()`/`stopLockTask()`, impl. `NativeChannelLockingRepository`. - Exclus : Device Owner / mode kiosque complet (relève d'un changement de stratégie matérielle, pas de cette étape). ## Dépendances 1.1 (échec plugin), 1.2 (interface existante). ## Conception - **Côté Android** (`android/app/src/main/kotlin/...`) : - `MethodChannel("storytime/locking")` avec méthodes `startLock`, `stopLock`, `currentState`. - Appeler `startLockTask()` / `stopLockTask()` sur l'`Activity`. Sans Device Owner, cela déclenche le **Screen Pinning** standard (confirmation système). - Gérer les exceptions et renvoyer un code d'erreur exploitable côté Dart. - **Côté Dart** (`features/locking/data/`) : - `NativeChannelLockingRepository implements LockingRepository`, mappant les réponses du channel vers `Result`/`LockingFailure`. - Brancher `lockingRepositoryProvider` sur cette impl. à la place de la version plugin. ## Plan TDD 1. **Red** : `native_channel_locking_repository_test.dart` — en mockant `MethodChannel` (via `TestDefaultBinaryMessengerBinding`), `startLock` qui répond OK → `Ok` ; qui lève `PlatformException` → `LockingFailure`. 2. **Green** : implémenter le repository Dart + mapping. 3. **Validation manuelle** : reprendre le protocole de 1.1 avec l'impl. native (épingler/sortir/désépingler/PIN). 4. **Refactor**. > Le code Kotlin lui-même est validé par le test d'intégration manuel (protocole 1.1) ; le test unitaire Dart couvre le mapping et la frontière du channel. ## Definition of Done - Test du repository natif vert ; protocole de 1.1 repassé avec succès sur la tablette. - `lockingRepositoryProvider` pointe sur l'impl. retenue. - `tool/check.sh` passe. - Étape 1.3 cochée dans `ROADMAP.md` (ou « N/A » si non nécessaire) + décision au journal. ## Risques / notes - Si même `startLockTask()` natif ne satisfait pas le besoin sans Device Owner → **escalade** : revenir à l'utilisateur sur le choix « tablette dédiée / mode kiosque », comme acté au cadrage.