review(ui): below-cut nits #308

Closed
opened 2026-07-04 06:50:32 +00:00 by JMR-dev · 0 comments
JMR-dev commented 2026-07-04 06:50:32 +00:00 (Migrated from github.com)

Phase-3 review — below-the-cut LOW findings (Backlog):

  • SettingsViewModel.kt:102: app-lock disable runs Keystore deleteKey()+session.lock() on Main dispatcher (AppLockViewModel wraps the same in withContext(default)) — inconsistent threading.
  • AppLockGateHost.kt:72: app content stays in the semantics tree behind the lock cover — an accessibility service (TalkBack) may traverse occluded mailbox/compose nodes while locked; add a semantics gate on the covered subtree.
  • ReaderViewModel.kt:116: toggleStar optimistic update never reconciled on failure (star stays toggled, no rollback/error).
  • OnboardingViewModel.kt:34: firstAddedAccountId not in SavedStateHandle → process-kill mid-onboarding (battery-settings excursion) lands on unfiltered mailbox (defeats #30).
  • RichTextEditor.kt:265: toolbar re-parses whole body + ~10 scans per keystroke (hot path); wrap in remember(value)/derivedStateOf.
  • AccountSetupViewModel.kt:58: a normal OAuth cancel is surfaced as an error snackbar — should be a no-op.
  • MailboxViewModel.kt:131: search re-pages the local list per keystroke (documented intentional); could debounce the pager query.
Phase-3 review — below-the-cut LOW findings (Backlog): - `SettingsViewModel.kt:102`: app-lock disable runs Keystore `deleteKey()`+`session.lock()` on Main dispatcher (AppLockViewModel wraps the same in withContext(default)) — inconsistent threading. - `AppLockGateHost.kt:72`: app content stays in the semantics tree behind the lock cover — an accessibility service (TalkBack) may traverse occluded mailbox/compose nodes while locked; add a semantics gate on the covered subtree. - `ReaderViewModel.kt:116`: `toggleStar` optimistic update never reconciled on failure (star stays toggled, no rollback/error). - `OnboardingViewModel.kt:34`: `firstAddedAccountId` not in SavedStateHandle → process-kill mid-onboarding (battery-settings excursion) lands on unfiltered mailbox (defeats #30). - `RichTextEditor.kt:265`: toolbar re-parses whole body + ~10 scans per keystroke (hot path); wrap in remember(value)/derivedStateOf. - `AccountSetupViewModel.kt:58`: a normal OAuth cancel is surfaced as an error snackbar — should be a no-op. - `MailboxViewModel.kt:131`: search re-pages the local list per keystroke (documented intentional); could debounce the pager query.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: JMR-dev/LibreMail#308