Implement the structured Android entry viewer #99

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

Goal

Display an authenticated password entry losslessly with native Android controls and strict secret masking.

Scope

  • Render storage-provided sections for password, named fields, notes, OTP information, unknown/repeated fields, and diagnostics.
  • Keep passwords, PIN fields, OTP URIs, and other storage-marked sensitive fields hidden by default; provide explicit reveal/hide, edit, and storage-directed copy actions.
  • Authenticate only when decrypted content is requested, respect the shared lease, and immediately clear values on expiry/background/manual lock.
  • Show the current TOTP code/countdown when storage identifies an OTP-bearing entry, without Kotlin parsing the URI or calculating codes.
  • Support long/multiline/Unicode values, safe text selection where allowed, large fonts, TalkBack labels, keyboard actions, compact and list-detail layouts.
  • Offer Edit and applicable mutation actions through Material top-app-bar/overflow controls.
  • Retain no decrypted document in SavedStateHandle, Bundle, DataStore, logs, clipboard history, previews, or accessibility announcements beyond the explicit presentation.

Acceptance criteria

  • Ordinary, dynamic, repeated, multiline, PIN, OTP-bearing, and partially malformed fixtures display losslessly.
  • Sensitive values are absent before authentication and immediately unavailable after relock/background policy.
  • Reveal/copy operate only on stable field IDs and values returned by storage.
  • TOTP display ticks do not renew authentication.
  • Compose contains no entry parser, serializer, sensitivity heuristic, OTP parser, or crypto logic.

Depends on biometric authentication, lifecycle security, hierarchical navigation, and the shared mobile contract. Part of #87.

## Goal Display an authenticated password entry losslessly with native Android controls and strict secret masking. ## Scope - Render storage-provided sections for password, named fields, notes, OTP information, unknown/repeated fields, and diagnostics. - Keep passwords, PIN fields, OTP URIs, and other storage-marked sensitive fields hidden by default; provide explicit reveal/hide, edit, and storage-directed copy actions. - Authenticate only when decrypted content is requested, respect the shared lease, and immediately clear values on expiry/background/manual lock. - Show the current TOTP code/countdown when storage identifies an OTP-bearing entry, without Kotlin parsing the URI or calculating codes. - Support long/multiline/Unicode values, safe text selection where allowed, large fonts, TalkBack labels, keyboard actions, compact and list-detail layouts. - Offer Edit and applicable mutation actions through Material top-app-bar/overflow controls. - Retain no decrypted document in SavedStateHandle, Bundle, DataStore, logs, clipboard history, previews, or accessibility announcements beyond the explicit presentation. ## Acceptance criteria - Ordinary, dynamic, repeated, multiline, PIN, OTP-bearing, and partially malformed fixtures display losslessly. - Sensitive values are absent before authentication and immediately unavailable after relock/background policy. - Reveal/copy operate only on stable field IDs and values returned by storage. - TOTP display ticks do not renew authentication. - Compose contains no entry parser, serializer, sensitivity heuristic, OTP parser, or crypto logic. Depends on biometric authentication, lifecycle security, hierarchical navigation, and the shared mobile contract. Part of #87.
hugo added this to the 06 - Implement an Android version of the software milestone 2026-08-17 19:12:20 +00:00
hugo added the enhancement label 2026-08-17 19:12:20 +00:00
Sign in to join this conversation.