feat: persist hardware activities - #1044

Merged
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029
Jul 30, 2026
Merged

feat: persist hardware activities#1044
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029

Conversation

@ovitrif

@ovitrifovitrif commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Closes#1029
Refs #998

Description

This PR:

  1. Persists hardware-wallet watcher activities and Electrum transaction details in bitkit-core under the wallet ID already derived and stored by master.
  2. Uses the current bitkit-core activity model and the existing HwWalletId/KnownDevice identity path across watcher events, navigation, detail loading, tags, seen state, boost relationships, and deletion.
  3. Returns app and paired hardware-wallet activity through one sorted Core list while retaining wallet-scoped row identity, detail lookup, transaction lookup, tags, and UI keys.
  4. Reconciles each hardware watcher snapshot with Core, keeps live watcher state visible during persistence recovery, and emits received-transaction notifications after successful persistence.
  5. Preserves Transfer To Spending metadata on the hardware wallet activity so one blue Transfer / From Savings row represents the funding transaction.
  6. Deletes the removed device's Core activity scope and rebuilds that wallet's visible history from the watcher after re-pairing.

Preview

No visual redesign. Home, All Activity, Activity Detail, tag filtering, and Explore now render the wallet-scoped hardware activities supplied by bitkit-core.

QA Notes

Manual Tests

  • 1. Settings → Advanced → Dev Settings → Trezor → pair the Bridge emulator: Home shows the connected hardware wallet tile, balance, and blue hardware activities.
  • 2. Fund two hardware addresses with distinct amounts → mine a block → Home → Show All: both blue received rows appear once in the unified activity list.
  • 3. Blue hardware receive → Activity Detail → add a tag → back → reopen → Explore: the tag persists and Inputs plus Outputs contain the Electrum transaction details.
  • 4. All Activity → tag filter → select the hardware tag: the tagged blue row remains and untagged rows are absent.
  • 5. Hardware wallet → Transfer To Spending → 25% → Continue → Open Trezor Connect → approve Recipient, Amount, Locktime, and Summary → Continue Using Bitkit: Home shows exactly one new blue Transfer / From Savings row and its detail shows TO SPENDING.
  • 6. All Activity → switch Sent, Received, Other, and All: received hardware rows appear under Received, the hardware Transfer appears under Other, and All restores the combined list without a default-wallet duplicate.
  • 7. Settings → Hardware Wallets → remove the paired device → re-pair the same wallet: its scoped activity disappears on removal and rebuilds without duplicate rows after pairing.
  • 8.regression: app on-chain and LN activity → Activity Detail, tags, Explore, and wallet-specific lists: behavior matches master.

Automated Checks

  • Unit tests updated:
    • coverage active watcher ownership, Core snapshot persistence, persistence recovery, wallet removal, transfer metadata, and activity/transaction ID collisions across wallet scopes: HwWalletRepoTest.kt, ActivityRepoTest.kt, and TransferRepoTest.kt
    • coverage for scoped detail/tag calls, global unified listing, scoped navigation, hardware notification routing, and Transfer To Spending ownership: ActivityDetailViewModelTest.kt, ActivityListViewModelTest.kt, AppViewModelSendFlowTest.kt, and TransferViewModelTest.kt
    • retain default-wallet behavior with the scoped repository API: NotifyPaymentReceivedHandlerTest.kt and BoostTransactionViewModelTest.kt
  • Hardware-wallet journeys updated:
    • activity-blue-icons.xml and transfer-to-spending.xml; activity-detail-hw-tags.xml adds persisted tag and inputs/outputs coverage.
  • Functional verification:
    • Android 17 emulator and deterministic T2T1 Bridge emulator completed pairing, two confirmed hardware receives, persisted tags, tag filtering, Core inputs/outputs, all activity-tab assertions, four-step device signing, and one wallet-scoped pending transfer row.
  • Local checks:
    • just compile, just test, and just lint passed; all hardware-wallet journey XML files passed xmllint.

@greptile-apps

This comment has been minimized.

greptile-apps[bot]

This comment was marked as resolved.

@ovitrifovitrif self-assigned this Jun 24, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif marked this pull request as draft June 24, 2026 22:22
@ovitrifovitrif changed the title feat: integrate hardware wallet activities with corerefactor: use scoped hw activitiesJun 24, 2026
@ovitrifovitrif changed the title refactor: use scoped hw activitiesrefactor: use core hw-scoped activitiesJun 25, 2026
@ovitrifovitrif changed the title refactor: use core hw-scoped activitiesrefactor: use core hw activitiesJun 25, 2026
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch 2 times, most recently from f3f9a2c to 435d9b0CompareJuly 4, 2026 19:35
@ovitrif

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@piotr-iohk

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@ovitrifovitrif added this to the 2.5.0 milestone Jul 6, 2026
@ovitrif

This comment was marked as outdated.

github-advanced-security[bot]

This comment was marked as resolved.

@ovitrif
ovitrif changed the base branch from master to feat/wallet-scoped-core-0.3.9July 7, 2026 12:13
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 708cd21 to 794722aCompareJuly 7, 2026 12:13
Base automatically changed from feat/wallet-scoped-core-0.3.9 to masterJuly 9, 2026 08:53
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from ea9a252 to 5ae816aCompareJuly 9, 2026 20:35
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrif marked this pull request as ready for review July 9, 2026 20:39
Comment threadapp/src/main/java/to/bitkit/models/ActivityWalletType.kt Outdated
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 0d7d218 to 15b80faCompareJuly 14, 2026 15:50
@jvsena42

This comment was marked as outdated.

@jvsena42
jvsena42 marked this pull request as draft July 15, 2026 09:35
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 15b80fa to b4bbc26CompareJuly 22, 2026 18:30
@ovitrifovitrif changed the title refactor: use core hw activitiesfeat: persist hardware activitiesJul 22, 2026
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Indeed, most of these changes were already implemented

I rebuilt the branch from current master and retained the missing bitkit-core persistence and unified activity integration. The Trezor lifecycle, wallet identity, watcher APIs, and hardware-wallet foundation now come directly from master; the branch-local type and identity implementations are removed. The full repository checks and Bridge-backed hardware journeys pass on the reconstructed head.

Resolved in b4bbc26

@ovitrif
ovitrif marked this pull request as ready for review July 22, 2026 18:31
@piotr-iohk

Copy link
Copy Markdown
Collaborator

There are some conflicts that would be good to resolve before testing.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 29f2195 to 64cf108CompareJuly 23, 2026 17:52
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

There are some conflicts that would be good to resolve before testing.

I rebased this branch onto current origin/master (fe0ae42af), resolved the notification-handler test against the new presentation lifecycle, and reran just compile, just test, and just lint.

Resolved in 64cf108

@ovitrif
ovitrif removed the request for review from piotr-iohkJuly 27, 2026 14:19
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/services/CoreService.kt
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
jvsena42

This comment was marked as resolved.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from b8ef428 to e22a8d3CompareJuly 30, 2026 14:50
@ovitrif
ovitrif requested a review from jvsena42July 30, 2026 15:16

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tAck

@jvsena42
jvsena42 merged commit ce6cb1b into masterJul 30, 2026
18 checks passed
@jvsena42
jvsena42 deleted the refactor/core-hww-activities-1029 branch July 30, 2026 17:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bitkit Core support for hardware wallet activities

4 participants

@ovitrif@piotr-iohk@jvsena42@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: persist hardware activities - #1044

Merged
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029
Jul 30, 2026
Merged

feat: persist hardware activities#1044
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029

Conversation

@ovitrif

@ovitrifovitrif commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Closes#1029
Refs #998

Description

This PR:

  1. Persists hardware-wallet watcher activities and Electrum transaction details in bitkit-core under the wallet ID already derived and stored by master.
  2. Uses the current bitkit-core activity model and the existing HwWalletId/KnownDevice identity path across watcher events, navigation, detail loading, tags, seen state, boost relationships, and deletion.
  3. Returns app and paired hardware-wallet activity through one sorted Core list while retaining wallet-scoped row identity, detail lookup, transaction lookup, tags, and UI keys.
  4. Reconciles each hardware watcher snapshot with Core, keeps live watcher state visible during persistence recovery, and emits received-transaction notifications after successful persistence.
  5. Preserves Transfer To Spending metadata on the hardware wallet activity so one blue Transfer / From Savings row represents the funding transaction.
  6. Deletes the removed device's Core activity scope and rebuilds that wallet's visible history from the watcher after re-pairing.

Preview

No visual redesign. Home, All Activity, Activity Detail, tag filtering, and Explore now render the wallet-scoped hardware activities supplied by bitkit-core.

QA Notes

Manual Tests

  • 1. Settings → Advanced → Dev Settings → Trezor → pair the Bridge emulator: Home shows the connected hardware wallet tile, balance, and blue hardware activities.
  • 2. Fund two hardware addresses with distinct amounts → mine a block → Home → Show All: both blue received rows appear once in the unified activity list.
  • 3. Blue hardware receive → Activity Detail → add a tag → back → reopen → Explore: the tag persists and Inputs plus Outputs contain the Electrum transaction details.
  • 4. All Activity → tag filter → select the hardware tag: the tagged blue row remains and untagged rows are absent.
  • 5. Hardware wallet → Transfer To Spending → 25% → Continue → Open Trezor Connect → approve Recipient, Amount, Locktime, and Summary → Continue Using Bitkit: Home shows exactly one new blue Transfer / From Savings row and its detail shows TO SPENDING.
  • 6. All Activity → switch Sent, Received, Other, and All: received hardware rows appear under Received, the hardware Transfer appears under Other, and All restores the combined list without a default-wallet duplicate.
  • 7. Settings → Hardware Wallets → remove the paired device → re-pair the same wallet: its scoped activity disappears on removal and rebuilds without duplicate rows after pairing.
  • 8.regression: app on-chain and LN activity → Activity Detail, tags, Explore, and wallet-specific lists: behavior matches master.

Automated Checks

  • Unit tests updated:
    • coverage active watcher ownership, Core snapshot persistence, persistence recovery, wallet removal, transfer metadata, and activity/transaction ID collisions across wallet scopes: HwWalletRepoTest.kt, ActivityRepoTest.kt, and TransferRepoTest.kt
    • coverage for scoped detail/tag calls, global unified listing, scoped navigation, hardware notification routing, and Transfer To Spending ownership: ActivityDetailViewModelTest.kt, ActivityListViewModelTest.kt, AppViewModelSendFlowTest.kt, and TransferViewModelTest.kt
    • retain default-wallet behavior with the scoped repository API: NotifyPaymentReceivedHandlerTest.kt and BoostTransactionViewModelTest.kt
  • Hardware-wallet journeys updated:
    • activity-blue-icons.xml and transfer-to-spending.xml; activity-detail-hw-tags.xml adds persisted tag and inputs/outputs coverage.
  • Functional verification:
    • Android 17 emulator and deterministic T2T1 Bridge emulator completed pairing, two confirmed hardware receives, persisted tags, tag filtering, Core inputs/outputs, all activity-tab assertions, four-step device signing, and one wallet-scoped pending transfer row.
  • Local checks:
    • just compile, just test, and just lint passed; all hardware-wallet journey XML files passed xmllint.

@greptile-apps

This comment has been minimized.

greptile-apps[bot]

This comment was marked as resolved.

@ovitrifovitrif self-assigned this Jun 24, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif marked this pull request as draft June 24, 2026 22:22
@ovitrifovitrif changed the title feat: integrate hardware wallet activities with corerefactor: use scoped hw activitiesJun 24, 2026
@ovitrifovitrif changed the title refactor: use scoped hw activitiesrefactor: use core hw-scoped activitiesJun 25, 2026
@ovitrifovitrif changed the title refactor: use core hw-scoped activitiesrefactor: use core hw activitiesJun 25, 2026
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch 2 times, most recently from f3f9a2c to 435d9b0CompareJuly 4, 2026 19:35
@ovitrif

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@piotr-iohk

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@ovitrifovitrif added this to the 2.5.0 milestone Jul 6, 2026
@ovitrif

This comment was marked as outdated.

github-advanced-security[bot]

This comment was marked as resolved.

@ovitrif
ovitrif changed the base branch from master to feat/wallet-scoped-core-0.3.9July 7, 2026 12:13
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 708cd21 to 794722aCompareJuly 7, 2026 12:13
Base automatically changed from feat/wallet-scoped-core-0.3.9 to masterJuly 9, 2026 08:53
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from ea9a252 to 5ae816aCompareJuly 9, 2026 20:35
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrif marked this pull request as ready for review July 9, 2026 20:39
Comment threadapp/src/main/java/to/bitkit/models/ActivityWalletType.kt Outdated
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 0d7d218 to 15b80faCompareJuly 14, 2026 15:50
@jvsena42

This comment was marked as outdated.

@jvsena42
jvsena42 marked this pull request as draft July 15, 2026 09:35
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 15b80fa to b4bbc26CompareJuly 22, 2026 18:30
@ovitrifovitrif changed the title refactor: use core hw activitiesfeat: persist hardware activitiesJul 22, 2026
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Indeed, most of these changes were already implemented

I rebuilt the branch from current master and retained the missing bitkit-core persistence and unified activity integration. The Trezor lifecycle, wallet identity, watcher APIs, and hardware-wallet foundation now come directly from master; the branch-local type and identity implementations are removed. The full repository checks and Bridge-backed hardware journeys pass on the reconstructed head.

Resolved in b4bbc26

@ovitrif
ovitrif marked this pull request as ready for review July 22, 2026 18:31
@piotr-iohk

Copy link
Copy Markdown
Collaborator

There are some conflicts that would be good to resolve before testing.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 29f2195 to 64cf108CompareJuly 23, 2026 17:52
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

There are some conflicts that would be good to resolve before testing.

I rebased this branch onto current origin/master (fe0ae42af), resolved the notification-handler test against the new presentation lifecycle, and reran just compile, just test, and just lint.

Resolved in 64cf108

@ovitrif
ovitrif removed the request for review from piotr-iohkJuly 27, 2026 14:19
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/services/CoreService.kt
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
jvsena42

This comment was marked as resolved.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from b8ef428 to e22a8d3CompareJuly 30, 2026 14:50
@ovitrif
ovitrif requested a review from jvsena42July 30, 2026 15:16

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tAck

@jvsena42
jvsena42 merged commit ce6cb1b into masterJul 30, 2026
18 checks passed
@jvsena42
jvsena42 deleted the refactor/core-hww-activities-1029 branch July 30, 2026 17:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bitkit Core support for hardware wallet activities

4 participants

@ovitrif@piotr-iohk@jvsena42@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: persist hardware activities - #1044

Merged
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029
Jul 30, 2026
Merged

feat: persist hardware activities#1044
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029

Conversation

@ovitrif

@ovitrifovitrif commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Closes#1029
Refs #998

Description

This PR:

  1. Persists hardware-wallet watcher activities and Electrum transaction details in bitkit-core under the wallet ID already derived and stored by master.
  2. Uses the current bitkit-core activity model and the existing HwWalletId/KnownDevice identity path across watcher events, navigation, detail loading, tags, seen state, boost relationships, and deletion.
  3. Returns app and paired hardware-wallet activity through one sorted Core list while retaining wallet-scoped row identity, detail lookup, transaction lookup, tags, and UI keys.
  4. Reconciles each hardware watcher snapshot with Core, keeps live watcher state visible during persistence recovery, and emits received-transaction notifications after successful persistence.
  5. Preserves Transfer To Spending metadata on the hardware wallet activity so one blue Transfer / From Savings row represents the funding transaction.
  6. Deletes the removed device's Core activity scope and rebuilds that wallet's visible history from the watcher after re-pairing.

Preview

No visual redesign. Home, All Activity, Activity Detail, tag filtering, and Explore now render the wallet-scoped hardware activities supplied by bitkit-core.

QA Notes

Manual Tests

  • 1. Settings → Advanced → Dev Settings → Trezor → pair the Bridge emulator: Home shows the connected hardware wallet tile, balance, and blue hardware activities.
  • 2. Fund two hardware addresses with distinct amounts → mine a block → Home → Show All: both blue received rows appear once in the unified activity list.
  • 3. Blue hardware receive → Activity Detail → add a tag → back → reopen → Explore: the tag persists and Inputs plus Outputs contain the Electrum transaction details.
  • 4. All Activity → tag filter → select the hardware tag: the tagged blue row remains and untagged rows are absent.
  • 5. Hardware wallet → Transfer To Spending → 25% → Continue → Open Trezor Connect → approve Recipient, Amount, Locktime, and Summary → Continue Using Bitkit: Home shows exactly one new blue Transfer / From Savings row and its detail shows TO SPENDING.
  • 6. All Activity → switch Sent, Received, Other, and All: received hardware rows appear under Received, the hardware Transfer appears under Other, and All restores the combined list without a default-wallet duplicate.
  • 7. Settings → Hardware Wallets → remove the paired device → re-pair the same wallet: its scoped activity disappears on removal and rebuilds without duplicate rows after pairing.
  • 8.regression: app on-chain and LN activity → Activity Detail, tags, Explore, and wallet-specific lists: behavior matches master.

Automated Checks

  • Unit tests updated:
    • coverage active watcher ownership, Core snapshot persistence, persistence recovery, wallet removal, transfer metadata, and activity/transaction ID collisions across wallet scopes: HwWalletRepoTest.kt, ActivityRepoTest.kt, and TransferRepoTest.kt
    • coverage for scoped detail/tag calls, global unified listing, scoped navigation, hardware notification routing, and Transfer To Spending ownership: ActivityDetailViewModelTest.kt, ActivityListViewModelTest.kt, AppViewModelSendFlowTest.kt, and TransferViewModelTest.kt
    • retain default-wallet behavior with the scoped repository API: NotifyPaymentReceivedHandlerTest.kt and BoostTransactionViewModelTest.kt
  • Hardware-wallet journeys updated:
    • activity-blue-icons.xml and transfer-to-spending.xml; activity-detail-hw-tags.xml adds persisted tag and inputs/outputs coverage.
  • Functional verification:
    • Android 17 emulator and deterministic T2T1 Bridge emulator completed pairing, two confirmed hardware receives, persisted tags, tag filtering, Core inputs/outputs, all activity-tab assertions, four-step device signing, and one wallet-scoped pending transfer row.
  • Local checks:
    • just compile, just test, and just lint passed; all hardware-wallet journey XML files passed xmllint.

@greptile-apps

This comment has been minimized.

greptile-apps[bot]

This comment was marked as resolved.

@ovitrifovitrif self-assigned this Jun 24, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif marked this pull request as draft June 24, 2026 22:22
@ovitrifovitrif changed the title feat: integrate hardware wallet activities with corerefactor: use scoped hw activitiesJun 24, 2026
@ovitrifovitrif changed the title refactor: use scoped hw activitiesrefactor: use core hw-scoped activitiesJun 25, 2026
@ovitrifovitrif changed the title refactor: use core hw-scoped activitiesrefactor: use core hw activitiesJun 25, 2026
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch 2 times, most recently from f3f9a2c to 435d9b0CompareJuly 4, 2026 19:35
@ovitrif

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@piotr-iohk

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@ovitrifovitrif added this to the 2.5.0 milestone Jul 6, 2026
@ovitrif

This comment was marked as outdated.

github-advanced-security[bot]

This comment was marked as resolved.

@ovitrif
ovitrif changed the base branch from master to feat/wallet-scoped-core-0.3.9July 7, 2026 12:13
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 708cd21 to 794722aCompareJuly 7, 2026 12:13
Base automatically changed from feat/wallet-scoped-core-0.3.9 to masterJuly 9, 2026 08:53
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from ea9a252 to 5ae816aCompareJuly 9, 2026 20:35
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrif marked this pull request as ready for review July 9, 2026 20:39
Comment threadapp/src/main/java/to/bitkit/models/ActivityWalletType.kt Outdated
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 0d7d218 to 15b80faCompareJuly 14, 2026 15:50
@jvsena42

This comment was marked as outdated.

@jvsena42
jvsena42 marked this pull request as draft July 15, 2026 09:35
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 15b80fa to b4bbc26CompareJuly 22, 2026 18:30
@ovitrifovitrif changed the title refactor: use core hw activitiesfeat: persist hardware activitiesJul 22, 2026
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Indeed, most of these changes were already implemented

I rebuilt the branch from current master and retained the missing bitkit-core persistence and unified activity integration. The Trezor lifecycle, wallet identity, watcher APIs, and hardware-wallet foundation now come directly from master; the branch-local type and identity implementations are removed. The full repository checks and Bridge-backed hardware journeys pass on the reconstructed head.

Resolved in b4bbc26

@ovitrif
ovitrif marked this pull request as ready for review July 22, 2026 18:31
@piotr-iohk

Copy link
Copy Markdown
Collaborator

There are some conflicts that would be good to resolve before testing.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 29f2195 to 64cf108CompareJuly 23, 2026 17:52
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

There are some conflicts that would be good to resolve before testing.

I rebased this branch onto current origin/master (fe0ae42af), resolved the notification-handler test against the new presentation lifecycle, and reran just compile, just test, and just lint.

Resolved in 64cf108

@ovitrif
ovitrif removed the request for review from piotr-iohkJuly 27, 2026 14:19
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/services/CoreService.kt
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
jvsena42

This comment was marked as resolved.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from b8ef428 to e22a8d3CompareJuly 30, 2026 14:50
@ovitrif
ovitrif requested a review from jvsena42July 30, 2026 15:16

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tAck

@jvsena42
jvsena42 merged commit ce6cb1b into masterJul 30, 2026
18 checks passed
@jvsena42
jvsena42 deleted the refactor/core-hww-activities-1029 branch July 30, 2026 17:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bitkit Core support for hardware wallet activities

4 participants

@ovitrif@piotr-iohk@jvsena42@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: persist hardware activities - #1044

Merged
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029
Jul 30, 2026
Merged

feat: persist hardware activities#1044
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029

Conversation

@ovitrif

@ovitrifovitrif commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Closes#1029
Refs #998

Description

This PR:

  1. Persists hardware-wallet watcher activities and Electrum transaction details in bitkit-core under the wallet ID already derived and stored by master.
  2. Uses the current bitkit-core activity model and the existing HwWalletId/KnownDevice identity path across watcher events, navigation, detail loading, tags, seen state, boost relationships, and deletion.
  3. Returns app and paired hardware-wallet activity through one sorted Core list while retaining wallet-scoped row identity, detail lookup, transaction lookup, tags, and UI keys.
  4. Reconciles each hardware watcher snapshot with Core, keeps live watcher state visible during persistence recovery, and emits received-transaction notifications after successful persistence.
  5. Preserves Transfer To Spending metadata on the hardware wallet activity so one blue Transfer / From Savings row represents the funding transaction.
  6. Deletes the removed device's Core activity scope and rebuilds that wallet's visible history from the watcher after re-pairing.

Preview

No visual redesign. Home, All Activity, Activity Detail, tag filtering, and Explore now render the wallet-scoped hardware activities supplied by bitkit-core.

QA Notes

Manual Tests

  • 1. Settings → Advanced → Dev Settings → Trezor → pair the Bridge emulator: Home shows the connected hardware wallet tile, balance, and blue hardware activities.
  • 2. Fund two hardware addresses with distinct amounts → mine a block → Home → Show All: both blue received rows appear once in the unified activity list.
  • 3. Blue hardware receive → Activity Detail → add a tag → back → reopen → Explore: the tag persists and Inputs plus Outputs contain the Electrum transaction details.
  • 4. All Activity → tag filter → select the hardware tag: the tagged blue row remains and untagged rows are absent.
  • 5. Hardware wallet → Transfer To Spending → 25% → Continue → Open Trezor Connect → approve Recipient, Amount, Locktime, and Summary → Continue Using Bitkit: Home shows exactly one new blue Transfer / From Savings row and its detail shows TO SPENDING.
  • 6. All Activity → switch Sent, Received, Other, and All: received hardware rows appear under Received, the hardware Transfer appears under Other, and All restores the combined list without a default-wallet duplicate.
  • 7. Settings → Hardware Wallets → remove the paired device → re-pair the same wallet: its scoped activity disappears on removal and rebuilds without duplicate rows after pairing.
  • 8.regression: app on-chain and LN activity → Activity Detail, tags, Explore, and wallet-specific lists: behavior matches master.

Automated Checks

  • Unit tests updated:
    • coverage active watcher ownership, Core snapshot persistence, persistence recovery, wallet removal, transfer metadata, and activity/transaction ID collisions across wallet scopes: HwWalletRepoTest.kt, ActivityRepoTest.kt, and TransferRepoTest.kt
    • coverage for scoped detail/tag calls, global unified listing, scoped navigation, hardware notification routing, and Transfer To Spending ownership: ActivityDetailViewModelTest.kt, ActivityListViewModelTest.kt, AppViewModelSendFlowTest.kt, and TransferViewModelTest.kt
    • retain default-wallet behavior with the scoped repository API: NotifyPaymentReceivedHandlerTest.kt and BoostTransactionViewModelTest.kt
  • Hardware-wallet journeys updated:
    • activity-blue-icons.xml and transfer-to-spending.xml; activity-detail-hw-tags.xml adds persisted tag and inputs/outputs coverage.
  • Functional verification:
    • Android 17 emulator and deterministic T2T1 Bridge emulator completed pairing, two confirmed hardware receives, persisted tags, tag filtering, Core inputs/outputs, all activity-tab assertions, four-step device signing, and one wallet-scoped pending transfer row.
  • Local checks:
    • just compile, just test, and just lint passed; all hardware-wallet journey XML files passed xmllint.

@greptile-apps

This comment has been minimized.

greptile-apps[bot]

This comment was marked as resolved.

@ovitrifovitrif self-assigned this Jun 24, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif marked this pull request as draft June 24, 2026 22:22
@ovitrifovitrif changed the title feat: integrate hardware wallet activities with corerefactor: use scoped hw activitiesJun 24, 2026
@ovitrifovitrif changed the title refactor: use scoped hw activitiesrefactor: use core hw-scoped activitiesJun 25, 2026
@ovitrifovitrif changed the title refactor: use core hw-scoped activitiesrefactor: use core hw activitiesJun 25, 2026
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch 2 times, most recently from f3f9a2c to 435d9b0CompareJuly 4, 2026 19:35
@ovitrif

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@piotr-iohk

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@ovitrifovitrif added this to the 2.5.0 milestone Jul 6, 2026
@ovitrif

This comment was marked as outdated.

github-advanced-security[bot]

This comment was marked as resolved.

@ovitrif
ovitrif changed the base branch from master to feat/wallet-scoped-core-0.3.9July 7, 2026 12:13
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 708cd21 to 794722aCompareJuly 7, 2026 12:13
Base automatically changed from feat/wallet-scoped-core-0.3.9 to masterJuly 9, 2026 08:53
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from ea9a252 to 5ae816aCompareJuly 9, 2026 20:35
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrif marked this pull request as ready for review July 9, 2026 20:39
Comment threadapp/src/main/java/to/bitkit/models/ActivityWalletType.kt Outdated
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 0d7d218 to 15b80faCompareJuly 14, 2026 15:50
@jvsena42

This comment was marked as outdated.

@jvsena42
jvsena42 marked this pull request as draft July 15, 2026 09:35
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 15b80fa to b4bbc26CompareJuly 22, 2026 18:30
@ovitrifovitrif changed the title refactor: use core hw activitiesfeat: persist hardware activitiesJul 22, 2026
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Indeed, most of these changes were already implemented

I rebuilt the branch from current master and retained the missing bitkit-core persistence and unified activity integration. The Trezor lifecycle, wallet identity, watcher APIs, and hardware-wallet foundation now come directly from master; the branch-local type and identity implementations are removed. The full repository checks and Bridge-backed hardware journeys pass on the reconstructed head.

Resolved in b4bbc26

@ovitrif
ovitrif marked this pull request as ready for review July 22, 2026 18:31
@piotr-iohk

Copy link
Copy Markdown
Collaborator

There are some conflicts that would be good to resolve before testing.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 29f2195 to 64cf108CompareJuly 23, 2026 17:52
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

There are some conflicts that would be good to resolve before testing.

I rebased this branch onto current origin/master (fe0ae42af), resolved the notification-handler test against the new presentation lifecycle, and reran just compile, just test, and just lint.

Resolved in 64cf108

@ovitrif
ovitrif removed the request for review from piotr-iohkJuly 27, 2026 14:19
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/services/CoreService.kt
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
jvsena42

This comment was marked as resolved.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from b8ef428 to e22a8d3CompareJuly 30, 2026 14:50
@ovitrif
ovitrif requested a review from jvsena42July 30, 2026 15:16

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tAck

@jvsena42
jvsena42 merged commit ce6cb1b into masterJul 30, 2026
18 checks passed
@jvsena42
jvsena42 deleted the refactor/core-hww-activities-1029 branch July 30, 2026 17:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bitkit Core support for hardware wallet activities

4 participants

@ovitrif@piotr-iohk@jvsena42@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: persist hardware activities - #1044

Merged
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029
Jul 30, 2026
Merged

feat: persist hardware activities#1044
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029

Conversation

@ovitrif

@ovitrifovitrif commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Closes#1029
Refs #998

Description

This PR:

  1. Persists hardware-wallet watcher activities and Electrum transaction details in bitkit-core under the wallet ID already derived and stored by master.
  2. Uses the current bitkit-core activity model and the existing HwWalletId/KnownDevice identity path across watcher events, navigation, detail loading, tags, seen state, boost relationships, and deletion.
  3. Returns app and paired hardware-wallet activity through one sorted Core list while retaining wallet-scoped row identity, detail lookup, transaction lookup, tags, and UI keys.
  4. Reconciles each hardware watcher snapshot with Core, keeps live watcher state visible during persistence recovery, and emits received-transaction notifications after successful persistence.
  5. Preserves Transfer To Spending metadata on the hardware wallet activity so one blue Transfer / From Savings row represents the funding transaction.
  6. Deletes the removed device's Core activity scope and rebuilds that wallet's visible history from the watcher after re-pairing.

Preview

No visual redesign. Home, All Activity, Activity Detail, tag filtering, and Explore now render the wallet-scoped hardware activities supplied by bitkit-core.

QA Notes

Manual Tests

  • 1. Settings → Advanced → Dev Settings → Trezor → pair the Bridge emulator: Home shows the connected hardware wallet tile, balance, and blue hardware activities.
  • 2. Fund two hardware addresses with distinct amounts → mine a block → Home → Show All: both blue received rows appear once in the unified activity list.
  • 3. Blue hardware receive → Activity Detail → add a tag → back → reopen → Explore: the tag persists and Inputs plus Outputs contain the Electrum transaction details.
  • 4. All Activity → tag filter → select the hardware tag: the tagged blue row remains and untagged rows are absent.
  • 5. Hardware wallet → Transfer To Spending → 25% → Continue → Open Trezor Connect → approve Recipient, Amount, Locktime, and Summary → Continue Using Bitkit: Home shows exactly one new blue Transfer / From Savings row and its detail shows TO SPENDING.
  • 6. All Activity → switch Sent, Received, Other, and All: received hardware rows appear under Received, the hardware Transfer appears under Other, and All restores the combined list without a default-wallet duplicate.
  • 7. Settings → Hardware Wallets → remove the paired device → re-pair the same wallet: its scoped activity disappears on removal and rebuilds without duplicate rows after pairing.
  • 8.regression: app on-chain and LN activity → Activity Detail, tags, Explore, and wallet-specific lists: behavior matches master.

Automated Checks

  • Unit tests updated:
    • coverage active watcher ownership, Core snapshot persistence, persistence recovery, wallet removal, transfer metadata, and activity/transaction ID collisions across wallet scopes: HwWalletRepoTest.kt, ActivityRepoTest.kt, and TransferRepoTest.kt
    • coverage for scoped detail/tag calls, global unified listing, scoped navigation, hardware notification routing, and Transfer To Spending ownership: ActivityDetailViewModelTest.kt, ActivityListViewModelTest.kt, AppViewModelSendFlowTest.kt, and TransferViewModelTest.kt
    • retain default-wallet behavior with the scoped repository API: NotifyPaymentReceivedHandlerTest.kt and BoostTransactionViewModelTest.kt
  • Hardware-wallet journeys updated:
    • activity-blue-icons.xml and transfer-to-spending.xml; activity-detail-hw-tags.xml adds persisted tag and inputs/outputs coverage.
  • Functional verification:
    • Android 17 emulator and deterministic T2T1 Bridge emulator completed pairing, two confirmed hardware receives, persisted tags, tag filtering, Core inputs/outputs, all activity-tab assertions, four-step device signing, and one wallet-scoped pending transfer row.
  • Local checks:
    • just compile, just test, and just lint passed; all hardware-wallet journey XML files passed xmllint.

@greptile-apps

This comment has been minimized.

greptile-apps[bot]

This comment was marked as resolved.

@ovitrifovitrif self-assigned this Jun 24, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif marked this pull request as draft June 24, 2026 22:22
@ovitrifovitrif changed the title feat: integrate hardware wallet activities with corerefactor: use scoped hw activitiesJun 24, 2026
@ovitrifovitrif changed the title refactor: use scoped hw activitiesrefactor: use core hw-scoped activitiesJun 25, 2026
@ovitrifovitrif changed the title refactor: use core hw-scoped activitiesrefactor: use core hw activitiesJun 25, 2026
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch 2 times, most recently from f3f9a2c to 435d9b0CompareJuly 4, 2026 19:35
@ovitrif

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@piotr-iohk

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@ovitrifovitrif added this to the 2.5.0 milestone Jul 6, 2026
@ovitrif

This comment was marked as outdated.

github-advanced-security[bot]

This comment was marked as resolved.

@ovitrif
ovitrif changed the base branch from master to feat/wallet-scoped-core-0.3.9July 7, 2026 12:13
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 708cd21 to 794722aCompareJuly 7, 2026 12:13
Base automatically changed from feat/wallet-scoped-core-0.3.9 to masterJuly 9, 2026 08:53
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from ea9a252 to 5ae816aCompareJuly 9, 2026 20:35
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrif marked this pull request as ready for review July 9, 2026 20:39
Comment threadapp/src/main/java/to/bitkit/models/ActivityWalletType.kt Outdated
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 0d7d218 to 15b80faCompareJuly 14, 2026 15:50
@jvsena42

This comment was marked as outdated.

@jvsena42
jvsena42 marked this pull request as draft July 15, 2026 09:35
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 15b80fa to b4bbc26CompareJuly 22, 2026 18:30
@ovitrifovitrif changed the title refactor: use core hw activitiesfeat: persist hardware activitiesJul 22, 2026
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Indeed, most of these changes were already implemented

I rebuilt the branch from current master and retained the missing bitkit-core persistence and unified activity integration. The Trezor lifecycle, wallet identity, watcher APIs, and hardware-wallet foundation now come directly from master; the branch-local type and identity implementations are removed. The full repository checks and Bridge-backed hardware journeys pass on the reconstructed head.

Resolved in b4bbc26

@ovitrif
ovitrif marked this pull request as ready for review July 22, 2026 18:31
@piotr-iohk

Copy link
Copy Markdown
Collaborator

There are some conflicts that would be good to resolve before testing.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 29f2195 to 64cf108CompareJuly 23, 2026 17:52
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

There are some conflicts that would be good to resolve before testing.

I rebased this branch onto current origin/master (fe0ae42af), resolved the notification-handler test against the new presentation lifecycle, and reran just compile, just test, and just lint.

Resolved in 64cf108

@ovitrif
ovitrif removed the request for review from piotr-iohkJuly 27, 2026 14:19
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/services/CoreService.kt
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
jvsena42

This comment was marked as resolved.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from b8ef428 to e22a8d3CompareJuly 30, 2026 14:50
@ovitrif
ovitrif requested a review from jvsena42July 30, 2026 15:16

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tAck

@jvsena42
jvsena42 merged commit ce6cb1b into masterJul 30, 2026
18 checks passed
@jvsena42
jvsena42 deleted the refactor/core-hww-activities-1029 branch July 30, 2026 17:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bitkit Core support for hardware wallet activities

4 participants

@ovitrif@piotr-iohk@jvsena42@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: persist hardware activities - #1044

Merged
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029
Jul 30, 2026
Merged

feat: persist hardware activities#1044
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029

Conversation

@ovitrif

@ovitrifovitrif commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Closes#1029
Refs #998

Description

This PR:

  1. Persists hardware-wallet watcher activities and Electrum transaction details in bitkit-core under the wallet ID already derived and stored by master.
  2. Uses the current bitkit-core activity model and the existing HwWalletId/KnownDevice identity path across watcher events, navigation, detail loading, tags, seen state, boost relationships, and deletion.
  3. Returns app and paired hardware-wallet activity through one sorted Core list while retaining wallet-scoped row identity, detail lookup, transaction lookup, tags, and UI keys.
  4. Reconciles each hardware watcher snapshot with Core, keeps live watcher state visible during persistence recovery, and emits received-transaction notifications after successful persistence.
  5. Preserves Transfer To Spending metadata on the hardware wallet activity so one blue Transfer / From Savings row represents the funding transaction.
  6. Deletes the removed device's Core activity scope and rebuilds that wallet's visible history from the watcher after re-pairing.

Preview

No visual redesign. Home, All Activity, Activity Detail, tag filtering, and Explore now render the wallet-scoped hardware activities supplied by bitkit-core.

QA Notes

Manual Tests

  • 1. Settings → Advanced → Dev Settings → Trezor → pair the Bridge emulator: Home shows the connected hardware wallet tile, balance, and blue hardware activities.
  • 2. Fund two hardware addresses with distinct amounts → mine a block → Home → Show All: both blue received rows appear once in the unified activity list.
  • 3. Blue hardware receive → Activity Detail → add a tag → back → reopen → Explore: the tag persists and Inputs plus Outputs contain the Electrum transaction details.
  • 4. All Activity → tag filter → select the hardware tag: the tagged blue row remains and untagged rows are absent.
  • 5. Hardware wallet → Transfer To Spending → 25% → Continue → Open Trezor Connect → approve Recipient, Amount, Locktime, and Summary → Continue Using Bitkit: Home shows exactly one new blue Transfer / From Savings row and its detail shows TO SPENDING.
  • 6. All Activity → switch Sent, Received, Other, and All: received hardware rows appear under Received, the hardware Transfer appears under Other, and All restores the combined list without a default-wallet duplicate.
  • 7. Settings → Hardware Wallets → remove the paired device → re-pair the same wallet: its scoped activity disappears on removal and rebuilds without duplicate rows after pairing.
  • 8.regression: app on-chain and LN activity → Activity Detail, tags, Explore, and wallet-specific lists: behavior matches master.

Automated Checks

  • Unit tests updated:
    • coverage active watcher ownership, Core snapshot persistence, persistence recovery, wallet removal, transfer metadata, and activity/transaction ID collisions across wallet scopes: HwWalletRepoTest.kt, ActivityRepoTest.kt, and TransferRepoTest.kt
    • coverage for scoped detail/tag calls, global unified listing, scoped navigation, hardware notification routing, and Transfer To Spending ownership: ActivityDetailViewModelTest.kt, ActivityListViewModelTest.kt, AppViewModelSendFlowTest.kt, and TransferViewModelTest.kt
    • retain default-wallet behavior with the scoped repository API: NotifyPaymentReceivedHandlerTest.kt and BoostTransactionViewModelTest.kt
  • Hardware-wallet journeys updated:
    • activity-blue-icons.xml and transfer-to-spending.xml; activity-detail-hw-tags.xml adds persisted tag and inputs/outputs coverage.
  • Functional verification:
    • Android 17 emulator and deterministic T2T1 Bridge emulator completed pairing, two confirmed hardware receives, persisted tags, tag filtering, Core inputs/outputs, all activity-tab assertions, four-step device signing, and one wallet-scoped pending transfer row.
  • Local checks:
    • just compile, just test, and just lint passed; all hardware-wallet journey XML files passed xmllint.

@greptile-apps

This comment has been minimized.

greptile-apps[bot]

This comment was marked as resolved.

@ovitrifovitrif self-assigned this Jun 24, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif marked this pull request as draft June 24, 2026 22:22
@ovitrifovitrif changed the title feat: integrate hardware wallet activities with corerefactor: use scoped hw activitiesJun 24, 2026
@ovitrifovitrif changed the title refactor: use scoped hw activitiesrefactor: use core hw-scoped activitiesJun 25, 2026
@ovitrifovitrif changed the title refactor: use core hw-scoped activitiesrefactor: use core hw activitiesJun 25, 2026
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch 2 times, most recently from f3f9a2c to 435d9b0CompareJuly 4, 2026 19:35
@ovitrif

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@piotr-iohk

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@ovitrifovitrif added this to the 2.5.0 milestone Jul 6, 2026
@ovitrif

This comment was marked as outdated.

github-advanced-security[bot]

This comment was marked as resolved.

@ovitrif
ovitrif changed the base branch from master to feat/wallet-scoped-core-0.3.9July 7, 2026 12:13
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 708cd21 to 794722aCompareJuly 7, 2026 12:13
Base automatically changed from feat/wallet-scoped-core-0.3.9 to masterJuly 9, 2026 08:53
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from ea9a252 to 5ae816aCompareJuly 9, 2026 20:35
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrif marked this pull request as ready for review July 9, 2026 20:39
Comment threadapp/src/main/java/to/bitkit/models/ActivityWalletType.kt Outdated
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 0d7d218 to 15b80faCompareJuly 14, 2026 15:50
@jvsena42

This comment was marked as outdated.

@jvsena42
jvsena42 marked this pull request as draft July 15, 2026 09:35
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 15b80fa to b4bbc26CompareJuly 22, 2026 18:30
@ovitrifovitrif changed the title refactor: use core hw activitiesfeat: persist hardware activitiesJul 22, 2026
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Indeed, most of these changes were already implemented

I rebuilt the branch from current master and retained the missing bitkit-core persistence and unified activity integration. The Trezor lifecycle, wallet identity, watcher APIs, and hardware-wallet foundation now come directly from master; the branch-local type and identity implementations are removed. The full repository checks and Bridge-backed hardware journeys pass on the reconstructed head.

Resolved in b4bbc26

@ovitrif
ovitrif marked this pull request as ready for review July 22, 2026 18:31
@piotr-iohk

Copy link
Copy Markdown
Collaborator

There are some conflicts that would be good to resolve before testing.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 29f2195 to 64cf108CompareJuly 23, 2026 17:52
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

There are some conflicts that would be good to resolve before testing.

I rebased this branch onto current origin/master (fe0ae42af), resolved the notification-handler test against the new presentation lifecycle, and reran just compile, just test, and just lint.

Resolved in 64cf108

@ovitrif
ovitrif removed the request for review from piotr-iohkJuly 27, 2026 14:19
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/services/CoreService.kt
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
jvsena42

This comment was marked as resolved.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from b8ef428 to e22a8d3CompareJuly 30, 2026 14:50
@ovitrif
ovitrif requested a review from jvsena42July 30, 2026 15:16

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tAck

@jvsena42
jvsena42 merged commit ce6cb1b into masterJul 30, 2026
18 checks passed
@jvsena42
jvsena42 deleted the refactor/core-hww-activities-1029 branch July 30, 2026 17:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bitkit Core support for hardware wallet activities

4 participants

@ovitrif@piotr-iohk@jvsena42@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: persist hardware activities - #1044

Merged
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029
Jul 30, 2026
Merged

feat: persist hardware activities#1044
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029

Conversation

@ovitrif

@ovitrifovitrif commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Closes#1029
Refs #998

Description

This PR:

  1. Persists hardware-wallet watcher activities and Electrum transaction details in bitkit-core under the wallet ID already derived and stored by master.
  2. Uses the current bitkit-core activity model and the existing HwWalletId/KnownDevice identity path across watcher events, navigation, detail loading, tags, seen state, boost relationships, and deletion.
  3. Returns app and paired hardware-wallet activity through one sorted Core list while retaining wallet-scoped row identity, detail lookup, transaction lookup, tags, and UI keys.
  4. Reconciles each hardware watcher snapshot with Core, keeps live watcher state visible during persistence recovery, and emits received-transaction notifications after successful persistence.
  5. Preserves Transfer To Spending metadata on the hardware wallet activity so one blue Transfer / From Savings row represents the funding transaction.
  6. Deletes the removed device's Core activity scope and rebuilds that wallet's visible history from the watcher after re-pairing.

Preview

No visual redesign. Home, All Activity, Activity Detail, tag filtering, and Explore now render the wallet-scoped hardware activities supplied by bitkit-core.

QA Notes

Manual Tests

  • 1. Settings → Advanced → Dev Settings → Trezor → pair the Bridge emulator: Home shows the connected hardware wallet tile, balance, and blue hardware activities.
  • 2. Fund two hardware addresses with distinct amounts → mine a block → Home → Show All: both blue received rows appear once in the unified activity list.
  • 3. Blue hardware receive → Activity Detail → add a tag → back → reopen → Explore: the tag persists and Inputs plus Outputs contain the Electrum transaction details.
  • 4. All Activity → tag filter → select the hardware tag: the tagged blue row remains and untagged rows are absent.
  • 5. Hardware wallet → Transfer To Spending → 25% → Continue → Open Trezor Connect → approve Recipient, Amount, Locktime, and Summary → Continue Using Bitkit: Home shows exactly one new blue Transfer / From Savings row and its detail shows TO SPENDING.
  • 6. All Activity → switch Sent, Received, Other, and All: received hardware rows appear under Received, the hardware Transfer appears under Other, and All restores the combined list without a default-wallet duplicate.
  • 7. Settings → Hardware Wallets → remove the paired device → re-pair the same wallet: its scoped activity disappears on removal and rebuilds without duplicate rows after pairing.
  • 8.regression: app on-chain and LN activity → Activity Detail, tags, Explore, and wallet-specific lists: behavior matches master.

Automated Checks

  • Unit tests updated:
    • coverage active watcher ownership, Core snapshot persistence, persistence recovery, wallet removal, transfer metadata, and activity/transaction ID collisions across wallet scopes: HwWalletRepoTest.kt, ActivityRepoTest.kt, and TransferRepoTest.kt
    • coverage for scoped detail/tag calls, global unified listing, scoped navigation, hardware notification routing, and Transfer To Spending ownership: ActivityDetailViewModelTest.kt, ActivityListViewModelTest.kt, AppViewModelSendFlowTest.kt, and TransferViewModelTest.kt
    • retain default-wallet behavior with the scoped repository API: NotifyPaymentReceivedHandlerTest.kt and BoostTransactionViewModelTest.kt
  • Hardware-wallet journeys updated:
    • activity-blue-icons.xml and transfer-to-spending.xml; activity-detail-hw-tags.xml adds persisted tag and inputs/outputs coverage.
  • Functional verification:
    • Android 17 emulator and deterministic T2T1 Bridge emulator completed pairing, two confirmed hardware receives, persisted tags, tag filtering, Core inputs/outputs, all activity-tab assertions, four-step device signing, and one wallet-scoped pending transfer row.
  • Local checks:
    • just compile, just test, and just lint passed; all hardware-wallet journey XML files passed xmllint.

@greptile-apps

This comment has been minimized.

greptile-apps[bot]

This comment was marked as resolved.

@ovitrifovitrif self-assigned this Jun 24, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif marked this pull request as draft June 24, 2026 22:22
@ovitrifovitrif changed the title feat: integrate hardware wallet activities with corerefactor: use scoped hw activitiesJun 24, 2026
@ovitrifovitrif changed the title refactor: use scoped hw activitiesrefactor: use core hw-scoped activitiesJun 25, 2026
@ovitrifovitrif changed the title refactor: use core hw-scoped activitiesrefactor: use core hw activitiesJun 25, 2026
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch 2 times, most recently from f3f9a2c to 435d9b0CompareJuly 4, 2026 19:35
@ovitrif

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@piotr-iohk

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@ovitrifovitrif added this to the 2.5.0 milestone Jul 6, 2026
@ovitrif

This comment was marked as outdated.

github-advanced-security[bot]

This comment was marked as resolved.

@ovitrif
ovitrif changed the base branch from master to feat/wallet-scoped-core-0.3.9July 7, 2026 12:13
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 708cd21 to 794722aCompareJuly 7, 2026 12:13
Base automatically changed from feat/wallet-scoped-core-0.3.9 to masterJuly 9, 2026 08:53
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from ea9a252 to 5ae816aCompareJuly 9, 2026 20:35
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrif marked this pull request as ready for review July 9, 2026 20:39
Comment threadapp/src/main/java/to/bitkit/models/ActivityWalletType.kt Outdated
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 0d7d218 to 15b80faCompareJuly 14, 2026 15:50
@jvsena42

This comment was marked as outdated.

@jvsena42
jvsena42 marked this pull request as draft July 15, 2026 09:35
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 15b80fa to b4bbc26CompareJuly 22, 2026 18:30
@ovitrifovitrif changed the title refactor: use core hw activitiesfeat: persist hardware activitiesJul 22, 2026
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Indeed, most of these changes were already implemented

I rebuilt the branch from current master and retained the missing bitkit-core persistence and unified activity integration. The Trezor lifecycle, wallet identity, watcher APIs, and hardware-wallet foundation now come directly from master; the branch-local type and identity implementations are removed. The full repository checks and Bridge-backed hardware journeys pass on the reconstructed head.

Resolved in b4bbc26

@ovitrif
ovitrif marked this pull request as ready for review July 22, 2026 18:31
@piotr-iohk

Copy link
Copy Markdown
Collaborator

There are some conflicts that would be good to resolve before testing.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 29f2195 to 64cf108CompareJuly 23, 2026 17:52
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

There are some conflicts that would be good to resolve before testing.

I rebased this branch onto current origin/master (fe0ae42af), resolved the notification-handler test against the new presentation lifecycle, and reran just compile, just test, and just lint.

Resolved in 64cf108

@ovitrif
ovitrif removed the request for review from piotr-iohkJuly 27, 2026 14:19
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/services/CoreService.kt
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
jvsena42

This comment was marked as resolved.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from b8ef428 to e22a8d3CompareJuly 30, 2026 14:50
@ovitrif
ovitrif requested a review from jvsena42July 30, 2026 15:16

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tAck

@jvsena42
jvsena42 merged commit ce6cb1b into masterJul 30, 2026
18 checks passed
@jvsena42
jvsena42 deleted the refactor/core-hww-activities-1029 branch July 30, 2026 17:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bitkit Core support for hardware wallet activities

4 participants

@ovitrif@piotr-iohk@jvsena42@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: persist hardware activities - #1044

Merged
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029
Jul 30, 2026
Merged

feat: persist hardware activities#1044
jvsena42 merged 6 commits into
masterfrom
refactor/core-hww-activities-1029

Conversation

@ovitrif

@ovitrifovitrif commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Closes#1029
Refs #998

Description

This PR:

  1. Persists hardware-wallet watcher activities and Electrum transaction details in bitkit-core under the wallet ID already derived and stored by master.
  2. Uses the current bitkit-core activity model and the existing HwWalletId/KnownDevice identity path across watcher events, navigation, detail loading, tags, seen state, boost relationships, and deletion.
  3. Returns app and paired hardware-wallet activity through one sorted Core list while retaining wallet-scoped row identity, detail lookup, transaction lookup, tags, and UI keys.
  4. Reconciles each hardware watcher snapshot with Core, keeps live watcher state visible during persistence recovery, and emits received-transaction notifications after successful persistence.
  5. Preserves Transfer To Spending metadata on the hardware wallet activity so one blue Transfer / From Savings row represents the funding transaction.
  6. Deletes the removed device's Core activity scope and rebuilds that wallet's visible history from the watcher after re-pairing.

Preview

No visual redesign. Home, All Activity, Activity Detail, tag filtering, and Explore now render the wallet-scoped hardware activities supplied by bitkit-core.

QA Notes

Manual Tests

  • 1. Settings → Advanced → Dev Settings → Trezor → pair the Bridge emulator: Home shows the connected hardware wallet tile, balance, and blue hardware activities.
  • 2. Fund two hardware addresses with distinct amounts → mine a block → Home → Show All: both blue received rows appear once in the unified activity list.
  • 3. Blue hardware receive → Activity Detail → add a tag → back → reopen → Explore: the tag persists and Inputs plus Outputs contain the Electrum transaction details.
  • 4. All Activity → tag filter → select the hardware tag: the tagged blue row remains and untagged rows are absent.
  • 5. Hardware wallet → Transfer To Spending → 25% → Continue → Open Trezor Connect → approve Recipient, Amount, Locktime, and Summary → Continue Using Bitkit: Home shows exactly one new blue Transfer / From Savings row and its detail shows TO SPENDING.
  • 6. All Activity → switch Sent, Received, Other, and All: received hardware rows appear under Received, the hardware Transfer appears under Other, and All restores the combined list without a default-wallet duplicate.
  • 7. Settings → Hardware Wallets → remove the paired device → re-pair the same wallet: its scoped activity disappears on removal and rebuilds without duplicate rows after pairing.
  • 8.regression: app on-chain and LN activity → Activity Detail, tags, Explore, and wallet-specific lists: behavior matches master.

Automated Checks

  • Unit tests updated:
    • coverage active watcher ownership, Core snapshot persistence, persistence recovery, wallet removal, transfer metadata, and activity/transaction ID collisions across wallet scopes: HwWalletRepoTest.kt, ActivityRepoTest.kt, and TransferRepoTest.kt
    • coverage for scoped detail/tag calls, global unified listing, scoped navigation, hardware notification routing, and Transfer To Spending ownership: ActivityDetailViewModelTest.kt, ActivityListViewModelTest.kt, AppViewModelSendFlowTest.kt, and TransferViewModelTest.kt
    • retain default-wallet behavior with the scoped repository API: NotifyPaymentReceivedHandlerTest.kt and BoostTransactionViewModelTest.kt
  • Hardware-wallet journeys updated:
    • activity-blue-icons.xml and transfer-to-spending.xml; activity-detail-hw-tags.xml adds persisted tag and inputs/outputs coverage.
  • Functional verification:
    • Android 17 emulator and deterministic T2T1 Bridge emulator completed pairing, two confirmed hardware receives, persisted tags, tag filtering, Core inputs/outputs, all activity-tab assertions, four-step device signing, and one wallet-scoped pending transfer row.
  • Local checks:
    • just compile, just test, and just lint passed; all hardware-wallet journey XML files passed xmllint.

@greptile-apps

This comment has been minimized.

greptile-apps[bot]

This comment was marked as resolved.

@ovitrifovitrif self-assigned this Jun 24, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif marked this pull request as draft June 24, 2026 22:22
@ovitrifovitrif changed the title feat: integrate hardware wallet activities with corerefactor: use scoped hw activitiesJun 24, 2026
@ovitrifovitrif changed the title refactor: use scoped hw activitiesrefactor: use core hw-scoped activitiesJun 25, 2026
@ovitrifovitrif changed the title refactor: use core hw-scoped activitiesrefactor: use core hw activitiesJun 25, 2026
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch 2 times, most recently from f3f9a2c to 435d9b0CompareJuly 4, 2026 19:35
@ovitrif

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@piotr-iohk

This comment was marked as outdated.

@ovitrif

This comment was marked as outdated.

@ovitrifovitrif added this to the 2.5.0 milestone Jul 6, 2026
@ovitrif

This comment was marked as outdated.

github-advanced-security[bot]

This comment was marked as resolved.

@ovitrif
ovitrif changed the base branch from master to feat/wallet-scoped-core-0.3.9July 7, 2026 12:13
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 708cd21 to 794722aCompareJuly 7, 2026 12:13
Base automatically changed from feat/wallet-scoped-core-0.3.9 to masterJuly 9, 2026 08:53
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from ea9a252 to 5ae816aCompareJuly 9, 2026 20:35
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrif marked this pull request as ready for review July 9, 2026 20:39
Comment threadapp/src/main/java/to/bitkit/models/ActivityWalletType.kt Outdated
@ovitrif

This comment was marked as outdated.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 0d7d218 to 15b80faCompareJuly 14, 2026 15:50
@jvsena42

This comment was marked as outdated.

@jvsena42
jvsena42 marked this pull request as draft July 15, 2026 09:35
@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 15b80fa to b4bbc26CompareJuly 22, 2026 18:30
@ovitrifovitrif changed the title refactor: use core hw activitiesfeat: persist hardware activitiesJul 22, 2026
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Indeed, most of these changes were already implemented

I rebuilt the branch from current master and retained the missing bitkit-core persistence and unified activity integration. The Trezor lifecycle, wallet identity, watcher APIs, and hardware-wallet foundation now come directly from master; the branch-local type and identity implementations are removed. The full repository checks and Bridge-backed hardware journeys pass on the reconstructed head.

Resolved in b4bbc26

@ovitrif
ovitrif marked this pull request as ready for review July 22, 2026 18:31
@piotr-iohk

Copy link
Copy Markdown
Collaborator

There are some conflicts that would be good to resolve before testing.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from 29f2195 to 64cf108CompareJuly 23, 2026 17:52
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

There are some conflicts that would be good to resolve before testing.

I rebased this branch onto current origin/master (fe0ae42af), resolved the notification-handler test against the new presentation lifecycle, and reran just compile, just test, and just lint.

Resolved in 64cf108

@ovitrif
ovitrif removed the request for review from piotr-iohkJuly 27, 2026 14:19
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/services/CoreService.kt
Comment threadapp/src/main/java/to/bitkit/repositories/HwWalletRepo.kt Outdated
jvsena42

This comment was marked as resolved.

@ovitrif
ovitrifforce-pushed the refactor/core-hww-activities-1029 branch from b8ef428 to e22a8d3CompareJuly 30, 2026 14:50
@ovitrif
ovitrif requested a review from jvsena42July 30, 2026 15:16

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tAck

@jvsena42
jvsena42 merged commit ce6cb1b into masterJul 30, 2026
18 checks passed
@jvsena42
jvsena42 deleted the refactor/core-hww-activities-1029 branch July 30, 2026 17:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bitkit Core support for hardware wallet activities

4 participants

@ovitrif@piotr-iohk@jvsena42@github-advanced-security