Skip to content

feat(wallet): add cash account module#6469

Open
SeniorZhai wants to merge 41 commits into
masterfrom
feat/add-cash-account-api
Open

feat(wallet): add cash account module#6469
SeniorZhai wants to merge 41 commits into
masterfrom
feat/add-cash-account-api

Conversation

@SeniorZhai

Copy link
Copy Markdown
Member

No description provided.

@SeniorZhai SeniorZhai added the testing Now testing, but you can review label Jun 26, 2026
@SeniorZhai SeniorZhai changed the title testing feat(cash account) Jun 26, 2026
@SeniorZhai SeniorZhai changed the title feat(cash account) feat(wallet): add cash account module Jun 26, 2026
Copilot AI and others added 4 commits June 26, 2026 04:21
…-banner

# Conflicts:
#	app/src/main/java/one/mixin/android/ui/wallet/WalletFragment.kt
#	app/src/main/java/one/mixin/android/ui/wallet/WalletHomePrivacyFragment.kt
@SeniorZhai SeniorZhai force-pushed the feat/add-cash-account-api branch from e0e05ba to 6bc52d6 Compare June 26, 2026 04:36
@SeniorZhai SeniorZhai marked this pull request as ready for review June 29, 2026 05:35
@SeniorZhai SeniorZhai requested a review from Copilot June 29, 2026 05:35

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 thread app/src/main/java/one/mixin/android/Constants.kt Outdated
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 thread app/src/main/java/one/mixin/android/di/AppModule.kt
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>
@SeniorZhai SeniorZhai force-pushed the feat/add-cash-account-api branch from 9d35ac8 to bde9a5a Compare July 1, 2026 06:17
@SeniorZhai SeniorZhai force-pushed the feat/add-cash-account-api branch from edf0a46 to f20a5bb Compare July 1, 2026 07:09
@SeniorZhai SeniorZhai force-pushed the feat/add-cash-account-api branch from 8aabc74 to 42f5611 Compare July 1, 2026 07:34
@SeniorZhai SeniorZhai force-pushed the feat/add-cash-account-api branch from dd4a670 to 5090ea4 Compare July 2, 2026 07:15
@SeniorZhai SeniorZhai force-pushed the feat/add-cash-account-api branch from 5090ea4 to 0fc836b Compare July 2, 2026 07:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

testing Now testing, but you can review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants