16fd4c8c36
Lecteur d'histoires cadenassé pour le coucher (Android/Flutter). - CLAUDE.md : principes craftsmanship/TDD/clean code/clean archi + decisions techniques - ROADMAP.md : suivi haut niveau des 7 jalons, a tenir a jour par etape - docs/specs/ : specs completes decoupees par jalon, etapes en sous-fichiers - .gitignore Flutter (pubspec.lock versionne, projet applicatif) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.5 KiB
2.5 KiB
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 :
MethodChannelDart↔Kotlin, code Kotlin appelantActivity.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éthodesstartLock,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 versResult/LockingFailure.- Brancher
lockingRepositoryProvidersur cette impl. à la place de la version plugin.
Plan TDD
- Red :
native_channel_locking_repository_test.dart— en mockantMethodChannel(viaTestDefaultBinaryMessengerBinding),startLockqui répond OK →Ok; qui lèvePlatformException→LockingFailure. - Green : implémenter le repository Dart + mapping.
- Validation manuelle : reprendre le protocole de 1.1 avec l'impl. native (épingler/sortir/désépingler/PIN).
- 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.
lockingRepositoryProviderpointe sur l'impl. retenue.tool/check.shpasse.- É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.