Implement Android TOTP list and large-code detail presentation #107

Open
opened 2026-08-17 19:15:15 +00:00 by hugo · 0 comments
Owner

Goal

Provide complete pass-otp viewing and copy behavior in the TOTP destination and normal entry viewer.

Scope

  • List storage-identified TOTP entries from the discovery catalog and open a native detail screen with issuer/account, large grouped code, countdown/progress, copy action, lock/error state, and refresh.
  • Request decryption only when a code/detail is opened and calculate every TOTP/HOTP value and validity window in crates/storage.
  • Update visible countdown/code from storage-owned results using a lifecycle-scoped coroutine; ticks, recomposition, and animations must not extend the authentication lease.
  • Show the same TOTP component at the top of an OTP-bearing normal entry and let storage update the catalog after an entry is decrypted/created/edited.
  • Support TOTP algorithms/digits/periods and HOTP behavior exactly as the shared core allows; counter-changing HOTP operations must use storage-owned atomic semantics and explicit confirmation.
  • Copy only the current storage-returned code through the secure clipboard adapter and clear it according to storage timeout/race rules.
  • Immediately remove codes on background, expiry, manual lock, entry change, or stale revision.
  • Do not implement Apple Watch sharing, snapshot, selection, or synchronization.

Acceptance criteria

  • RFC/upstream pass-otp fixtures display the exact code and transition at boundary times using fake clocks.
  • Code/countdown updates do not renew the lease and stop when not visible.
  • TOTP-bearing entry views and the TOTP destination agree and keep the cache current.
  • Copy is explicit, sensitive-marked, timed, and race-safe.
  • Kotlin never parses otpauth://, calculates OTP, mutates HOTP counters, or persists secret parameters.

Depends on TOTP discovery, the structured viewer, biometric authentication, and lifecycle security. Part of #87.

## Goal Provide complete pass-otp viewing and copy behavior in the TOTP destination and normal entry viewer. ## Scope - List storage-identified TOTP entries from the discovery catalog and open a native detail screen with issuer/account, large grouped code, countdown/progress, copy action, lock/error state, and refresh. - Request decryption only when a code/detail is opened and calculate every TOTP/HOTP value and validity window in `crates/storage`. - Update visible countdown/code from storage-owned results using a lifecycle-scoped coroutine; ticks, recomposition, and animations must not extend the authentication lease. - Show the same TOTP component at the top of an OTP-bearing normal entry and let storage update the catalog after an entry is decrypted/created/edited. - Support TOTP algorithms/digits/periods and HOTP behavior exactly as the shared core allows; counter-changing HOTP operations must use storage-owned atomic semantics and explicit confirmation. - Copy only the current storage-returned code through the secure clipboard adapter and clear it according to storage timeout/race rules. - Immediately remove codes on background, expiry, manual lock, entry change, or stale revision. - Do not implement Apple Watch sharing, snapshot, selection, or synchronization. ## Acceptance criteria - RFC/upstream pass-otp fixtures display the exact code and transition at boundary times using fake clocks. - Code/countdown updates do not renew the lease and stop when not visible. - TOTP-bearing entry views and the TOTP destination agree and keep the cache current. - Copy is explicit, sensitive-marked, timed, and race-safe. - Kotlin never parses `otpauth://`, calculates OTP, mutates HOTP counters, or persists secret parameters. Depends on TOTP discovery, the structured viewer, biometric authentication, and lifecycle security. Part of #87.
hugo added this to the 06 - Implement an Android version of the software milestone 2026-08-17 19:15:15 +00:00
hugo added the enhancement label 2026-08-17 19:15:15 +00:00
Sign in to join this conversation.