Implement a search panel to quickly search entries by name #73

Closed
opened 2026-08-11 18:11:17 +00:00 by hugo · 2 comments
Owner

there should be a search panel in the task bar with a matching icon beside the passwords icon. that one should open a search entry pane where the user can enter part of a file name and then all entries that match that file name are shown. Tapping an entry will open the details, just like the passwords pane does.

check apple HIG about how search should be presented, but essentially I just want to see the items from the git repo with a matching name in the repo, be it part of a folder they are in or part of the file name. entries in that list should show where they are, so that the user has an idea with multiple same-name entries, where in the hierarchy it resides.

there should be a search panel in the task bar with a matching icon beside the passwords icon. that one should open a search entry pane where the user can enter part of a file name and then all entries that match that file name are shown. Tapping an entry will open the details, just like the passwords pane does. check apple HIG about how search should be presented, but essentially I just want to see the items from the git repo with a matching name in the repo, be it part of a folder they are in or part of the file name. entries in that list should show where they are, so that the user has an idea with multiple same-name entries, where in the hierarchy it resides.
hugo added this to the 04 - iPhone and Apple Watch apps milestone 2026-08-11 18:11:17 +00:00
hugo added the enhancementcritical labels 2026-08-11 18:11:18 +00:00
hugo added the untested label 2026-08-11 19:44:01 +00:00
Author
Owner

Implemented in commit a748744.

Implementation:

  • Added the native Search tab directly beside Passwords, backed by UISearchController with immediate, cancellable updates and native empty, loading, no-results, and error states.
  • Added storage-owned, case-insensitive partial matching across each full logical entry path, so both folder and filename fragments match.
  • Results reuse typed password rows, exclude .extensions data, preserve deterministic order, show parent locations to disambiguate duplicate names, and open the existing locked password detail flow.
  • Added Rust storage and configuration contract coverage, the UniFFI bridge, generated bindings, and accessibility labels/announcements.

Verified:

  • cargo fmt --all -- --check
  • RUSTFLAGS=-D warnings cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • focused storage search regression test
  • xcodegen generate
  • warning-as-error iPhone Simulator Debug build, Xcode Analyze, final Debug install and launch
  • signed optimized generic iPhone Release build
  • final simulator screenshot: the five-tab layout fits cleanly and Search is immediately beside Passwords
  • paired iPhone status checked; it was unavailable, so no device install was attempted

Deferred under the untested label because interactive unlock/credentials and the physical phone are unavailable:

  • Type, edit, clear, and cancel searches on the simulator; verify autofocus and keyboard behavior.
  • Visually inspect empty, loading, no-results, result, and error states with real entry data.
  • Verify case-insensitive folder and filename matches, duplicate-name location labels, long folder/name wrapping, and large result scrolling.
  • Tap results and verify locked/unlocked detail behavior and that Back preserves the query.
  • Check light/dark appearances, largest Dynamic Type, VoiceOver order/labels/result announcements.
  • Install and launch the signed Release build on the paired iPhone and confirm the existing app icon and Search tab.
Implemented in commit a748744. Implementation: - Added the native Search tab directly beside Passwords, backed by UISearchController with immediate, cancellable updates and native empty, loading, no-results, and error states. - Added storage-owned, case-insensitive partial matching across each full logical entry path, so both folder and filename fragments match. - Results reuse typed password rows, exclude .extensions data, preserve deterministic order, show parent locations to disambiguate duplicate names, and open the existing locked password detail flow. - Added Rust storage and configuration contract coverage, the UniFFI bridge, generated bindings, and accessibility labels/announcements. Verified: - cargo fmt --all -- --check - RUSTFLAGS=-D warnings cargo check --workspace --all-targets - cargo clippy --workspace --all-targets -- -D warnings - cargo test --workspace - focused storage search regression test - xcodegen generate - warning-as-error iPhone Simulator Debug build, Xcode Analyze, final Debug install and launch - signed optimized generic iPhone Release build - final simulator screenshot: the five-tab layout fits cleanly and Search is immediately beside Passwords - paired iPhone status checked; it was unavailable, so no device install was attempted Deferred under the untested label because interactive unlock/credentials and the physical phone are unavailable: - Type, edit, clear, and cancel searches on the simulator; verify autofocus and keyboard behavior. - Visually inspect empty, loading, no-results, result, and error states with real entry data. - Verify case-insensitive folder and filename matches, duplicate-name location labels, long folder/name wrapping, and large result scrolling. - Tap results and verify locked/unlocked detail behavior and that Back preserves the query. - Check light/dark appearances, largest Dynamic Type, VoiceOver order/labels/result announcements. - Install and launch the signed Release build on the paired iPhone and confirm the existing app icon and Search tab.
hugo closed this issue 2026-08-11 19:44:02 +00:00
Author
Owner

Non-destructive validation completed on 2026-08-12. In the iPhone simulator, an uppercase query matched password entries case-insensitively by logical path, a result opened its detail, and returning to Search preserved both the query and filtered results. Search matching and state behavior passed in the current isolated Rust workspace tests. Removing the untested label.

Non-destructive validation completed on 2026-08-12. In the iPhone simulator, an uppercase query matched password entries case-insensitively by logical path, a result opened its detail, and returning to Search preserved both the query and filtered results. Search matching and state behavior passed in the current isolated Rust workspace tests. Removing the untested label.
hugo removed the untested label 2026-08-12 17:32:55 +00:00
Sign in to join this conversation.