merge the recovery-words display and confirmation into a single screen (June's call): the 12 words, copy/save actions, and the three position inputs now sit together, so the words can be read straight off the list while typing instead of being hidden behind a second step. Drops the Phase enum, the 5-second countdown, and the separate 'I've saved my recovery words' step. Also hardened the check itself: correct() compared the typed value against words.getOrElse(...) { \"\" }, so whenever the word list was empty every blank input compared equal to \"\" and the entire confirmation passed with nothing typed. Now both sides must be non-blank and the list must actually hold the positions being asked for. And made the words reactive: they were derived once when the ViewModel was constructed, so if that landed a beat before the vault finished unlocking they stayed empty for the life of the screen with nothing to trigger a recomposition. Now a StateFlow fed by vault.isUnlocked, plus a refresh() on composition for the mirror case. NOT FIXED: the word list still renders empty on a freshly created vault. Confirmed the vault layer is fine (a host-JVM test creates a vault and gets 12 words), lock() is never called, and _isUnlocked is only ever set false inside lock() โ yet the screen observes the vault locked with a null root key throughout. Left open rather than claimed.
$ koh steal kepr.uk/peach-android@896672fa08f1
·
parent: c7836f5947ee
discussion
log in to leave a comment.