Browse nested password-store folders without decrypting entries, using native adaptive list/detail navigation.
Scope
Render storage-provided folder and entry rows with stable IDs, semantic icons, disclosure behavior, loading/empty/error states, and current-path context.
Use compact push navigation and Material 3 Adaptive list-detail panes on expanded windows while preserving coherent selection through resize/fold changes.
Selecting a folder requests the next typed directory page; selecting an entry opens the structured viewer.
Support explicit refresh, deep hierarchies, long/Unicode names, empty folders, disappearing rows, and repository changes without reading the app filesystem in Kotlin.
Preserve only non-secret path/selection identifiers across configuration changes; verify their revision before reuse after process death.
Provide long-press/overflow and accessibility action entry points that later mutation issues can attach without coupling navigation to mutation rules.
Acceptance criteria
Folder traversal never prompts for GPG authentication and never decrypts entries.
Compact/expanded transitions preserve a valid path and selection or safely return to the nearest existing ancestor.
Stable row identities prevent stale taps/actions targeting a replacement row.
TalkBack, large fonts, keyboard/D-pad, touch, and list-detail navigation are usable.
Kotlin does not inspect .gpg, .gpg-id, directory entries, or display strings to determine type.
Depends on onboarding, the Compose shell, and the shared mobile contract. Part of #87.
Android support update (2026-10-08)
User-directed scope: Android release and CI targets are arm64-v8a and armeabi-v7a. x86_64 Android is excluded for now. Validation for every Android milestone issue uses emulator devices only; physical-device testing and physical-device checklists are excluded. Record the limits of available ARM emulator/API images without claiming physical-device coverage.
## Goal
Browse nested password-store folders without decrypting entries, using native adaptive list/detail navigation.
## Scope
- Render storage-provided folder and entry rows with stable IDs, semantic icons, disclosure behavior, loading/empty/error states, and current-path context.
- Use compact push navigation and Material 3 Adaptive list-detail panes on expanded windows while preserving coherent selection through resize/fold changes.
- Selecting a folder requests the next typed directory page; selecting an entry opens the structured viewer.
- Support explicit refresh, deep hierarchies, long/Unicode names, empty folders, disappearing rows, and repository changes without reading the app filesystem in Kotlin.
- Preserve only non-secret path/selection identifiers across configuration changes; verify their revision before reuse after process death.
- Provide long-press/overflow and accessibility action entry points that later mutation issues can attach without coupling navigation to mutation rules.
## Acceptance criteria
- Folder traversal never prompts for GPG authentication and never decrypts entries.
- Compact/expanded transitions preserve a valid path and selection or safely return to the nearest existing ancestor.
- Stable row identities prevent stale taps/actions targeting a replacement row.
- TalkBack, large fonts, keyboard/D-pad, touch, and list-detail navigation are usable.
- Kotlin does not inspect `.gpg`, `.gpg-id`, directory entries, or display strings to determine type.
Depends on onboarding, the Compose shell, and the shared mobile contract. Part of #87.
## Android support update (2026-10-08)
User-directed scope: Android release and CI targets are **arm64-v8a** and **armeabi-v7a**. x86_64 Android is excluded for now. Validation for every Android milestone issue uses emulator devices only; physical-device testing and physical-device checklists are excluded. Record the limits of available ARM emulator/API images without claiming physical-device coverage.
hugo
added this to the 06 - Implement an Android version of the software milestone 2026-08-17 19:12:19 +00:00
Implemented and reviewed in commit 8c9341f214, pushed to main.
The real Android Passwords tab now uses storage-owned typed, revision-checked directory pages and Material 3 Adaptive list/detail navigation. Rust supplies paths, parent context, kinds, semantic icons, stable identifiers and object/page revisions; folder traversal never loads a key or decrypts entries. Missing ancestors recover safely, identical-byte replacements invalidate old selections, and entry opening checks the target before and after authentication. Kotlin renders native state without inspecting password-store files or parsing display text.
Compact entry detail uses the existing Rust authentication lease and structured masked fields. Only path/selection/revision enter saved state. Refresh and restoration revalidate them; obsolete worker results are discarded, repository changes discard old authentication handles, and leaving/backgrounding locks and clears presentation. Loading, empty and error states remain usable in both panes. Keyboard/D-pad, long press, labelled overflow and custom accessibility actions share checked targets. Folder context scrolls so landscape and large fonts retain usable content.
Validation: all four required workspace gates passed, including 462 tests. Full Android verification passed: JVM checks, lint, formatting, strict dependency/license policy, ARM64/ARMv7 packaging, 16 KB alignment, UniFFI parity and manifest/backup audits. Isolated native and Compose instrumentation plus five cold starts passed on ARM64 API 26/4 KB, API 37/4 KB and API 37/strict 16 KB. Regressions cover deep/Unicode/empty folders, runtime restoration, stale replacements, locked traversal, structured detail, compact unlock errors, Enter, D-pad Center, custom accessibility actions, and expanded panes at 200% font scale. Computer use verified the persistent configured store in landscape and portrait, including refresh without authentication. App updates used install -r and preserved all existing data.
Coverage limits: ARMv7 is built/audited because a compatible emulator image is unavailable. Manual TalkBack speech was not observed; labelled semantics and custom actions were exercised through Compose. Physical-device tests are excluded by the issue scope. No iPhone app source changed. Further viewer, biometric and lifecycle features remain with their respective milestone issues.
Implementation and validation details: docs/android/password-navigation.md. Review against #96 found no remaining implementation gaps within this issue's scope. Project build cleanup follows closure.
Implemented and reviewed in commit 8c9341f214d03b34634ff4d5e9df6b5773ee00aa, pushed to main.
The real Android Passwords tab now uses storage-owned typed, revision-checked directory pages and Material 3 Adaptive list/detail navigation. Rust supplies paths, parent context, kinds, semantic icons, stable identifiers and object/page revisions; folder traversal never loads a key or decrypts entries. Missing ancestors recover safely, identical-byte replacements invalidate old selections, and entry opening checks the target before and after authentication. Kotlin renders native state without inspecting password-store files or parsing display text.
Compact entry detail uses the existing Rust authentication lease and structured masked fields. Only path/selection/revision enter saved state. Refresh and restoration revalidate them; obsolete worker results are discarded, repository changes discard old authentication handles, and leaving/backgrounding locks and clears presentation. Loading, empty and error states remain usable in both panes. Keyboard/D-pad, long press, labelled overflow and custom accessibility actions share checked targets. Folder context scrolls so landscape and large fonts retain usable content.
Validation: all four required workspace gates passed, including 462 tests. Full Android verification passed: JVM checks, lint, formatting, strict dependency/license policy, ARM64/ARMv7 packaging, 16 KB alignment, UniFFI parity and manifest/backup audits. Isolated native and Compose instrumentation plus five cold starts passed on ARM64 API 26/4 KB, API 37/4 KB and API 37/strict 16 KB. Regressions cover deep/Unicode/empty folders, runtime restoration, stale replacements, locked traversal, structured detail, compact unlock errors, Enter, D-pad Center, custom accessibility actions, and expanded panes at 200% font scale. Computer use verified the persistent configured store in landscape and portrait, including refresh without authentication. App updates used install -r and preserved all existing data.
Coverage limits: ARMv7 is built/audited because a compatible emulator image is unavailable. Manual TalkBack speech was not observed; labelled semantics and custom actions were exercised through Compose. Physical-device tests are excluded by the issue scope. No iPhone app source changed. Further viewer, biometric and lifecycle features remain with their respective milestone issues.
Implementation and validation details: docs/android/password-navigation.md. Review against #96 found no remaining implementation gaps within this issue's scope. Project build cleanup follows closure.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Goal
Browse nested password-store folders without decrypting entries, using native adaptive list/detail navigation.
Scope
Acceptance criteria
.gpg,.gpg-id, directory entries, or display strings to determine type.Depends on onboarding, the Compose shell, and the shared mobile contract. Part of #87.
Android support update (2026-10-08)
User-directed scope: Android release and CI targets are arm64-v8a and armeabi-v7a. x86_64 Android is excluded for now. Validation for every Android milestone issue uses emulator devices only; physical-device testing and physical-device checklists are excluded. Record the limits of available ARM emulator/API images without claiming physical-device coverage.
Implemented and reviewed in commit
8c9341f214, pushed to main.The real Android Passwords tab now uses storage-owned typed, revision-checked directory pages and Material 3 Adaptive list/detail navigation. Rust supplies paths, parent context, kinds, semantic icons, stable identifiers and object/page revisions; folder traversal never loads a key or decrypts entries. Missing ancestors recover safely, identical-byte replacements invalidate old selections, and entry opening checks the target before and after authentication. Kotlin renders native state without inspecting password-store files or parsing display text.
Compact entry detail uses the existing Rust authentication lease and structured masked fields. Only path/selection/revision enter saved state. Refresh and restoration revalidate them; obsolete worker results are discarded, repository changes discard old authentication handles, and leaving/backgrounding locks and clears presentation. Loading, empty and error states remain usable in both panes. Keyboard/D-pad, long press, labelled overflow and custom accessibility actions share checked targets. Folder context scrolls so landscape and large fonts retain usable content.
Validation: all four required workspace gates passed, including 462 tests. Full Android verification passed: JVM checks, lint, formatting, strict dependency/license policy, ARM64/ARMv7 packaging, 16 KB alignment, UniFFI parity and manifest/backup audits. Isolated native and Compose instrumentation plus five cold starts passed on ARM64 API 26/4 KB, API 37/4 KB and API 37/strict 16 KB. Regressions cover deep/Unicode/empty folders, runtime restoration, stale replacements, locked traversal, structured detail, compact unlock errors, Enter, D-pad Center, custom accessibility actions, and expanded panes at 200% font scale. Computer use verified the persistent configured store in landscape and portrait, including refresh without authentication. App updates used install -r and preserved all existing data.
Coverage limits: ARMv7 is built/audited because a compatible emulator image is unavailable. Manual TalkBack speech was not observed; labelled semantics and custom actions were exercised through Compose. Physical-device tests are excluded by the issue scope. No iPhone app source changed. Further viewer, biometric and lifecycle features remain with their respective milestone issues.
Implementation and validation details: docs/android/password-navigation.md. Review against #96 found no remaining implementation gaps within this issue's scope. Project build cleanup follows closure.