PD-174 — Plan d'implémentation¶
📚 Navigation User Story
| Document | | | ---------- | -- | | 📋 [Spécification](PD-174-specification.md) | | | 🛠️ **Plan d'implémentation** | *(ce document)* | | ✅ [Critères d'acceptation](PD-174-acceptability.md) | | | 📝 [Retour d'expérience](PD-174-rex.md) | | [← Retour à mobile-ios](../PD-195-epic.md) · [↑ Index User Story](index.md)Objectif¶
Implémenter le verrouillage automatique de l'application après une période d'inactivité configurable.
Choix techniques retenus¶
- State management : Zustand (useSecurityStore)
- Détection activité : PanResponder + AppState
- Délais : 1min, 5min, 15min, 30min, jamais
- Stockage préférence : AsyncStorage
Architecture ciblée¶
src/hooks/
├── useAutoLock.ts # Logique verrouillage auto
└── useUserActivity.ts # Détection activité utilisateur
src/store/
└── useSecurityStore.ts # État sécurité (locked, timeout)
src/screens/security/
└── LockScreen.tsx # Écran de verrouillage
src/components/security/
└── AutoLockPicker.tsx # Sélecteur délai
Découpage technique¶
Phase 1 : Store sécurité¶
- Créer
useSecurityStoreavec Zustand : isLocked: booleanautoLockTimeout: number(ms)lastActivityAt: number(timestamp)-
Actions :
lock(),unlock(),setAutoLockTimeout() -
Persister
autoLockTimeoutdans AsyncStorage
Phase 2 : Détection activité¶
- Implémenter
useUserActivity(): - Créer PanResponder global
- Écouter touches, scrolls, etc.
-
Mettre à jour
lastActivityAt -
Wrapper l'app avec le PanResponder
Phase 3 : Logique verrouillage¶
- Implémenter
useAutoLock(): - Timer vérifiant inactivité toutes les 10s
- Comparer
now - lastActivityAt > timeout -
Appeler
lock()si dépassé -
Gérer AppState :
background: Démarrer countdownactive: Reset si dans délai, sinon lock
Phase 4 : Écran de verrouillage¶
- Créer
LockScreen: - Input PIN ou biométrie
- Validation contre hash stocké
-
Appeler
unlock()si valide -
Intégrer dans navigation :
- Modal overlay si
isLocked - Bloquer navigation sous-jacente
Phase 5 : Configuration¶
- Créer
AutoLockPicker: - Options : 1min, 5min, 15min, 30min, jamais
-
Sauvegarder choix via store
-
Intégrer dans
SecuritySettingsScreen
Phase 6 : Tests¶
- Tests store (transitions état)
- Tests détection activité
- Tests timer verrouillage
- Tests AppState transitions
Points de vigilance¶
- Effacement K_master : Appeler
deleteMasterKey()au lock ? → Décision : NON, garder en Keychain, juste bloquer UI - Background : iOS limite les timers en background
- Biométrie : Optionnelle pour déverrouillage rapide
- Race conditions : Éviter lock pendant opération crypto
Hors périmètre¶
- Configuration PIN (→ autre US)
- Biométrie Face ID/Touch ID (→ future US)
- Wipe après X tentatives (→ future US)