From 7fc70a295bd70d026dd821c4471dc6af02bf1160 Mon Sep 17 00:00:00 2001 From: SeniorZhai Date: Fri, 27 Mar 2026 15:21:25 +0800 Subject: [PATCH] refactor: unify compose button styles --- .../android/compose/InputAmountScreen.kt | 2 +- .../InputReferralBottomSheetDialogFragment.kt | 2 +- ...ralBindPreviewBottomSheetDialogFragment.kt | 2 +- .../ReferralBottomSheetDialogFragment.kt | 2 +- .../mixin/android/ui/home/web3/BrowserPage.kt | 2 +- .../android/ui/home/web3/components/Review.kt | 72 +-------------- .../android/ui/home/web3/stake/StakePage.kt | 19 +--- .../android/ui/home/web3/stake/UnstakePage.kt | 17 +--- .../ui/home/web3/trade/LimitOrderContent.kt | 22 ++--- .../android/ui/home/web3/trade/SwapContent.kt | 42 ++++----- .../ui/home/web3/trade/SwapTokenPage.kt | 20 +---- .../PerpsCloseBottomSheetDialogFragment.kt | 2 +- .../PerpsConfirmBottomSheetDialogFragment.kt | 2 +- .../wc/sessionproposal/SessionProposalPage.kt | 2 +- .../wc/sessionrequest/SessionRequestPage.kt | 4 +- .../LimitTransferBottomSheetDialogFragment.kt | 2 +- .../SwapTransferBottomSheetDialogFragment.kt | 2 +- ...letMultiSelectBottomSheetDialogFragment.kt | 2 +- .../widget/components/MaterialButton.kt | 87 ++++++++++++++++++- 19 files changed, 133 insertions(+), 172 deletions(-) diff --git a/app/src/main/java/one/mixin/android/compose/InputAmountScreen.kt b/app/src/main/java/one/mixin/android/compose/InputAmountScreen.kt index 1bc6fe036e..46150c348b 100644 --- a/app/src/main/java/one/mixin/android/compose/InputAmountScreen.kt +++ b/app/src/main/java/one/mixin/android/compose/InputAmountScreen.kt @@ -57,7 +57,7 @@ import one.mixin.android.extension.clickVibrate import one.mixin.android.extension.generateQRCode import one.mixin.android.extension.tickVibrate import one.mixin.android.session.Session -import one.mixin.android.ui.home.web3.components.ActionButton +import one.mixin.android.widget.components.ActionButton import one.mixin.android.util.getChainName import one.mixin.android.vo.safe.TokenItem import androidx.hilt.navigation.compose.hiltViewModel diff --git a/app/src/main/java/one/mixin/android/ui/common/profile/InputReferralBottomSheetDialogFragment.kt b/app/src/main/java/one/mixin/android/ui/common/profile/InputReferralBottomSheetDialogFragment.kt index a03cf796cb..4f3f74084b 100644 --- a/app/src/main/java/one/mixin/android/ui/common/profile/InputReferralBottomSheetDialogFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/common/profile/InputReferralBottomSheetDialogFragment.kt @@ -48,7 +48,7 @@ import one.mixin.android.extension.screenHeight import one.mixin.android.ui.common.BottomSheetViewModel import one.mixin.android.ui.common.MixinComposeBottomSheetDialogFragment import one.mixin.android.ui.common.compose.MaterialInputField -import one.mixin.android.ui.home.web3.components.ActionButton +import one.mixin.android.widget.components.ActionButton import one.mixin.android.ui.url.UrlInterpreterActivity import one.mixin.android.util.ErrorHandler.Companion.errorHandler import one.mixin.android.util.SystemUIManager diff --git a/app/src/main/java/one/mixin/android/ui/common/profile/ReferralBindPreviewBottomSheetDialogFragment.kt b/app/src/main/java/one/mixin/android/ui/common/profile/ReferralBindPreviewBottomSheetDialogFragment.kt index 4ab8682ed4..87b1d269ae 100644 --- a/app/src/main/java/one/mixin/android/ui/common/profile/ReferralBindPreviewBottomSheetDialogFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/common/profile/ReferralBindPreviewBottomSheetDialogFragment.kt @@ -49,7 +49,7 @@ import one.mixin.android.extension.screenHeight import one.mixin.android.ui.common.BottomSheetViewModel import one.mixin.android.ui.common.MixinComposeBottomSheetDialogFragment import one.mixin.android.ui.common.UserBottomSheetDialogFragment -import one.mixin.android.ui.home.web3.components.ActionBottom +import one.mixin.android.widget.components.ActionBottom import one.mixin.android.ui.landing.components.HighlightedTextWithClick import one.mixin.android.ui.tip.wc.compose.ItemContent import one.mixin.android.ui.wallet.ItemUserContent diff --git a/app/src/main/java/one/mixin/android/ui/common/profile/ReferralBottomSheetDialogFragment.kt b/app/src/main/java/one/mixin/android/ui/common/profile/ReferralBottomSheetDialogFragment.kt index 9aa9fcfbfb..2d758bc0c4 100644 --- a/app/src/main/java/one/mixin/android/ui/common/profile/ReferralBottomSheetDialogFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/common/profile/ReferralBottomSheetDialogFragment.kt @@ -51,7 +51,7 @@ import one.mixin.android.extension.roundTopOrBottom import one.mixin.android.extension.screenHeight import one.mixin.android.ui.common.MixinComposeBottomSheetDialogFragment import one.mixin.android.ui.home.bot.INTERNAL_REFERRAL_ID -import one.mixin.android.ui.home.web3.components.ActionButton +import one.mixin.android.widget.components.ActionButton import one.mixin.android.ui.landing.components.HighlightedTextWithClick import one.mixin.android.ui.landing.components.NumberedText import one.mixin.android.ui.setting.member.MixinMemberUpgradeBottomSheetDialogFragment diff --git a/app/src/main/java/one/mixin/android/ui/home/web3/BrowserPage.kt b/app/src/main/java/one/mixin/android/ui/home/web3/BrowserPage.kt index 492f02497f..1e9b5daef5 100644 --- a/app/src/main/java/one/mixin/android/ui/home/web3/BrowserPage.kt +++ b/app/src/main/java/one/mixin/android/ui/home/web3/BrowserPage.kt @@ -53,7 +53,7 @@ import one.mixin.android.extension.toast import one.mixin.android.tip.wc.internal.Chain import one.mixin.android.tip.wc.internal.TipGas import one.mixin.android.tip.wc.internal.WCEthereumTransaction -import one.mixin.android.ui.home.web3.components.ActionBottom +import one.mixin.android.widget.components.ActionBottom import one.mixin.android.ui.home.web3.components.MessagePreview import one.mixin.android.ui.home.web3.components.ParsedTxPreview import one.mixin.android.ui.home.web3.components.TokenTransactionPreview diff --git a/app/src/main/java/one/mixin/android/ui/home/web3/components/Review.kt b/app/src/main/java/one/mixin/android/ui/home/web3/components/Review.kt index 8df83ca674..4093a68ebb 100644 --- a/app/src/main/java/one/mixin/android/ui/home/web3/components/Review.kt +++ b/app/src/main/java/one/mixin/android/ui/home/web3/components/Review.kt @@ -21,7 +21,7 @@ import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Button +import one.mixin.android.widget.components.MixinButton import androidx.compose.material.ButtonDefaults import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.Icon @@ -69,6 +69,7 @@ import one.mixin.android.util.GsonHelper import one.mixin.android.vo.priceUSD import one.mixin.android.vo.safe.Token import one.mixin.android.web3.js.SolanaTxSource +import one.mixin.android.widget.components.ActionBottom import java.math.BigDecimal private val gradientColors = listOf(Cyan, Color(0xFF0066FF), Color(0xFF800080)) @@ -704,75 +705,6 @@ private fun WarningPreview() { } } -@Composable -fun ActionButton( - text: String, - onClick: () -> Unit, - backgroundColor: Color, - contentColor: Color, - modifier: Modifier = Modifier, - enabled: Boolean = true, - disabledBackgroundColor: Color = backgroundColor.copy(alpha = 0.4f), - disabledContentColor: Color = contentColor.copy(alpha = 0.6f), -) { - Button( - onClick = onClick, - enabled = enabled, - colors = ButtonDefaults.outlinedButtonColors( - backgroundColor = if (enabled) backgroundColor else disabledBackgroundColor, - contentColor = if (enabled) contentColor else disabledContentColor, - ), - shape = RoundedCornerShape(30.dp), - contentPadding = PaddingValues(horizontal = 35.dp, vertical = 10.dp), - elevation = ButtonDefaults.elevation( - pressedElevation = 0.dp, - defaultElevation = 0.dp, - hoveredElevation = 0.dp, - focusedElevation = 0.dp, - ), - modifier = modifier - ) { - Text( - text = text, - color = if (enabled) contentColor else disabledContentColor, - fontSize = 16.sp, - fontWeight = FontWeight.W400 - ) - } -} - -@Composable -fun ActionBottom( - modifier: Modifier, - cancelTitle: String, - confirmTitle: String, - cancelAction: () -> Unit, - confirmAction: () -> Unit, -) { - Row( - modifier = - modifier - .background(MixinAppTheme.colors.background) - .padding(8.dp) - .fillMaxWidth(), - horizontalArrangement = Arrangement.Center, - ) { - ActionButton( - text = cancelTitle, - onClick = cancelAction, - backgroundColor = MixinAppTheme.colors.backgroundWindow, - contentColor = MixinAppTheme.colors.textPrimary - ) - Box(modifier = Modifier.width(36.dp)) - ActionButton( - text = confirmTitle, - onClick = confirmAction, - backgroundColor = MixinAppTheme.colors.accent, - contentColor = Color.White - ) - } -} - @Preview @Composable fun TransferBottomPreview() { diff --git a/app/src/main/java/one/mixin/android/ui/home/web3/stake/StakePage.kt b/app/src/main/java/one/mixin/android/ui/home/web3/stake/StakePage.kt index 1d0085ab62..00487e9887 100644 --- a/app/src/main/java/one/mixin/android/ui/home/web3/stake/StakePage.kt +++ b/app/src/main/java/one/mixin/android/ui/home/web3/stake/StakePage.kt @@ -22,7 +22,7 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.Button +import one.mixin.android.widget.components.MixinButton import androidx.compose.material.ButtonDefaults import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.Divider @@ -127,7 +127,7 @@ fun StakePage( LocalSoftwareKeyboardController.current val focusManager = LocalFocusManager.current if (amountText.isNotEmpty()) { - Button( + MixinButton( modifier = Modifier.fillMaxWidth(), enabled = !isLoading, onClick = { @@ -135,19 +135,8 @@ fun StakePage( focusManager.clearFocus() onStake.invoke() }, - colors = - ButtonDefaults.outlinedButtonColors( - backgroundColor = if (checkBalance != true) MixinAppTheme.colors.backgroundGray else MixinAppTheme.colors.accent, - ), - shape = RoundedCornerShape(32.dp), - contentPadding = PaddingValues(vertical = 16.dp), - elevation = - ButtonDefaults.elevation( - pressedElevation = 0.dp, - defaultElevation = 0.dp, - hoveredElevation = 0.dp, - focusedElevation = 0.dp, - ), + backgroundColor = if (checkBalance != true) MixinAppTheme.colors.backgroundGray else MixinAppTheme.colors.accent, + contentColor = if (checkBalance != true) MixinAppTheme.colors.textAssist else Color.White, ) { if (isLoading) { CircularProgressIndicator( diff --git a/app/src/main/java/one/mixin/android/ui/home/web3/stake/UnstakePage.kt b/app/src/main/java/one/mixin/android/ui/home/web3/stake/UnstakePage.kt index ac99b91cd4..d19b723e6b 100644 --- a/app/src/main/java/one/mixin/android/ui/home/web3/stake/UnstakePage.kt +++ b/app/src/main/java/one/mixin/android/ui/home/web3/stake/UnstakePage.kt @@ -13,7 +13,7 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Button +import one.mixin.android.widget.components.MixinButton import androidx.compose.material.ButtonDefaults import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.Divider @@ -79,24 +79,11 @@ fun UnstakePage( StakeInfo(validator, stakeAccount, stakeActivation) Spacer(modifier = Modifier.weight(1f)) if (!stakeState.isDeactivatingState()) { - Button( + MixinButton( modifier = Modifier.fillMaxWidth(), onClick = { onClick.invoke() }, - colors = - ButtonDefaults.outlinedButtonColors( - backgroundColor = MixinAppTheme.colors.accent, - ), - shape = RoundedCornerShape(32.dp), - contentPadding = PaddingValues(vertical = 16.dp), - elevation = - ButtonDefaults.elevation( - pressedElevation = 0.dp, - defaultElevation = 0.dp, - hoveredElevation = 0.dp, - focusedElevation = 0.dp, - ), ) { if (isLoading) { CircularProgressIndicator( diff --git a/app/src/main/java/one/mixin/android/ui/home/web3/trade/LimitOrderContent.kt b/app/src/main/java/one/mixin/android/ui/home/web3/trade/LimitOrderContent.kt index 02b496f480..c087a188e6 100644 --- a/app/src/main/java/one/mixin/android/ui/home/web3/trade/LimitOrderContent.kt +++ b/app/src/main/java/one/mixin/android/ui/home/web3/trade/LimitOrderContent.kt @@ -23,7 +23,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll -import androidx.compose.material.Button +import one.mixin.android.widget.components.MixinButton import androidx.compose.material.ButtonDefaults import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.Icon @@ -405,7 +405,9 @@ fun LimitOrderContent( val isPriceValid = limitPriceText.toBigDecimalOrNull()?.let { it > BigDecimal.ZERO } == true val isOutputValid = outputText.toBigDecimalOrNull()?.let { it > BigDecimal.ZERO } == true val isEnabled = isInputValid && isPriceValid && isOutputValid && checkBalance == true && toToken != null - Button( + val buttonBackgroundColor = if (isEnabled) MixinAppTheme.colors.accent else MixinAppTheme.colors.backgroundGrayLight + val buttonContentColor = if (isEnabled) Color.White else MixinAppTheme.colors.textAssist + MixinButton( modifier = Modifier .fillMaxWidth() .height(48.dp), @@ -457,16 +459,8 @@ fun LimitOrderContent( } }, enabled = isEnabled, - colors = ButtonDefaults.outlinedButtonColors( - backgroundColor = if (isEnabled) MixinAppTheme.colors.accent else MixinAppTheme.colors.backgroundGrayLight, - ), - shape = RoundedCornerShape(32.dp), - elevation = ButtonDefaults.elevation( - pressedElevation = 0.dp, - defaultElevation = 0.dp, - hoveredElevation = 0.dp, - focusedElevation = 0.dp, - ), + backgroundColor = buttonBackgroundColor, + contentColor = buttonContentColor, ) { Box( modifier = Modifier @@ -479,13 +473,13 @@ fun LimitOrderContent( modifier = Modifier .width(18.dp) .height(18.dp), - color = if (isEnabled) Color.White else MixinAppTheme.colors.textAssist, + color = buttonContentColor, strokeWidth = 2.dp, ) } else { Text( text = if (checkBalance == false) "${fromToken?.symbol} ${stringResource(R.string.insufficient_balance)}" else stringResource(R.string.Review_Order), - color = if (isEnabled) Color.White else MixinAppTheme.colors.textAssist, + color = buttonContentColor, ) } } diff --git a/app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapContent.kt b/app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapContent.kt index df6f45c04b..7f3960379c 100644 --- a/app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapContent.kt +++ b/app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapContent.kt @@ -24,7 +24,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll -import androidx.compose.material.Button +import one.mixin.android.widget.components.MixinButton import androidx.compose.material.ButtonDefaults import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.Icon @@ -369,7 +369,17 @@ fun ReviewButton( val checkBalance = checkBalance(inputText, fromBalance) val hasError = quoteError != null - Button( + val buttonBackgroundColor = if (quoteResult != null && !hasError && checkBalance == true) { + MixinAppTheme.colors.accent + } else { + MixinAppTheme.colors.backgroundGrayLight + } + val buttonContentColor = if (checkBalance != true || hasError) { + MixinAppTheme.colors.textAssist + } else { + Color.White + } + MixinButton( modifier = Modifier .padding(horizontal = 20.dp) .fillMaxWidth() @@ -387,29 +397,13 @@ fun ReviewButton( } }, enabled = quoteResult != null && !hasError && !isLoading && checkBalance == true, - colors = ButtonDefaults.outlinedButtonColors( - backgroundColor = if (quoteResult != null && !hasError && checkBalance == true) { - MixinAppTheme.colors.accent - } else { - MixinAppTheme.colors.backgroundGrayLight - }, - ), - shape = RoundedCornerShape(32.dp), - elevation = ButtonDefaults.elevation( - pressedElevation = 0.dp, - defaultElevation = 0.dp, - hoveredElevation = 0.dp, - focusedElevation = 0.dp, - ), + backgroundColor = buttonBackgroundColor, + contentColor = buttonContentColor, ) { if (isLoading) { CircularProgressIndicator( modifier = Modifier.size(18.dp), - color = if (quoteResult != null && !hasError && checkBalance == true) { - Color.White - } else { - MixinAppTheme.colors.textAssist - }, + color = buttonContentColor, ) } else { Text( @@ -418,11 +412,7 @@ fun ReviewButton( } else { stringResource(R.string.Review_Order) }, - color = if (checkBalance != true || hasError) { - MixinAppTheme.colors.textAssist - } else { - Color.White - }, + color = buttonContentColor, ) } } diff --git a/app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapTokenPage.kt b/app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapTokenPage.kt index cd17c5ffec..84add283a8 100644 --- a/app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapTokenPage.kt +++ b/app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapTokenPage.kt @@ -14,7 +14,7 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Button +import one.mixin.android.widget.components.MixinButton import androidx.compose.material.ButtonDefaults import androidx.compose.material.Icon import androidx.compose.material.Text @@ -103,23 +103,9 @@ fun SwapTokenPage( } } Spacer(modifier = Modifier.height(20.dp)) - Button( + MixinButton( modifier = Modifier.fillMaxWidth(), - onClick = - confirmAction, - colors = - ButtonDefaults.outlinedButtonColors( - backgroundColor = MixinAppTheme.colors.accent, - ), - shape = RoundedCornerShape(32.dp), - contentPadding = PaddingValues(vertical = 16.dp), - elevation = - ButtonDefaults.elevation( - pressedElevation = 0.dp, - defaultElevation = 0.dp, - hoveredElevation = 0.dp, - focusedElevation = 0.dp, - ), + onClick = confirmAction, ) { Text( text = stringResource(id = R.string.view_on_explorer), diff --git a/app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsCloseBottomSheetDialogFragment.kt b/app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsCloseBottomSheetDialogFragment.kt index 55febc2f5b..bf0639bcde 100644 --- a/app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsCloseBottomSheetDialogFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsCloseBottomSheetDialogFragment.kt @@ -64,7 +64,7 @@ import one.mixin.android.extension.withArgs import one.mixin.android.ui.common.BottomSheetViewModel import one.mixin.android.ui.common.MixinComposeBottomSheetDialogFragment import one.mixin.android.ui.common.VerifyBottomSheetDialogFragment -import one.mixin.android.ui.home.web3.components.ActionBottom +import one.mixin.android.widget.components.ActionBottom import one.mixin.android.ui.tip.wc.compose.ItemWalletContent import one.mixin.android.ui.wallet.ItemUserContent import one.mixin.android.ui.wallet.components.WalletLabel diff --git a/app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsConfirmBottomSheetDialogFragment.kt b/app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsConfirmBottomSheetDialogFragment.kt index 63f24b6810..28b1f1d2d5 100644 --- a/app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsConfirmBottomSheetDialogFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsConfirmBottomSheetDialogFragment.kt @@ -72,7 +72,7 @@ import one.mixin.android.ui.common.PinInputBottomSheetDialogFragment import one.mixin.android.ui.common.UtxoConsolidationBottomSheetDialogFragment import one.mixin.android.ui.common.biometric.BiometricInfo import one.mixin.android.ui.common.biometric.buildTransferBiometricItem -import one.mixin.android.ui.home.web3.components.ActionBottom +import one.mixin.android.widget.components.ActionBottom import one.mixin.android.ui.tip.wc.compose.ItemWalletContent import one.mixin.android.ui.wallet.ItemUserContent import one.mixin.android.ui.wallet.components.WalletLabel diff --git a/app/src/main/java/one/mixin/android/ui/tip/wc/sessionproposal/SessionProposalPage.kt b/app/src/main/java/one/mixin/android/ui/tip/wc/sessionproposal/SessionProposalPage.kt index 4f41fccddf..217ecf035e 100644 --- a/app/src/main/java/one/mixin/android/ui/tip/wc/sessionproposal/SessionProposalPage.kt +++ b/app/src/main/java/one/mixin/android/ui/tip/wc/sessionproposal/SessionProposalPage.kt @@ -44,7 +44,7 @@ import one.mixin.android.extension.composeDp import one.mixin.android.extension.notNullWithElse import one.mixin.android.tip.wc.WalletConnect import one.mixin.android.tip.wc.internal.Chain -import one.mixin.android.ui.home.web3.components.ActionBottom +import one.mixin.android.widget.components.ActionBottom import one.mixin.android.ui.tip.wc.WalletConnectBottomSheetDialogFragment import one.mixin.android.ui.tip.wc.compose.ItemContent import one.mixin.android.ui.tip.wc.compose.Loading diff --git a/app/src/main/java/one/mixin/android/ui/tip/wc/sessionrequest/SessionRequestPage.kt b/app/src/main/java/one/mixin/android/ui/tip/wc/sessionrequest/SessionRequestPage.kt index d5d41aaa00..93ce4aea33 100644 --- a/app/src/main/java/one/mixin/android/ui/tip/wc/sessionrequest/SessionRequestPage.kt +++ b/app/src/main/java/one/mixin/android/ui/tip/wc/sessionrequest/SessionRequestPage.kt @@ -61,8 +61,6 @@ import one.mixin.android.tip.wc.internal.Method import one.mixin.android.tip.wc.internal.TipGas import one.mixin.android.tip.wc.internal.WCEthereumSignMessage import one.mixin.android.tip.wc.internal.WCEthereumTransaction -import one.mixin.android.ui.home.web3.components.ActionBottom -import one.mixin.android.ui.home.web3.components.ActionButton import one.mixin.android.ui.home.web3.components.MessagePreview import one.mixin.android.ui.home.web3.components.TransactionPreview import one.mixin.android.ui.home.web3.components.Warning @@ -74,6 +72,8 @@ import one.mixin.android.widget.components.MixinButton import one.mixin.android.vo.priceUSD import one.mixin.android.vo.safe.Token import one.mixin.android.web3.js.Web3Signer +import one.mixin.android.widget.components.ActionBottom +import one.mixin.android.widget.components.ActionButton import org.web3j.utils.Convert import org.web3j.utils.Numeric import timber.log.Timber diff --git a/app/src/main/java/one/mixin/android/ui/wallet/LimitTransferBottomSheetDialogFragment.kt b/app/src/main/java/one/mixin/android/ui/wallet/LimitTransferBottomSheetDialogFragment.kt index 9665a98e32..367912eda7 100644 --- a/app/src/main/java/one/mixin/android/ui/wallet/LimitTransferBottomSheetDialogFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/wallet/LimitTransferBottomSheetDialogFragment.kt @@ -93,7 +93,7 @@ import one.mixin.android.ui.common.biometric.buildTransferBiometricItem import one.mixin.android.ui.common.biometric.getUtxoExceptionMsg import one.mixin.android.ui.common.biometric.isUtxoException import one.mixin.android.ui.home.web3.Web3ViewModel -import one.mixin.android.ui.home.web3.components.ActionBottom +import one.mixin.android.widget.components.ActionBottom import one.mixin.android.ui.tip.wc.compose.ItemContent import one.mixin.android.ui.tip.wc.compose.ItemWalletContent import one.mixin.android.ui.url.UrlInterpreterActivity diff --git a/app/src/main/java/one/mixin/android/ui/wallet/SwapTransferBottomSheetDialogFragment.kt b/app/src/main/java/one/mixin/android/ui/wallet/SwapTransferBottomSheetDialogFragment.kt index db0f5437ad..ade91a87fe 100644 --- a/app/src/main/java/one/mixin/android/ui/wallet/SwapTransferBottomSheetDialogFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/wallet/SwapTransferBottomSheetDialogFragment.kt @@ -107,7 +107,7 @@ import one.mixin.android.ui.common.biometric.buildTransferBiometricItem import one.mixin.android.ui.common.biometric.getUtxoExceptionMsg import one.mixin.android.ui.common.biometric.isUtxoException import one.mixin.android.ui.home.web3.Web3ViewModel -import one.mixin.android.ui.home.web3.components.ActionBottom +import one.mixin.android.widget.components.ActionBottom import one.mixin.android.ui.tip.wc.WalletConnectActivity import one.mixin.android.ui.tip.wc.compose.ItemContent import one.mixin.android.ui.tip.wc.compose.ItemWalletContent diff --git a/app/src/main/java/one/mixin/android/ui/wallet/WalletMultiSelectBottomSheetDialogFragment.kt b/app/src/main/java/one/mixin/android/ui/wallet/WalletMultiSelectBottomSheetDialogFragment.kt index 0003d41a6d..c24d823da8 100644 --- a/app/src/main/java/one/mixin/android/ui/wallet/WalletMultiSelectBottomSheetDialogFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/wallet/WalletMultiSelectBottomSheetDialogFragment.kt @@ -43,7 +43,7 @@ import one.mixin.android.extension.getSafeAreaInsetsTop import one.mixin.android.extension.screenHeight import one.mixin.android.extension.withArgs import one.mixin.android.ui.common.MixinComposeBottomSheetDialogFragment -import one.mixin.android.ui.home.web3.components.ActionBottom +import one.mixin.android.widget.components.ActionBottom import one.mixin.android.ui.wallet.components.PREF_NAME import one.mixin.android.ui.wallet.components.WalletCard import one.mixin.android.ui.wallet.components.WalletDestination diff --git a/app/src/main/java/one/mixin/android/widget/components/MaterialButton.kt b/app/src/main/java/one/mixin/android/widget/components/MaterialButton.kt index ba2486d8d6..c4c4111591 100644 --- a/app/src/main/java/one/mixin/android/widget/components/MaterialButton.kt +++ b/app/src/main/java/one/mixin/android/widget/components/MaterialButton.kt @@ -1,8 +1,14 @@ package one.mixin.android.widget.components +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.Button import androidx.compose.material.ButtonDefaults @@ -11,8 +17,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import one.mixin.android.compose.theme.MixinAppTheme @Composable @@ -54,7 +62,8 @@ fun MixinButton( contentColor: Color = Color.White, disabledBackgroundColor: Color = backgroundColor.copy(alpha = 0.4f), disabledContentColor: Color = contentColor.copy(alpha = 0.6f), - content: @Composable () -> Unit, + text: String? = null, + content: (@Composable () -> Unit)? = null, ) { Button( onClick = onClick, @@ -75,6 +84,80 @@ fun MixinButton( focusedElevation = elevation, ), ) { - content() + when { + text != null -> { + Text( + text = text, + color = contentColor, + fontSize = 16.sp, + fontWeight = FontWeight.W500 + ) + } + content != null -> content() + } + } +} + + +@Composable +fun ActionButton( + text: String, + onClick: () -> Unit, + backgroundColor: Color, + contentColor: Color, + modifier: Modifier = Modifier, + enabled: Boolean = true, + disabledBackgroundColor: Color = backgroundColor.copy(alpha = 0.4f), + disabledContentColor: Color = contentColor.copy(alpha = 0.6f), +) { + MixinButton( + onClick = onClick, + enabled = enabled, + backgroundColor = backgroundColor, + contentColor = contentColor, + disabledBackgroundColor = disabledBackgroundColor, + disabledContentColor = disabledContentColor, + shape = RoundedCornerShape(30.dp), + contentPadding = PaddingValues(horizontal = 35.dp, vertical = 10.dp), + modifier = modifier + ) { + Text( + text = text, + color = if (enabled) contentColor else disabledContentColor, + fontSize = 16.sp, + fontWeight = FontWeight.W400 + ) + } +} + +@Composable +fun ActionBottom( + modifier: Modifier, + cancelTitle: String, + confirmTitle: String, + cancelAction: () -> Unit, + confirmAction: () -> Unit, +) { + Row( + modifier = + modifier + .background(MixinAppTheme.colors.background) + .padding(8.dp) + .fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + ) { + ActionButton( + text = cancelTitle, + onClick = cancelAction, + backgroundColor = MixinAppTheme.colors.backgroundWindow, + contentColor = MixinAppTheme.colors.textPrimary + ) + Box(modifier = Modifier.width(36.dp)) + ActionButton( + text = confirmTitle, + onClick = confirmAction, + backgroundColor = MixinAppTheme.colors.accent, + contentColor = Color.White + ) } }