Skip to content

Add wallet descriptor coordination UI #164

@kwsantiago

Description

@kwsantiago

Integrate wallet descriptor coordination from keep-mobile UniFFI bindings into the Android app.

Upstream: privkeyio/keep#242

UniFFI API Surface

The keep-mobile bindings expose these new APIs (from keep_mobile.udl):

Types:

  • WalletDescriptorInfo — group_pubkey, external/internal descriptor, network, created_at
  • RecoveryTierConfig — threshold, timelock_months
  • DescriptorProposal — session_id, network, tiers

KeepMobile methods:

  • wallet_descriptor_list()List<WalletDescriptorInfo>
  • wallet_descriptor_export(group_pubkey, format)String (formats: "sparrow", "raw")
  • wallet_descriptor_delete(group_pubkey)
  • wallet_descriptor_set_callbacks(callbacks)
  • wallet_descriptor_propose(network, tiers) → session_id
  • wallet_descriptor_cancel(session_id)
  • wallet_descriptor_approve_contribution(session_id)

DescriptorCallbacks (implement in Kotlin):

  • on_proposed(session_id) — proposal sent, waiting for contributions
  • on_contribution_needed(proposal) — incoming proposal from another participant, show approval UI
  • on_contributed(session_id, share_index) — a participant contributed their xpub
  • on_complete(session_id, external_descriptor, internal_descriptor) — descriptor finalized
  • on_failed(session_id, error) — session failed

All callback methods throw KeepMobileError (same pattern as BunkerCallbacks).

Android Work

  1. DescriptorCallbacks implementation — Kotlin object : DescriptorCallbacks that bridges events to UI state (follow BunkerService/BunkerCallbacks pattern)
  2. Wallet screen — list descriptors per group, export (Sparrow JSON / raw), delete
  3. Propose flow — network picker, recovery tier config (threshold + timelock), calls wallet_descriptor_propose
  4. Contribution approval — notification/dialog when on_contribution_needed fires, calls wallet_descriptor_approve_contribution
  5. Session status — show progress (proposed → contributions → complete/failed) via callback state
  6. Navigation — add Wallet route or integrate into existing Home/Share details screen

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions