50 lines
3.1 KiB
Markdown
50 lines
3.1 KiB
Markdown
# Android structured entry viewer (#99)
|
|
|
|
The viewer renders Rust-provided sections and fields without parsing or serializing
|
|
entries in Compose. Passwords, PINs, OTP URIs and other sensitive fields start masked.
|
|
Reveal, copy and edit use the field ID together with the exact document revision.
|
|
An external replacement rejects the old field IDs and locks the authentication
|
|
lease. Editing saves through Rust's recoverable encryption and automatic Git commit
|
|
workflow, then refreshes the checked navigation and document revisions.
|
|
|
|
Rust supplies TOTP codes, account labels and remaining seconds. The presentation
|
|
refresh does not renew the lease. Expiry, backgrounding and manual lock remove
|
|
sections, codes, editor inputs and mutation dialogs. Decrypted values never enter
|
|
saved state; secret-bearing facade objects redact their string representation.
|
|
|
|
The Material top bar offers an editable-field picker and Move, Copy and Delete
|
|
plans. Rust supplies destinations, overwrite requirements and checked mutation
|
|
revisions. Confirmation is explicit. Compact and adaptive list/detail panes share
|
|
the same viewer; wrapped values, multiline notes and repeated fields remain intact.
|
|
Headings, labelled actions and keyboard submission expose the same typed operations.
|
|
|
|
Only fields marked selectable by Rust permit text selection. Selection-copy and
|
|
explicit Copy both request the complete stored field from Rust, preserving its
|
|
clipboard timeout. The editor explains that copying uses the saved value; saving
|
|
first makes edits available to copy. Android marks clips sensitive, and Rust clears
|
|
its own clip on timeout or lock without restoring previous clipboard contents or
|
|
erasing a newer clip. Screen capture is blocked for the activity and dialogs.
|
|
|
|
## Validation
|
|
|
|
Rust regressions cover revision-bound field actions, external edits, lease expiry,
|
|
TOTP countdown boundaries and clearing clipboard behavior. Existing document
|
|
fixtures cover dynamic, repeated, multiline, Unicode, malformed and OTP-only
|
|
entries without replacing their original format. Native Android instrumentation
|
|
creates an isolated GPG-encrypted store through Rust and exercises reveal, hide,
|
|
copy, save, copy/delete mutations, stale revisions and expiry during TOTP refresh.
|
|
Compose checks cover masking, field actions, diagnostics, dialog revocation,
|
|
mutation confirmation, clipboard sensitivity and screen-capture protection.
|
|
All four required Rust workspace gates and the complete Android build, lint,
|
|
dependency/license, module-boundary and native-package gates passed. Full app,
|
|
core and bridge instrumentation plus five cold starts passed on ARM64 API 26/4 KB,
|
|
API 37/4 KB and API 37/strict 16 KB. Both ARM64 and ARMv7 release artifacts were
|
|
built and audited.
|
|
|
|
Computer use in Android Studio's embedded emulator checked the disposable viewer,
|
|
masked PIN editor, repeated fields, Unicode and contextual selection at 200% font
|
|
size. Native contextual Copy was observed dispatching the Username's field ID.
|
|
Manual TalkBack speech was not checked; labelled accessibility actions are covered
|
|
by instrumentation. ARMv7 is built and packaged but has no available emulator
|
|
image. Physical-device testing is outside this milestone's scope.
|