Skip to content

Android/gap fixes retry validation paging ws - #157

Open
laddyr141-ui wants to merge 4 commits into
ethos-protocol:mainfrom
laddyr141-ui:android/gap-fixes-retry-validation-paging-ws
Open

Android/gap fixes retry validation paging ws#157
laddyr141-ui wants to merge 4 commits into
ethos-protocol:mainfrom
laddyr141-ui:android/gap-fixes-retry-validation-paging-ws

Conversation

laddyr141-ui and others added 4 commits July 27, 2026 12:00
A transient timeout (now bounded by HttpTimeout) previously surfaced
immediately as ApiResult.Error with no retry. get() now retries
transient network failures (timeouts, IOExceptions) with exponential
backoff via a new RetryPolicy/withRetry helper, mirroring iOS's
RetryPolicy.swift. post()/delete() remain single-attempt so a retried
mutation can never double-submit (check-in, withdrawal, 2FA disable, ...).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CreateVaultDialog only required beneficiary.isNotBlank() before
enabling Create, matching iOS's ethos-protocol#22 gap. Port iOS's StellarAddress
StrKey validator (ed25519 public key: length/prefix/version
byte/CRC16-XModem checksum) to Kotlin and require it before Create
is enabled, with inline validation feedback in the dialog.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
ApiClient.listVaults() and VaultViewModel.load() assumed the full
vault list fit in a single response, matching iOS's ethos-protocol#21 gap. Add
offset/limit query params to GET /vaults (documented in
shared/api-contract.md as VaultPage, coordinated with ethos-protocol#21), a
VaultViewModel.loadMore() that appends subsequent pages, and a
"Load more" control in VaultListScreen's LazyColumn.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
shared/api-contract.md documents wss://.../ws?vault_id={id}, but no
client existed anywhere in the Android app and Ktor's WebSockets
plugin wasn't installed, matching iOS's ethos-protocol#20 gap. Install WebSockets
on the existing HttpClient in ApiClient, add a VaultEventSocket
service with reconnect/exponential-backoff (resetting on each
successful connection), and wire it into VaultViewModel to update
the matching vault in place as events arrive.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@drips-wave

drips-wave Bot commented Jul 27, 2026

Copy link
Copy Markdown

@laddyr141-ui Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant