feat: add Paykit subscriptions - #1186
Conversation
Greptile SummaryAdds payer-side Paykit subscriptions, recurring-period payment requests, period-specific payment proofs, local due notifications, and subscription/payment management UI.
Confidence Score: 4/5The subscription restoration defect should be fixed before merging because it can silently remove valid unpaid billing periods from every payment entry point. When local acceptance state is unavailable, the repository substitutes a later paid-period or record-event timestamp, and period generation consequently filters out earlier unpaid obligations. Files Needing Attention: app/src/main/java/to/bitkit/repositories/PaykitPaymentRequestRepo.kt; app/src/main/java/to/bitkit/repositories/PaykitSubscription.kt
|
| Filename | Overview |
|---|---|
| app/src/main/java/to/bitkit/repositories/PaykitPaymentRequestRepo.kt | Coordinates subscription acceptance, restoration, due-period generation, dismissal, cancellation, and notification state; restored acceptance timestamps can omit earlier unpaid periods. |
| app/src/main/java/to/bitkit/repositories/PaykitSubscription.kt | Defines recurrence parsing, period generation, lifecycle classification, and conversion of periods into payment requests. |
| app/src/main/java/to/bitkit/repositories/PaykitPaymentProofRepo.kt | Adds period-specific Lightning and on-chain proof persistence, reconciliation, submission, and cancellation protection. |
| app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt | Integrates subscription requests and payment-proof preparation with existing send success, pending, failure, and retry paths. |
| app/src/main/java/to/bitkit/repositories/PaykitSubscriptionNotificationScheduler.kt | Schedules unique local work for upcoming subscription periods and routes notification selections to exact requests. |
| app/src/main/java/to/bitkit/ui/screens/subscriptions/SubscriptionsScreen.kt | Adds subscription/payment tabs, detail and status views, summaries, cancellation, and empty states. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Private subscription proposal] --> B[Review and accept]
B --> C[Persist acceptance state]
C --> D[Materialize billing periods]
D --> E[Pending payment request]
E --> F[Existing send flow]
F --> G{Payment result}
G -->|Failed| E
G -->|Pending| H[Retain in-flight proof]
G -->|Succeeded| I[Submit period-specific proof]
I --> J[Paid-period history]
D --> K[Schedule due notification]
K --> E
Reviews (1): Last reviewed commit: "feat: add Paykit subscription payments" | Re-trigger Greptile
Description
Adds the payer side of Paykit subscriptions, stacked on #1178.
This PR intentionally covers payer-side receipt only. Subscription creation, Discover, automatic payment without confirmation, and renewal are not included because they are outside this MVP or are not currently exposed by Paykit.
Dependencies:
0.1.0-rc46Preview
Final Android and cross-platform proof recordings were completed locally; they are not attached to the PR.
QA Notes
Manual Tests
Automated Checks
testDevDebugUnitTestsuitePaykitPaymentRequestRepoTest,PaykitPaymentRequestRepoSubscriptionTest,SubscriptionsScreenTest, andAppViewModelSendFlowTestcompileDevDebugKotlincompileDevDebugAndroidTestKotlindetekt --rerun-tasksassembleDevDebug, install, and cold launch on API 36 emulatorCodexBullTlsUiApi36git diff --check