Provide the native Android shell for Home, Passwords, Search, TOTP, and Settings using storage-provided state.
Scope
Build one ComponentActivity with Jetpack Compose, Material 3, and independent navigation/back-stack state for each top-level destination.
Use a bottom navigation bar on compact widths and an appropriate navigation rail/drawer on larger windows.
Use Material 3 Adaptive list-detail/supporting-pane patterns for phones, tablets, foldables, multi-window, desktop windowing, and live resize/fold transitions.
Drive loading, empty, ready, locked, stale, and error presentations from typed Rust fixtures. Kotlin must not derive state from titles or icon strings.
Use Navigation 3 or the stable navigation choice recorded by #88, ViewModels, immutable StateFlow, Hilt, and lifecycle-aware collection.
Preserve selected destination and safe navigation state across configuration/process recreation; never put secrets, decrypted records, editor contents, or native object handles in saved state.
Cancel screen-scoped work when its destination leaves scope and reject stale completions by operation/revision identity.
Implement edge-to-edge system bars, Material theming, light/dark/system appearance, keyboard/back behavior, and test tags/accessibility semantics.
Acceptance criteria
All five destinations work on compact and expanded windows with independent, predictable back stacks.
Process recreation restores only non-secret navigation state and starts protected screens locked.
Deterministic fixtures exercise every shell state without a real repository.
TalkBack, large font, display scaling, keyboard navigation, and touch targets pass shell-level checks.
Compose contains no repository, Git, OpenPGP, OTP, config, or persistence rules.
Depends on #88, the Gradle scaffold, and the platform-neutral 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
Provide the native Android shell for Home, Passwords, Search, TOTP, and Settings using storage-provided state.
## Scope
- Build one `ComponentActivity` with Jetpack Compose, Material 3, and independent navigation/back-stack state for each top-level destination.
- Use a bottom navigation bar on compact widths and an appropriate navigation rail/drawer on larger windows.
- Use Material 3 Adaptive list-detail/supporting-pane patterns for phones, tablets, foldables, multi-window, desktop windowing, and live resize/fold transitions.
- Drive loading, empty, ready, locked, stale, and error presentations from typed Rust fixtures. Kotlin must not derive state from titles or icon strings.
- Use Navigation 3 or the stable navigation choice recorded by #88, ViewModels, immutable StateFlow, Hilt, and lifecycle-aware collection.
- Preserve selected destination and safe navigation state across configuration/process recreation; never put secrets, decrypted records, editor contents, or native object handles in saved state.
- Cancel screen-scoped work when its destination leaves scope and reject stale completions by operation/revision identity.
- Implement edge-to-edge system bars, Material theming, light/dark/system appearance, keyboard/back behavior, and test tags/accessibility semantics.
## Acceptance criteria
- All five destinations work on compact and expanded windows with independent, predictable back stacks.
- Process recreation restores only non-secret navigation state and starts protected screens locked.
- Deterministic fixtures exercise every shell state without a real repository.
- TalkBack, large font, display scaling, keyboard navigation, and touch targets pass shell-level checks.
- Compose contains no repository, Git, OpenPGP, OTP, config, or persistence rules.
Depends on #88, the Gradle scaffold, and the platform-neutral 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:21 +00:00
Implemented the Material 3 adaptive Android shell over typed Rust state.
Navigation 3 presents all five roots, keeps Passwords navigation and the Preferences Appearance child independent, switches between compact bottom navigation and an expanded rail, and retains adaptive list/detail directives.
Saved state contains only tab/child flags and safe path/selection/revision identifiers; secret inputs and native handles stay out of saved state. Navigation cancels outgoing work synchronously, clears setup secrets, revokes protected Passwords presentation, and rejects cancelled setup success. Animated outgoing entries cannot revoke incoming work.
Rust supplies six deterministic shell states, including Stale. Appearance uses the existing Rust configuration API; Material colors and system-bar contrast follow light/dark/system state.
Fixed overlapping protection registrations so disposing one owner cannot remove another owner's identical cleanup callback. Added regression coverage, restoration/keyboard/large-text/compact-expanded navigation checks and native appearance persistence checks.
Regenerated the hardened shared Swift bindings for the additive state contract and updated the iPhone state icon.
Validation: all four required Rust workspace gates; complete Android build/unit/lint/ktlint/architecture/dependency/license/SBOM/manifest/native packaging gates for arm64-v8a and armeabi-v7a; app/core/bridge instrumentation and five cold starts on ARM64 API 26 (4 KB), API 37 (4 KB), and strict API 37 (16 KB). XcodeGen and the affected iPhone/watch simulator build passed. Computer use verified embedded Android portrait/landscape navigation, Appearance and whole-window theme, TalkBack focus/activation, 160% text with display scaling, and preserved-container locked iPhone folder navigation. Temporary Android accessibility/font/density settings were restored.
Acceptance review completed against the issue. TOTP list/detail/discovery and the remaining Preferences workflows retain their explicitly assigned milestone issues (#107/#110/#104). ARMv7 was build/package validated; available live images were ARM64. No actual fold-posture/desktop-window AVD or TalkBack audio recording is claimed. Physical devices and x86_64 are outside the issue's support scope. Details: docs/android/adaptive-shell.md.
Implemented the Material 3 adaptive Android shell over typed Rust state.
- Navigation 3 presents all five roots, keeps Passwords navigation and the Preferences Appearance child independent, switches between compact bottom navigation and an expanded rail, and retains adaptive list/detail directives.
- Saved state contains only tab/child flags and safe path/selection/revision identifiers; secret inputs and native handles stay out of saved state. Navigation cancels outgoing work synchronously, clears setup secrets, revokes protected Passwords presentation, and rejects cancelled setup success. Animated outgoing entries cannot revoke incoming work.
- Rust supplies six deterministic shell states, including Stale. Appearance uses the existing Rust configuration API; Material colors and system-bar contrast follow light/dark/system state.
- Fixed overlapping protection registrations so disposing one owner cannot remove another owner's identical cleanup callback. Added regression coverage, restoration/keyboard/large-text/compact-expanded navigation checks and native appearance persistence checks.
- Regenerated the hardened shared Swift bindings for the additive state contract and updated the iPhone state icon.
Validation: all four required Rust workspace gates; complete Android build/unit/lint/ktlint/architecture/dependency/license/SBOM/manifest/native packaging gates for arm64-v8a and armeabi-v7a; app/core/bridge instrumentation and five cold starts on ARM64 API 26 (4 KB), API 37 (4 KB), and strict API 37 (16 KB). XcodeGen and the affected iPhone/watch simulator build passed. Computer use verified embedded Android portrait/landscape navigation, Appearance and whole-window theme, TalkBack focus/activation, 160% text with display scaling, and preserved-container locked iPhone folder navigation. Temporary Android accessibility/font/density settings were restored.
Acceptance review completed against the issue. TOTP list/detail/discovery and the remaining Preferences workflows retain their explicitly assigned milestone issues (#107/#110/#104). ARMv7 was build/package validated; available live images were ARM64. No actual fold-posture/desktop-window AVD or TalkBack audio recording is claimed. Physical devices and x86_64 are outside the issue's support scope. Details: docs/android/adaptive-shell.md.
Commit: d22d71eb5e5d15b1927edc8e8a3ab80fb4feffa5
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
Provide the native Android shell for Home, Passwords, Search, TOTP, and Settings using storage-provided state.
Scope
ComponentActivitywith Jetpack Compose, Material 3, and independent navigation/back-stack state for each top-level destination.Acceptance criteria
Depends on #88, the Gradle scaffold, and the platform-neutral 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 the Material 3 adaptive Android shell over typed Rust state.
Validation: all four required Rust workspace gates; complete Android build/unit/lint/ktlint/architecture/dependency/license/SBOM/manifest/native packaging gates for arm64-v8a and armeabi-v7a; app/core/bridge instrumentation and five cold starts on ARM64 API 26 (4 KB), API 37 (4 KB), and strict API 37 (16 KB). XcodeGen and the affected iPhone/watch simulator build passed. Computer use verified embedded Android portrait/landscape navigation, Appearance and whole-window theme, TalkBack focus/activation, 160% text with display scaling, and preserved-container locked iPhone folder navigation. Temporary Android accessibility/font/density settings were restored.
Acceptance review completed against the issue. TOTP list/detail/discovery and the remaining Preferences workflows retain their explicitly assigned milestone issues (#107/#110/#104). ARMv7 was build/package validated; available live images were ARM64. No actual fold-posture/desktop-window AVD or TalkBack audio recording is claimed. Physical devices and x86_64 are outside the issue's support scope. Details: docs/android/adaptive-shell.md.
Commit:
d22d71eb5e