feat: hardware wallets settings screen#612
Conversation
Observations from testingTesting observations (Trezor Safe 7, regtest + iPhone 13, #612 on latest HEAD, stacked on #611) Logs: Ran through the #612 QA checklist: Settings → Hardware Wallets row + count, device list (badge, rename, delete), empty state / Add flow, rename validation, disconnect/remove from settings, reconnect from dev Trezor screen. All listed manual tests pass. QA checklist coverage
1. Home connection icon placement vs Figma ❌ (non-blocking)Screenshot: on Home, the green BLE glyph sits next to the balance, but Figma has it next to the device name. Settings → Hardware Wallets list is correct (badge left of name — matches Android settings row). Parity note: Android Home uses 2. Rename length cap ✅ (matches Android)Long rename in logs ( Android parity: post-pair rename from Hardware Wallets settings is iOS-only in this PR (design added after Android #1032). Tracked on Android as bitkit-android#1056 (epic #998 subtask 10). Follow-up tracking
Overall: #612 settings screen, rename, and remove flows look good — approve once stacked on #611. Non-blocking follow-ups: Home icon placement (Figma/Android parity); Android settings rename UI (#1056). |
…ice is out of range
|
Home icon placement tracked in #613 |
This comment was marked as outdated.
This comment was marked as outdated.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5581bac490
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
This comment was marked as outdated.
This comment was marked as outdated.
…dy cleared, so it can't be mistaken fir a future real drop
|
Previews updated |
…onnectOnce, so a reused BLE path can never carry a leaked suppression marker into a new session
|
self-review finished, waiting for CI |
|
Retest on latest HEAD (Trezor Safe 7, iPhone 13, regtest). Logs attached: Verdict: approve ✅Settings / rename / remove flows look good. The reconnect-indicator detection work in this PR ( Settings QA (#612 scope)
No regressions on settings during the Jul 2 pass. Connection indicator (reconnect commits)
Log-backed timeline after range loss (@ 13:22:40):
Failed attempts had no connection/THP errors — scans simply found nothing ( Suggest extending #613 QA 4b with: backoff retries after external disconnect, longer/repeated scan while a known device exists but Non-blocking follow-ups → #613Already captured by @jvsena42 in #613 (comment) — agree, leave out of #612:
Also tracked in #613 (from earlier QA):
Android parity: post-pair rename from Settings is iOS-only here → bitkit-android#1056. Summary: Approve for settings screen + improved disconnect-state wiring. Reconnect recovery after range loss / flaky cold-start reconnect belongs in #613 alongside João's deferred items. |

Part of #589
This PR adds a Hardware Wallets settings screen for viewing and managing paired devices, reachable from Settings ▸ General ▸ Payments.
Description
This is the iOS port of synonymdev/bitkit-android#1032. iOS already had the watch-only data layer and shared components (
HwWalletManager, the connection badge, the device illustrations, and the hardware intro sheet), so this PR is mainly the settings row, the new list screen, and the rename sheet, laid out to match the Figma frames. Renaming adds a persistedcustomLabelto the stored device that takes priority when resolving the display name.Linked Issues/Tasks
Screenshot / Video
reconnect-with-custom-name.mov
delete-flow.mov
QA Notes
OBS: Only tested with emulator
Manual Tests
regression:Home hardware tile still shows the green/gray connection glyph (shared icon unchanged).Automated Checks
xcodebuild -workspace Bitkit.xcodeproj/project.xcworkspace -scheme Bitkit -configuration Debug -destination 'platform=iOS Simulator,id=<iPhone 16>' ONLY_ACTIVE_ARCH=YES build(concrete simulator UDID +ONLY_ACTIVE_ARCH=YESbecause the Rust xcframeworks are arm64-only).node scripts/validate-translations.js: 0 errors (run withglobresolved locally, since this checkout has nopackage.json).BitkitTests/HwWalletNameTestsnow asserts thecustomLabeloverride inresolveHwWalletName(custom name wins; empty falls back to label; nil falls back to the prefixed model) — 9 tests pass.HwWalletManager.removeDeviceandTrezorManager.forgetDevice; existingBitkitTests/HwWalletManagerTestsstill cover removal.