-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
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_atRecoveryTierConfig— threshold, timelock_monthsDescriptorProposal— 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_idwallet_descriptor_cancel(session_id)wallet_descriptor_approve_contribution(session_id)
DescriptorCallbacks (implement in Kotlin):
on_proposed(session_id)— proposal sent, waiting for contributionson_contribution_needed(proposal)— incoming proposal from another participant, show approval UIon_contributed(session_id, share_index)— a participant contributed their xpubon_complete(session_id, external_descriptor, internal_descriptor)— descriptor finalizedon_failed(session_id, error)— session failed
All callback methods throw KeepMobileError (same pattern as BunkerCallbacks).
Android Work
- DescriptorCallbacks implementation — Kotlin
object : DescriptorCallbacksthat bridges events to UI state (follow BunkerService/BunkerCallbacks pattern) - Wallet screen — list descriptors per group, export (Sparrow JSON / raw), delete
- Propose flow — network picker, recovery tier config (threshold + timelock), calls
wallet_descriptor_propose - Contribution approval — notification/dialog when
on_contribution_neededfires, callswallet_descriptor_approve_contribution - Session status — show progress (proposed → contributions → complete/failed) via callback state
- Navigation — add Wallet route or integrate into existing Home/Share details screen
Reactions are currently unavailable