feat(wallet): add cash account module#6469
Open
SeniorZhai wants to merge 41 commits into
Open
Conversation
…-banner # Conflicts: # app/src/main/java/one/mixin/android/ui/wallet/WalletFragment.kt # app/src/main/java/one/mixin/android/ui/wallet/WalletHomePrivacyFragment.kt
e0e05ba to
6bc52d6
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
This PR introduces a Cash Account module and expands Wallet Home functionality with dynamic (remote-configured) banners and updated buy flows. It adds new UI components (both XML views and Compose), new API/services/repositories for Cash Account + Wallet Home banners, and updates wallet transfer flows to support Cash Account transfers with quote/preview.
Changes:
- Add Cash Account support across wallet home (new card), transfer destination selection, quote/review flow, and a dedicated preview bottom sheet.
- Add dynamic Wallet Home banners (remote “app-banners”), including visibility rules, closed-banner persistence, analytics tracking, and classic-wallet action parsing.
- Add a “Buy options” bottom sheet (Google Pay/Card vs Bank Transfer) and debug tooling to reset wallet-home banner state.
Reviewed changes
Copilot reviewed 63 out of 64 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| app/src/test/java/one/mixin/android/ui/wallet/WalletHomePreferencesTest.kt | Adds unit test coverage for dynamic-banner preference key behavior. |
| app/src/test/java/one/mixin/android/ui/wallet/home/WalletHomeBuilderTest.kt | Extends WalletHomeBuilder tests for dynamic banner card visibility and banner filtering. |
| app/src/test/java/one/mixin/android/ui/conversation/PerpsTradeActionTest.kt | Adds tests for classic banner action URL parsing into trade/buy/web targets. |
| app/src/test/java/one/mixin/android/api/response/WalletHomeBannerTest.kt | Adds tests for banner UI style decisions and closed-banner syncing. |
| app/src/main/res/values/strings.xml | Adds Cash Account + buy options + reset banner strings (EN). |
| app/src/main/res/values-zh-rCN/strings.xml | Adds Cash Account + buy options + reset banner strings (zh-CN). |
| app/src/main/res/layout/view_cash_account_transfer_content.xml | New XML layout used to render the Cash Account transfer preview content. |
| app/src/main/res/layout/fragment_log_debug.xml | Adds a debug menu entry to reset wallet-home banners. |
| app/src/main/res/layout/fragment_cash_account_preview_bottom_sheet.xml | New bottom sheet layout for the cash account transfer preview flow. |
| app/src/main/res/drawable/ic_wallet_home_cash.xml | Adds Cash Account icon for the wallet home cash card. |
| app/src/main/res/drawable/ic_wallet_buy_card.xml | Adds icon for “Google Pay or Card” buy option. |
| app/src/main/res/drawable/ic_wallet_buy_bank_transfer.xml | Adds icon for “Bank Transfer” buy option. |
| app/src/main/res/drawable/ic_destination_cash.xml | Adds destination icon for Cash Account in transfer destination picker. |
| app/src/main/res/drawable/bg_round_wallet_green_tv.xml | Adds green rounded background used for cash APY chip. |
| app/src/main/res/drawable/bg_label.xml | Updates label background color. |
| app/src/main/res/drawable/bg_label_cash_account.xml | Adds a dedicated label background for Cash Account. |
| app/src/main/java/one/mixin/android/widget/TitleView.kt | Extends label rendering to allow custom label background resource. |
| app/src/main/java/one/mixin/android/util/analytics/AnalyticsTracker.kt | Adds analytics event helper and constants for wallet home ad banner interactions; adds cash-account recipient type. |
| app/src/main/java/one/mixin/android/ui/wallet/WalletViewModel.kt | Adds cash account fetch + wallet home banners fetch; updates address lookup method to suspend. |
| app/src/main/java/one/mixin/android/ui/wallet/WalletTransferLabelStyle.kt | Centralizes transfer label kind + background color resolution. |
| app/src/main/java/one/mixin/android/ui/wallet/WalletHomePrivacyFragment.kt | Integrates cash account card, dynamic banners, buy options sheet, and banner tracking/close persistence. |
| app/src/main/java/one/mixin/android/ui/wallet/WalletHomePreferences.kt | Adds persistence for dynamic banner closed IDs via PropertyHelper. |
| app/src/main/java/one/mixin/android/ui/wallet/WalletHomeClassicFragment.kt | Integrates dynamic banners, classic banner action handling, and buy options sheet for classic wallets. |
| app/src/main/java/one/mixin/android/ui/wallet/WalletHomeBannerActionTarget.kt | Adds parsing of classic banner action URLs into typed targets (spot/perps/buy/web). |
| app/src/main/java/one/mixin/android/ui/wallet/WalletHomeAllTokensFragment.kt | Updates callbacks interface implementation to include cash click handler. |
| app/src/main/java/one/mixin/android/ui/wallet/WalletFragment.kt | Triggers banner refresh when wallet destination updates. |
| app/src/main/java/one/mixin/android/ui/wallet/WalletBuyOptionsBottomSheetDialogFragment.kt | Adds Compose bottom sheet to pick between buy options. |
| app/src/main/java/one/mixin/android/ui/wallet/transfer/widget/TransferContentSafeReceiveItem.kt | Refactors label rendering to use centralized label style and reusable span. |
| app/src/main/java/one/mixin/android/ui/wallet/transfer/widget/TransferContentItem.kt | Refactors label rendering to use centralized label style. |
| app/src/main/java/one/mixin/android/ui/wallet/transfer/widget/TransferContent.kt | Hides token field for biometric transfer content rendering. |
| app/src/main/java/one/mixin/android/ui/wallet/transfer/widget/CashAccountTransferContent.kt | New view responsible for rendering the Cash Account transfer preview content and highlighting amounts. |
| app/src/main/java/one/mixin/android/ui/wallet/TransactionInterface.kt | Refactors label background color selection to centralized label style. |
| app/src/main/java/one/mixin/android/ui/wallet/InputFragment.kt | Adds Cash Account transfer mode: quote scheduling, min receive validation, review flow, and preview bottom sheet navigation. |
| app/src/main/java/one/mixin/android/ui/wallet/home/WalletHomeState.kt | Extends wallet home state to include cash account + dynamic banners + new callbacks. |
| app/src/main/java/one/mixin/android/ui/wallet/home/WalletHomeItem.kt | Adds CASH card type to wallet home card enum. |
| app/src/main/java/one/mixin/android/ui/wallet/home/WalletHomeCashAccount.kt | Adds model + mapper utilities for Cash Account in wallet home. |
| app/src/main/java/one/mixin/android/ui/wallet/home/WalletHomeCache.kt | Persists cash account state as part of wallet home cache. |
| app/src/main/java/one/mixin/android/ui/wallet/home/WalletHomeBuilder.kt | Adds cash account flag and injects CASH card into privacy wallet ordering. |
| app/src/main/java/one/mixin/android/ui/wallet/home/WalletHomeBalance.kt | Updates total fiat calculation to incorporate cash USD component. |
| app/src/main/java/one/mixin/android/ui/wallet/home/components/WalletHomeCard.kt | Adds Cash Account Compose card rendering and click handling. |
| app/src/main/java/one/mixin/android/ui/wallet/home/components/BannerCards.kt | Reworks banner pager to support dynamic banners + auto-rotation + close handling per banner. |
| app/src/main/java/one/mixin/android/ui/wallet/CashAccountPreviewBottomSheetDialogFragment.kt | Adds cash transfer preview and PIN-confirmation flow for cash account transfers. |
| app/src/main/java/one/mixin/android/ui/wallet/adapter/SnapshotHolder.kt | Refactors label background color selection to centralized label style. |
| app/src/main/java/one/mixin/android/ui/tip/wc/sessionrequest/SessionRequestViewModel.kt | Updates address label lookup to use new suspend DAO lookup path. |
| app/src/main/java/one/mixin/android/ui/setting/LogAndDebugFragment.kt | Adds “Reset wallet home banners” action and refactors debug pref reset helpers. |
| app/src/main/java/one/mixin/android/ui/home/web3/Web3ViewModel.kt | Adds wallet-home banners fetch for web3 wallets and exposes web3 quote API. |
| app/src/main/java/one/mixin/android/ui/common/BottomSheetViewModel.kt | Updates address lookup method to be suspend after repository change. |
| app/src/main/java/one/mixin/android/ui/common/biometric/BiometricItem.kt | Extends TransferBiometricItem with cash preview fields; updates builder helper. |
| app/src/main/java/one/mixin/android/ui/address/TransferDestinationInputFragment.kt | Adds navigation path to Cash Account transfer flow with required args. |
| app/src/main/java/one/mixin/android/ui/address/page/TransferDestinationInputPage.kt | Adds Cash Account destination menu entry when available. |
| app/src/main/java/one/mixin/android/ui/address/component/DestinationMenu.kt | Adds generic badge support (for APY) and adjusts icon tinting behavior. |
| app/src/main/java/one/mixin/android/ui/address/AddressViewModel.kt | Adds reading cached Cash Account info from PropertyHelper. |
| app/src/main/java/one/mixin/android/repository/UserRepository.kt | Adds cash bot PK preference handling for bot session signatures. |
| app/src/main/java/one/mixin/android/repository/TokenRepository.kt | Makes address lookup suspend; adds web3 quote repository method. |
| app/src/main/java/one/mixin/android/repository/ReferralRepository.kt | Adds referral-backed wallet home banners fetch. |
| app/src/main/java/one/mixin/android/repository/CashRepository.kt | Adds Cash Account API fetch with bot-session warmup and PropertyHelper caching. |
| app/src/main/java/one/mixin/android/di/AppModule.kt | Adds CashService provider and updates Accept-Language handling in existing provider. |
| app/src/main/java/one/mixin/android/db/property/PropertyHelper.kt | Adds caching helpers for CashAccount in property DB (store/read). |
| app/src/main/java/one/mixin/android/Constants.kt | Adds Cash API/home URLs and new pref keys for cash bot PK and cached cash account. |
| app/src/main/java/one/mixin/android/api/service/ReferralService.kt | Adds app-banners endpoint for wallet home banners. |
| app/src/main/java/one/mixin/android/api/service/CashService.kt | Adds cash account API service interface. |
| app/src/main/java/one/mixin/android/api/response/WalletHomeBanner.kt | Introduces wallet home banner models and visibility/sync helper functions. |
| app/src/main/java/one/mixin/android/api/response/CashAccount.kt | Introduces CashAccount API response model. |
| .gitignore | Ignores .codegraph/. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+9
to
+25
| object WalletTransferLabelStyle { | ||
| private const val CASH_ACCOUNT_LABEL = "Cash Account" | ||
| private const val CASH_BACKGROUND = "#AEE666" | ||
| private const val ADDRESS_BACKGROUND = "#66DDAA" | ||
| private const val COMMON_WALLET_BACKGROUND = "#66DDAA" | ||
|
|
||
| fun resolve( | ||
| label: String?, | ||
| toWallet: Boolean = false, | ||
| ): WalletTransferLabelKind? { | ||
| if (label.isNullOrBlank()) return null | ||
| return when { | ||
| label.trim().equals(CASH_ACCOUNT_LABEL, ignoreCase = true) -> WalletTransferLabelKind.CASH | ||
| toWallet -> WalletTransferLabelKind.COMMON_WALLET | ||
| else -> WalletTransferLabelKind.ADDRESS | ||
| } | ||
| } |
Comment on lines
133
to
+135
| .wrapContentHeight(), | ||
| verticalAlignment = Alignment.CenterVertically, | ||
| beyondViewportPageCount = pages.size, | ||
| verticalAlignment = Alignment.Top, |
Comment on lines
+2541
to
+2542
| <string name="cash_balance">Cash Balance</string> | ||
| <string name="cash_account_apy">3.5% APY</string> |
| <string name="cash_account_minimum_receive">最低到账金额为 %1$s %2$s</string> | ||
| <string name="cash_account_minimum_send">错误 10614: 输入金额至少为 %1$s %2$s,请重新输入。</string> | ||
| <string name="cash_account_maximum_send">错误 10614: 输入金额最多为 %1$s %2$s,请重新输入。</string> | ||
| <string name="cash_account_add_cash">Add Cash</string> |
9d35ac8 to
bde9a5a
Compare
edf0a46 to
f20a5bb
Compare
8aabc74 to
42f5611
Compare
dd4a670 to
5090ea4
Compare
5090ea4 to
0fc836b
Compare
…-banner # Conflicts: # app/src/main/java/one/mixin/android/ui/wallet/WalletHomePrivacyFragment.kt
# Conflicts: # app/src/main/java/one/mixin/android/ui/wallet/WalletHomeClassicFragment.kt # app/src/main/java/one/mixin/android/ui/wallet/WalletHomePrivacyFragment.kt
Keep token detail without a buy action because that page does not expose buy.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.