Skip to content

feat: offline queue improvements (#240, #241, #242, #243) - #330

Open
Johnero542 wants to merge 1 commit into
ethos-protocol:mainfrom
Johnero542:feature/offline-queue-improvements
Open

feat: offline queue improvements (#240, #241, #242, #243)#330
Johnero542 wants to merge 1 commit into
ethos-protocol:mainfrom
Johnero542:feature/offline-queue-improvements

Conversation

@Johnero542

Copy link
Copy Markdown

#241 — Extend offline queue to deposit/withdraw (Android + iOS)

  • Android: add DEPOSIT/WITHDRAW to PendingActionType enum; add DepositPayload/WithdrawPayload serializable data classes; bump Room DB version to 2; PendingActionSyncWorker drains all four action types; DepositViewModel/WithdrawViewModel queue offline instead of surfacing a plain error
  • iOS: new PendingActionStore generalises PendingCheckInStore for checkIn/deposit/withdraw; CheckInSyncTask drains all three types; APIClientProtocol/APIClient extended with deposit+withdraw; VaultStore queues deposit/withdraw offline with dedup semantics matching Android

#243 — Configurable TTL / staleness indicator (Android + iOS)

  • Android: OfflineCache gains maxAgeMs (default 24 h) and isCachedAtStale(); VaultUiState.cachedAt flows to OfflineBanner showing 'as of X ago' when serving cached data
  • iOS: OfflineCache.maxAge defaulted to 24 h in init; new OfflineCacheBanner view shown in VaultListView when offline or serving cached data

#242 — Cache hit/miss/stale telemetry (Android + iOS)

  • Android: CacheTelemetry object with AtomicLong counters wired into OfflineCache.load(); DebugScreen composable added; info button in vault list TopAppBar navigates to it
  • iOS: CacheTelemetry class added to OfflineSupport.swift; wired into OfflineCache.load(); SupportDebugView in Settings shows counters with Reset button

#240 — Manual Retry Now button (Android + iOS)

  • Android: PendingActionSyncWorker.scheduleImmediate() uses ExistingWorkPolicy.REPLACE for immediate no-backoff drain; VaultViewModel.retryNow() calls it; queued-actions banner with 'Retry Now' TextButton shown when queuedActionCount > 0
  • iOS: CheckInSyncTask.retryNow() calls performSync() directly; VaultStore.retryNow() async exposed; 'Retry Now' button shown in VaultListView when queuedActionCount > 0

chore: update .gitignore (all three levels)

  • Exclude test snapshot images (Paparazzi / screenshot tests)
  • Exclude iOS Snapshots / ReferenceImages directories
  • Remove 14 already-tracked snapshot PNGs from index
  • Add common secrets / credential file patterns

Closes #240
Closes #241
Closes #242
Closes #243

Summary

Changes

Testing

Parity checklist

This project maintains a feature-parity table in PARITY.md that
tracks which features are implemented on iOS vs Android. Please answer the
questions below before requesting review.

  • This PR does not add, change, or remove any user-facing feature on either
    platform — no PARITY.md update needed.

    — OR —

  • This PR adds/changes/removes a user-facing feature. I have updated PARITY.md:

    • Updated the status symbol(s) for the affected row(s).
    • Added or updated "Notes" if the implementation is partial or has caveats.
    • Removed or updated any rows in the "Known gaps" table that this PR closes.

Related issues

, ethos-protocol#242, ethos-protocol#243)

ethos-protocol#241 — Extend offline queue to deposit/withdraw (Android + iOS)
- Android: add DEPOSIT/WITHDRAW to PendingActionType enum; add
  DepositPayload/WithdrawPayload serializable data classes; bump
  Room DB version to 2; PendingActionSyncWorker drains all four
  action types; DepositViewModel/WithdrawViewModel queue offline
  instead of surfacing a plain error
- iOS: new PendingActionStore generalises PendingCheckInStore for
  checkIn/deposit/withdraw; CheckInSyncTask drains all three types;
  APIClientProtocol/APIClient extended with deposit+withdraw;
  VaultStore queues deposit/withdraw offline with dedup semantics
  matching Android

ethos-protocol#243 — Configurable TTL / staleness indicator (Android + iOS)
- Android: OfflineCache gains maxAgeMs (default 24 h) and
  isCachedAtStale(); VaultUiState.cachedAt flows to OfflineBanner
  showing 'as of X ago' when serving cached data
- iOS: OfflineCache.maxAge defaulted to 24 h in init; new
  OfflineCacheBanner view shown in VaultListView when offline or
  serving cached data

ethos-protocol#242 — Cache hit/miss/stale telemetry (Android + iOS)
- Android: CacheTelemetry object with AtomicLong counters wired
  into OfflineCache.load(); DebugScreen composable added; info
  button in vault list TopAppBar navigates to it
- iOS: CacheTelemetry class added to OfflineSupport.swift; wired
  into OfflineCache.load(); SupportDebugView in Settings shows
  counters with Reset button

ethos-protocol#240 — Manual Retry Now button (Android + iOS)
- Android: PendingActionSyncWorker.scheduleImmediate() uses
  ExistingWorkPolicy.REPLACE for immediate no-backoff drain;
  VaultViewModel.retryNow() calls it; queued-actions banner with
  'Retry Now' TextButton shown when queuedActionCount > 0
- iOS: CheckInSyncTask.retryNow() calls performSync() directly;
  VaultStore.retryNow() async exposed; 'Retry Now' button shown
  in VaultListView when queuedActionCount > 0

chore: update .gitignore (all three levels)
- Exclude test snapshot images (Paparazzi / screenshot tests)
- Exclude iOS __Snapshots__ / ReferenceImages directories
- Remove 14 already-tracked snapshot PNGs from index
- Add common secrets / credential file patterns
@drips-wave

drips-wave Bot commented Aug 26, 2026

Copy link
Copy Markdown

@Johnero542 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