diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 23547755c9..01bdd66eb8 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -3,6 +3,7 @@ package com.tangem.tap import android.app.Application import android.content.Intent import android.content.pm.ActivityInfo +import android.content.res.Configuration import android.os.Bundle import android.view.View import androidx.activity.viewModels @@ -238,6 +239,7 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac is GlobalSettingsState.Content -> { if (isDarkThemeFeatureEnabled(application)) { MutableAppThemeModeHolder.value = state.appThemeMode + MutableAppThemeModeHolder.isDarkThemeActive = isDarkTheme() val mode = when (state.appThemeMode) { AppThemeMode.FORCE_DARK -> AppCompatDelegate.MODE_NIGHT_YES @@ -255,6 +257,18 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac .launchIn(lifecycleScope) } + private fun isDarkTheme(): Boolean { + return when ( + resources.configuration.uiMode and + Configuration.UI_MODE_NIGHT_MASK + ) { + Configuration.UI_MODE_NIGHT_YES -> true + Configuration.UI_MODE_NIGHT_NO -> false + Configuration.UI_MODE_NIGHT_UNDEFINED -> false + else -> false + } + } + private fun systemActions() { WindowCompat.setDecorFitsSystemWindows(window, false) diff --git a/app/src/main/java/com/tangem/tap/common/apptheme/MutableAppThemeModeHolder.kt b/app/src/main/java/com/tangem/tap/common/apptheme/MutableAppThemeModeHolder.kt index c1b0f942c5..9dec177e01 100644 --- a/app/src/main/java/com/tangem/tap/common/apptheme/MutableAppThemeModeHolder.kt +++ b/app/src/main/java/com/tangem/tap/common/apptheme/MutableAppThemeModeHolder.kt @@ -14,4 +14,6 @@ internal object MutableAppThemeModeHolder : AppThemeModeHolder { appThemeMode.value = value } get() = appThemeMode.value + + var isDarkThemeActive: Boolean = false } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt b/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt index 1533313216..bf3d0d5c18 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt @@ -7,6 +7,7 @@ import com.tangem.blockchain.common.WalletManager import com.tangem.common.services.Result import com.tangem.domain.common.extensions.amountToCreateAccount import com.tangem.tap.common.TestActions +import com.tangem.tap.common.apptheme.MutableAppThemeModeHolder import com.tangem.tap.domain.TapError import com.tangem.tap.domain.getFirstToken import com.tangem.tap.domain.model.WalletDataModel @@ -71,6 +72,7 @@ fun WalletManager.getTopUpUrl(): String? { cryptoCurrencyName = wallet.blockchain.currency, fiatCurrencyName = globalState.appCurrency.code, walletAddress = defaultAddress, + isDarkTheme = MutableAppThemeModeHolder.isDarkThemeActive, ) } diff --git a/app/src/main/java/com/tangem/tap/common/ui/SimpleAlertDialog.kt b/app/src/main/java/com/tangem/tap/common/ui/SimpleAlertDialog.kt index 365f235f11..3cd171d04a 100644 --- a/app/src/main/java/com/tangem/tap/common/ui/SimpleAlertDialog.kt +++ b/app/src/main/java/com/tangem/tap/common/ui/SimpleAlertDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.common.ui import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.store import com.tangem.wallet.R @@ -39,7 +40,7 @@ object SimpleCancelableAlertDialog { secondaryButtonAction: () -> Unit = {}, context: Context, ): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(titleRes?.let { context.getString(it) } ?: title) setMessage(messageRes?.let { context.getString(it) } ?: message) setPositiveButton(context.getText(primaryButtonRes)) { _, _ -> primaryButtonAction() } diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/AddCustomTokenTestContent.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/AddCustomTokenTestContent.kt index 9304675ad7..48ffb09110 100644 --- a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/AddCustomTokenTestContent.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/AddCustomTokenTestContent.kt @@ -91,7 +91,7 @@ internal fun AddCustomTokenTestContent(state: AddCustomTokenStateHolder.TestCont floatingActionButtonPosition = FabPosition.Center, sheetBackgroundColor = TangemTheme.colors.background.secondary, sheetPeekHeight = TangemTheme.dimens.size0, - backgroundColor = TangemTheme.colors.background.secondary, + backgroundColor = TangemTheme.colors.background.primary, ) { Column( modifier = Modifier diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/components/AddCustomTokenToolbar.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/components/AddCustomTokenToolbar.kt index 92d07c66e8..81d0f52912 100644 --- a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/components/AddCustomTokenToolbar.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/components/AddCustomTokenToolbar.kt @@ -1,11 +1,9 @@ package com.tangem.tap.features.customtoken.impl.presentation.ui.components +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.width -import androidx.compose.material.Icon -import androidx.compose.material.IconButton -import androidx.compose.material.Text -import androidx.compose.material.TopAppBar +import androidx.compose.material.* import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource @@ -25,9 +23,14 @@ import com.tangem.tap.features.details.ui.cardsettings.resolveReference */ @Composable internal fun AddCustomTokenToolbar(title: TextReference, onBackButtonClick: () -> Unit) { + val toolbarElevation = if (isSystemInDarkTheme()) { + TangemTheme.dimens.elevation0 + } else { + AppBarDefaults.TopAppBarElevation + } TopAppBar( - backgroundColor = TangemTheme.colors.background.secondary, - elevation = TangemTheme.dimens.elevation0, + backgroundColor = TangemTheme.colors.background.primary, + elevation = toolbarElevation, ) { IconButton(onClick = onBackButtonClick) { Icon( diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ApproveWcSessionDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ApproveWcSessionDialog.kt index aba68641df..d49a684033 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ApproveWcSessionDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ApproveWcSessionDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.details.ui.walletconnect.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.blockchain.common.Blockchain import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction @@ -18,7 +19,7 @@ object ApproveWcSessionDialog { sessionBlockchain.fullName, session.peerMeta.url, ) - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(context.getString(R.string.wallet_connect_title)) setMessage(message) setPositiveButton(context.getText(R.string.common_start)) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/BnbTransactionDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/BnbTransactionDialog.kt index 27b3abdb23..cddaab442a 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/BnbTransactionDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/BnbTransactionDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.details.ui.walletconnect.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.walletconnect2.domain.WcPreparedRequest import com.tangem.tap.features.details.redux.walletconnect.BinanceMessageData @@ -37,7 +38,7 @@ object BnbTransactionDialog { ) val positiveButtonTitle = context.getText(R.string.common_sign) - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(context.getString(R.string.wallet_connect_title)) setMessage(fullMessage) setPositiveButton(positiveButtonTitle) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ChooseNetworkDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ChooseNetworkDialog.kt index ba70ae5a54..b99df2b02e 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ChooseNetworkDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ChooseNetworkDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.details.ui.walletconnect.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.blockchain.common.Blockchain import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction @@ -11,7 +12,7 @@ import com.tangem.wallet.R object ChooseNetworkDialog { fun create(session: WalletConnectSession, networks: List, context: Context): AlertDialog { - return AlertDialog.Builder(context) + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog) .setTitle(context.getString(R.string.wallet_connect_select_network)) .setNegativeButton(context.getString(R.string.common_cancel)) { _, _ -> store.dispatch(WalletConnectAction.FailureEstablishingSession(session.session)) diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ClipboardOrScanQrDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ClipboardOrScanQrDialog.kt index ce79d75c14..301435433b 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ClipboardOrScanQrDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/ClipboardOrScanQrDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.details.ui.walletconnect.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.core.navigation.AppScreen import com.tangem.core.navigation.NavigationAction import com.tangem.tap.common.redux.global.GlobalAction @@ -11,7 +12,7 @@ import com.tangem.wallet.R object ClipboardOrScanQrDialog { fun create(wcUri: String, context: Context): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(context.getString(R.string.common_select_action)) setMessage(context.getText(R.string.wallet_connect_clipboard_alert)) setPositiveButton(context.getText(R.string.wallet_connect_paste_from_clipboard)) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/PersonalSignDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/PersonalSignDialog.kt index 2e354e9f0a..4230afdeaf 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/PersonalSignDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/PersonalSignDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.details.ui.walletconnect.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.walletconnect2.domain.WcPreparedRequest import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction @@ -12,7 +13,7 @@ object PersonalSignDialog { fun create(preparedData: WcPreparedRequest.EthSign, context: Context): AlertDialog { val data = preparedData.preparedRequestData.dialogData val message = context.getString(R.string.wallet_connect_alert_sign_message, data.message) - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(context.getString(R.string.wallet_connect_title)) setMessage(message) setPositiveButton(context.getText(R.string.common_sign)) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SessionProposalDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SessionProposalDialog.kt index ee1ab06996..1dd8aff5a7 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SessionProposalDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SessionProposalDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.details.ui.walletconnect.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.walletconnect2.domain.models.WalletConnectEvents import com.tangem.tap.store @@ -21,7 +22,7 @@ object SessionProposalDialog { networks, sessionProposal.url, ) - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(context.getString(R.string.wallet_connect_title)) setMessage(message) setPositiveButton(context.getText(R.string.common_start)) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/TransactionDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/TransactionDialog.kt index 21ca09c15c..608eebc130 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/TransactionDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/TransactionDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.details.ui.walletconnect.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.walletconnect2.domain.WcPreparedRequest import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction @@ -26,7 +27,7 @@ object TransactionDialog { WcEthTransactionType.EthSignTransaction -> context.getText(R.string.common_sign) WcEthTransactionType.EthSendTransaction -> context.getText(R.string.common_sign_and_send) } - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(context.getString(R.string.wallet_connect_title)) setMessage(message) setPositiveButton(positiveButtonTitle) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt index 21077fec07..70c389c322 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt @@ -5,7 +5,6 @@ import android.util.TypedValue import android.view.View import android.view.animation.OvershootInterpolator import androidx.annotation.LayoutRes -import androidx.appcompat.content.res.AppCompatResources import androidx.constraintlayout.widget.ConstraintSet import androidx.core.view.isVisible import androidx.transition.TransitionManager @@ -194,11 +193,7 @@ class TwinsCardsFragment : BaseOnboardingFragment() { ) btnMainAction.setText(R.string.common_continue) - btnMainAction.icon = when (state.currentStep) { - is TwinCardsStep.WelcomeOnly -> null - is TwinCardsStep.Welcome -> AppCompatResources.getDrawable(requireContext(), R.drawable.ic_tangem_24) - else -> null - } + btnMainAction.icon = null btnMainAction.setOnClickListener { onMainButtonClick() } } @@ -346,7 +341,6 @@ class TwinsCardsFragment : BaseOnboardingFragment() { btnMainAction.setOnClickListener { store.dispatch(TwinCardsAction.TopUp) } - btnAlternativeAction.isVisible = true btnAlternativeAction.setText(R.string.onboarding_top_up_button_show_wallet_address) btnAlternativeAction.setOnClickListener { @@ -354,7 +348,6 @@ class TwinsCardsFragment : BaseOnboardingFragment() { } } else { btnMainAction.setText(R.string.onboarding_button_receive_crypto) - btnMainAction.icon = null btnMainAction.setOnClickListener { store.dispatch(TwinCardsAction.ShowAddressInfoDialog) } @@ -364,6 +357,7 @@ class TwinsCardsFragment : BaseOnboardingFragment() { tvHeader.setText(R.string.onboarding_topup_title) tvBody.setText(R.string.onboarding_top_up_body) + btnMainAction.icon = null btnRefreshBalanceWidget.changeState(state.walletBalance.state) if (btnRefreshBalanceWidget.isShowing != true) { diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/dialog/TwinningProcessNotCompletedDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/dialog/TwinningProcessNotCompletedDialog.kt index 2a074debb7..60faf916d7 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/dialog/TwinningProcessNotCompletedDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/dialog/TwinningProcessNotCompletedDialog.kt @@ -12,7 +12,7 @@ import com.tangem.wallet.R */ object TwinningProcessNotCompletedDialog { fun create(context: Context): AlertDialog { - return MaterialAlertDialogBuilder(context) + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog) .setMessage(R.string.onboarding_twin_exit_warning) .setPositiveButton(R.string.warning_button_ok) { _, _ -> } .setOnDismissListener { store.dispatchDialogHide() } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/AddMoreBackupCardsDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/AddMoreBackupCardsDialog.kt index f8b2c0bf66..07a64cc81e 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/AddMoreBackupCardsDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/AddMoreBackupCardsDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.onboarding.products.wallet.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.onboarding.products.wallet.redux.BackupAction import com.tangem.tap.store @@ -9,7 +10,7 @@ import com.tangem.wallet.R object AddMoreBackupCardsDialog { fun create(context: Context): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(R.string.common_warning) setMessage(R.string.onboarding_alert_message_not_max_backup_cards_added) setPositiveButton(R.string.common_continue) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/BackupInProgressDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/BackupInProgressDialog.kt index ed4e32a0a4..5094c1f4e9 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/BackupInProgressDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/BackupInProgressDialog.kt @@ -2,13 +2,14 @@ package com.tangem.tap.features.onboarding.products.wallet.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.store import com.tangem.wallet.R object BackupInProgressDialog { fun create(context: Context): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(R.string.common_warning) setMessage(R.string.onboarding_backup_exit_warning) setPositiveButton(R.string.warning_button_ok) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/ConfirmDiscardingBackupDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/ConfirmDiscardingBackupDialog.kt index 557c955bb1..de833bc7f7 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/ConfirmDiscardingBackupDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/ConfirmDiscardingBackupDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.onboarding.products.wallet.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.onboarding.products.wallet.redux.BackupAction import com.tangem.tap.store @@ -9,7 +10,7 @@ import com.tangem.wallet.R object ConfirmDiscardingBackupDialog { fun create(context: Context): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(R.string.welcome_interrupted_backup_discard_title) setMessage(R.string.welcome_interrupted_backup_discard_message) setPositiveButton(R.string.welcome_interrupted_backup_discard_resume) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/InterruptOnboardingDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/InterruptOnboardingDialog.kt index 678c2ca2df..f0249cfcd2 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/InterruptOnboardingDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/InterruptOnboardingDialog.kt @@ -2,7 +2,7 @@ package com.tangem.tap.features.onboarding.products.wallet.ui.dialogs import android.app.Dialog import android.content.Context -import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.extensions.dispatchDialogHide import com.tangem.tap.features.onboarding.OnboardingDialog import com.tangem.tap.store @@ -13,7 +13,7 @@ import com.tangem.wallet.R */ object InterruptOnboardingDialog { fun create(context: Context, dialog: OnboardingDialog.InterruptOnboarding): Dialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(context.getString(R.string.onboarding_exit_alert_title)) setMessage(context.getString(R.string.onboarding_exit_alert_message)) setPositiveButton(R.string.common_ok) { _, _ -> dialog.onOk() } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/ResetBackupCardDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/ResetBackupCardDialog.kt index d2f4d2392a..90458e6f63 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/ResetBackupCardDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/ResetBackupCardDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.onboarding.products.wallet.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.core.analytics.Analytics import com.tangem.tap.common.analytics.events.Onboarding import com.tangem.tap.common.redux.global.GlobalAction @@ -11,7 +12,7 @@ import com.tangem.wallet.R object ResetBackupCardDialog { fun create(context: Context, cardId: String): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(R.string.common_attention) setMessage(R.string.onboarding_linking_error_card_with_wallets) setPositiveButton(R.string.common_cancel) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/UnfinishedBackupFoundDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/UnfinishedBackupFoundDialog.kt index 6576a36fce..c7c4c30450 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/UnfinishedBackupFoundDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/UnfinishedBackupFoundDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.onboarding.products.wallet.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.onboarding.products.wallet.redux.BackupAction import com.tangem.tap.features.onboarding.products.wallet.redux.BackupDialog @@ -10,7 +11,7 @@ import com.tangem.wallet.R object UnfinishedBackupFoundDialog { fun create(context: Context): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(R.string.common_warning) setMessage(R.string.welcome_interrupted_backup_alert_message) setPositiveButton(R.string.welcome_interrupted_backup_alert_resume) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/BriefNetworksList.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/BriefNetworksList.kt index fde1f24f57..4d6738f03d 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/BriefNetworksList.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/BriefNetworksList.kt @@ -82,7 +82,7 @@ internal fun BriefNetworkItem(model: NetworkItemState, modifier: Modifier = Modi .align(Alignment.TopEnd) .size(TangemTheme.dimens.size7) .clip(CircleShape) - .background(TangemTheme.colors.background.secondary), + .background(TangemTheme.colors.background.primary), contentAlignment = Alignment.Center, ) { Box( diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenItem.kt index ee16cd48f8..42577a5372 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenItem.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenItem.kt @@ -43,7 +43,7 @@ internal fun TokenItem(model: TokenItemState) { ConstraintLayout( modifier = Modifier .fillMaxWidth() - .background(color = TangemTheme.colors.background.secondary) + .background(color = TangemTheme.colors.background.primary) .padding(top = TangemTheme.dimens.spacing16), ) { val (icon, title, availableNetworksText) = createRefs() @@ -128,7 +128,7 @@ internal fun TokenItem(model: TokenItemState) { @Composable private fun Icon(name: String, iconUrl: String, onContrastCalculate: (Color) -> Unit, modifier: Modifier = Modifier) { val iconModifier = modifier.size(size = TangemTheme.dimens.size46) - val screenBackgroundColor = TangemTheme.colors.background.secondary.toArgb() + val screenBackgroundColor = TangemTheme.colors.background.primary.toArgb() val isDarkTheme = isSystemInDarkTheme() SubcomposeAsyncImage( diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt index 90dc6274b8..38e5072d84 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt @@ -72,7 +72,7 @@ internal fun TokensListScreen(stateHolder: TokensListStateHolder, modifier: Modi } }, floatingActionButtonPosition = FabPosition.Center, - backgroundColor = TangemTheme.colors.background.secondary, + backgroundColor = TangemTheme.colors.background.primary, ) { scaffoldPadding -> val tokens = stateHolder.tokens.collectAsLazyPagingItems() @@ -100,7 +100,7 @@ private fun LoadingContent() { Box( modifier = Modifier .fillMaxSize() - .background(color = TangemTheme.colors.background.secondary), + .background(color = TangemTheme.colors.background.primary), contentAlignment = Alignment.Center, ) { CircularProgressIndicator(color = TangemTheme.colors.icon.accent) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListToolbar.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListToolbar.kt index e8f857bade..71aba31a33 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListToolbar.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListToolbar.kt @@ -1,5 +1,6 @@ package com.tangem.tap.features.tokens.impl.presentation.ui +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row @@ -7,10 +8,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.Icon -import androidx.compose.material.IconButton -import androidx.compose.material.Text -import androidx.compose.material.TopAppBar +import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi @@ -38,9 +36,14 @@ import kotlinx.coroutines.delay */ @Composable internal fun TokensListToolbar(state: TokensListToolbarState) { + val toolbarElevation = if (isSystemInDarkTheme()) { + TangemTheme.dimens.elevation0 + } else { + AppBarDefaults.TopAppBarElevation + } TopAppBar( backgroundColor = TangemTheme.colors.background.secondary, - elevation = TangemTheme.dimens.elevation0, + elevation = toolbarElevation, ) { IconButton(onClick = state.onBackButtonClick) { Icon( diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt index 6a00cefa48..2324133b75 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt @@ -17,6 +17,7 @@ import com.tangem.domain.tokens.model.Network import com.tangem.feature.swap.presentation.SwapFragment import com.tangem.tap.common.analytics.events.AnalyticsParam import com.tangem.tap.common.analytics.events.Token +import com.tangem.tap.common.apptheme.MutableAppThemeModeHolder import com.tangem.tap.common.extensions.dispatchDebugErrorNotification import com.tangem.tap.common.extensions.dispatchErrorNotification import com.tangem.tap.common.extensions.dispatchOnMain @@ -112,6 +113,7 @@ class TradeCryptoMiddleware { cryptoCurrencyName = currency.currencySymbol, fiatCurrencyName = appCurrency.code, walletAddress = addresses[0].address, + isDarkTheme = MutableAppThemeModeHolder.isDarkThemeActive, )?.let { store.dispatchOpenUrl(it) Analytics.send(Token.Topup.ScreenOpened()) @@ -131,6 +133,7 @@ class TradeCryptoMiddleware { cryptoCurrencyName = currency.symbol, fiatCurrencyName = action.appCurrencyCode, walletAddress = networkAddress, + isDarkTheme = MutableAppThemeModeHolder.isDarkThemeActive, ) if (action.checkUserLocation && state()?.globalState?.userCountryCode == RUSSIA_COUNTRY_CODE) { @@ -193,6 +196,7 @@ class TradeCryptoMiddleware { cryptoCurrencyName = currency.currencySymbol, fiatCurrencyName = appCurrency.code, walletAddress = addresses[0].address, + isDarkTheme = MutableAppThemeModeHolder.isDarkThemeActive, )?.let { store.dispatchOpenUrl(it) Analytics.send(Token.Withdraw.ScreenOpened()) @@ -209,6 +213,7 @@ class TradeCryptoMiddleware { cryptoCurrencyName = currency.symbol, fiatCurrencyName = action.appCurrencyCode, walletAddress = networkAddress, + isDarkTheme = MutableAppThemeModeHolder.isDarkThemeActive, )?.let { store.dispatchOpenUrl(it) Analytics.send(Token.Withdraw.ScreenOpened()) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt index f1081006c2..30d7d0b8e4 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.wallet.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.core.analytics.Analytics import com.tangem.tap.common.analytics.events.IntroductionProcess import com.tangem.tap.common.extensions.dispatchDialogHide @@ -15,7 +16,7 @@ import com.tangem.wallet.R */ object ScanFailsDialog { fun create(context: Context): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(context.getString(R.string.common_warning)) setMessage(R.string.alert_troubleshooting_scan_card_title) setPositiveButton(R.string.alert_button_request_support) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/SignedHashesWarningDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/SignedHashesWarningDialog.kt index c44801d9c8..f4de1c7672 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/SignedHashesWarningDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/SignedHashesWarningDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.wallet.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager import com.tangem.tap.features.wallet.redux.WalletAction @@ -10,7 +11,7 @@ import com.tangem.wallet.R object SignedHashesWarningDialog { fun create(context: Context): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(context.getString(R.string.warning_important_security_info, "\u26A0")) setMessage(R.string.alert_signed_hashes_message) setPositiveButton(R.string.common_understand) { _, _ -> diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/SimpleOkDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/SimpleOkDialog.kt index 8f3a42060f..9abf465eb0 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/SimpleOkDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/SimpleOkDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.wallet.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.common.extensions.dispatchDialogHide import com.tangem.tap.common.redux.AppDialog import com.tangem.tap.store @@ -13,7 +14,7 @@ import com.tangem.wallet.R object SimpleOkDialog { fun create(dialog: AppDialog.SimpleOkDialog, context: Context): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(dialog.header) setMessage(dialog.message) setPositiveButton(R.string.common_ok) { _, _ -> } @@ -60,7 +61,7 @@ object SimpleOkDialog { ) fun create(dialog: AppDialog.OkCancelDialogRes, context: Context): AlertDialog { - return AlertDialog.Builder(context).apply { + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog).apply { setTitle(context.getString(dialog.headerId)) setMessage(dialog.messageId) setPositiveButton(dialog.okButton.title) { _, _ -> dialog.okButton.action?.invoke() } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/CurrencySelectionDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/CurrencySelectionDialog.kt index 835b547e6d..51a29dfdba 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/CurrencySelectionDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/CurrencySelectionDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.wallet.ui.wallet import android.content.Context import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.store @@ -15,7 +16,7 @@ object CurrencySelectionDialog { val currentSelection = dialog.currenciesList .indexOfFirst { it.code == dialog.currentAppCurrency.code } - return AlertDialog.Builder(context) + return MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog) .setTitle(context.getString(R.string.details_row_title_currency)) .setNegativeButton(context.getString(R.string.common_cancel)) { _, _ -> /* no-op */ } .setOnDismissListener { diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/BuyExchangeService.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/BuyExchangeService.kt index 07804272ed..f9d2d16492 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/BuyExchangeService.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/BuyExchangeService.kt @@ -42,8 +42,16 @@ internal class BuyExchangeService( cryptoCurrencyName: String, fiatCurrencyName: String, walletAddress: String, + isDarkTheme: Boolean, ): String? { - return currentService.getUrl(action, blockchain, cryptoCurrencyName, fiatCurrencyName, walletAddress) + return currentService.getUrl( + action, + blockchain, + cryptoCurrencyName, + fiatCurrencyName, + walletAddress, + isDarkTheme, + ) } override fun getSellCryptoReceiptUrl(action: CurrencyExchangeManager.Action, transactionId: String): String? { diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt index ad03f2c04a..037b139a49 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt @@ -50,6 +50,7 @@ class CurrencyExchangeManager( cryptoCurrencyName: CryptoCurrencyName, fiatCurrencyName: String, walletAddress: String, + isDarkTheme: Boolean, ): String? { if (blockchain.isTestnet()) return blockchain.getTestnetTopUpUrl() @@ -60,6 +61,7 @@ class CurrencyExchangeManager( cryptoCurrencyName, fiatCurrencyName, walletAddress, + isDarkTheme, ) } diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/ExchangeService.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/ExchangeService.kt index f38a8c64a1..442a0a6db0 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/ExchangeService.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/ExchangeService.kt @@ -28,6 +28,7 @@ interface ExchangeService : Feature, Exchanger, ExchangeUrlBuilder { cryptoCurrencyName: String, fiatCurrencyName: String, walletAddress: String, + isDarkTheme: Boolean, ): String? = null override fun getSellCryptoReceiptUrl( @@ -52,12 +53,14 @@ interface ExchangeRules : Feature, Exchanger { } interface ExchangeUrlBuilder { + @Suppress("LongParameterList") fun getUrl( action: CurrencyExchangeManager.Action, blockchain: Blockchain, cryptoCurrencyName: String, fiatCurrencyName: String, walletAddress: String, + isDarkTheme: Boolean, ): String? fun getSellCryptoReceiptUrl(action: CurrencyExchangeManager.Action, transactionId: String): String? diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt index 39d09fb0dc..6ded86b438 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt @@ -79,6 +79,7 @@ internal class MercuryoService(private val environment: MercuryoEnvironment) : E cryptoCurrencyName: CryptoCurrencyName, fiatCurrencyName: String, walletAddress: String, + isDarkTheme: Boolean, ): String { if (action == CurrencyExchangeManager.Action.Sell) throw UnsupportedOperationException() @@ -92,6 +93,7 @@ internal class MercuryoService(private val environment: MercuryoEnvironment) : E .appendQueryParameter("signature", signature(walletAddress)) .appendQueryParameter("fix_currency", "true") .appendQueryParameter("return_url", ExchangeUrlBuilder.SUCCESS_URL) + if (isDarkTheme) builder.appendQueryParameter("theme", "1inch") return builder.build().toString() } diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt index 472fd9e6a5..2d4694c975 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt @@ -102,6 +102,7 @@ class MoonPayService( cryptoCurrencyName: CryptoCurrencyName, fatCurrency: String, walletAddress: String, + isDarkTheme: Boolean, ): String { if (action == CurrencyExchangeManager.Action.Buy) throw UnsupportedOperationException() @@ -112,6 +113,7 @@ class MoonPayService( .appendQueryParameter("baseCurrencyCode", cryptoCurrencyName) .appendQueryParameter("refundWalletAddress", walletAddress) .appendQueryParameter("redirectURL", "tangem://sell-request.tangem.com") + if (isDarkTheme) uri.appendQueryParameter("theme", "dark") val originalQuery = uri.build().encodedQuery ?: uri.build().toString() val signature = createSignature(originalQuery) diff --git a/app/src/main/res/layout/dialog_russians_cardholders_warning.xml b/app/src/main/res/layout/dialog_russians_cardholders_warning.xml index ae04b02d83..a666076b95 100644 --- a/app/src/main/res/layout/dialog_russians_cardholders_warning.xml +++ b/app/src/main/res/layout/dialog_russians_cardholders_warning.xml @@ -55,7 +55,7 @@ android:layout_marginEnd="38dp" android:text="@string/russian_bank_card_warning_title" android:textAlignment="center" - android:textColor="@color/textBlack" + android:textColor="@color/text_primary_1" android:textSize="20sp" app:layout_constraintBottom_toTopOf="@id/tv_description" app:layout_constraintEnd_toEndOf="parent" @@ -72,7 +72,7 @@ android:layout_marginBottom="38dp" android:text="@string/russian_bank_card_warning_subtitle" android:textAlignment="center" - android:textColor="@color/textBlack" + android:textColor="@color/text_primary_1" android:textSize="14sp" app:layout_constraintBottom_toTopOf="@id/btn_yes" app:layout_constraintEnd_toEndOf="parent" @@ -87,9 +87,9 @@ android:layout_marginStart="16dp" android:layout_marginEnd="6dp" android:layout_marginBottom="38dp" - android:backgroundTint="@color/tapButtonColorBlack" + android:backgroundTint="@color/button_primary" android:text="@string/common_yes" - android:textColor="@color/white" + android:textColor="@color/text_primary_2" app:cornerRadius="14dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/btn_no" @@ -102,9 +102,9 @@ android:layout_height="wrap_content" android:layout_marginStart="6dp" android:layout_marginEnd="16dp" - android:backgroundTint="@color/buttonGray" + android:backgroundTint="@color/button_secondary" android:text="@string/common_no" - android:textColor="@color/textBlack" + android:textColor="@color/text_primary_1" app:cornerRadius="14dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/btn_yes" diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 34b6f8789f..85b9d8134c 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -172,6 +172,29 @@ + + + + + + + + diff --git a/features/onboarding/src/main/java/com/tangem/feature/onboarding/api/OnboardingSeedPhrase.kt b/features/onboarding/src/main/java/com/tangem/feature/onboarding/api/OnboardingSeedPhrase.kt index 2f6b1d4a0c..75e0acda9f 100644 --- a/features/onboarding/src/main/java/com/tangem/feature/onboarding/api/OnboardingSeedPhrase.kt +++ b/features/onboarding/src/main/java/com/tangem/feature/onboarding/api/OnboardingSeedPhrase.kt @@ -1,6 +1,7 @@ package com.tangem.feature.onboarding.api import androidx.activity.compose.BackHandler +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.* import androidx.compose.material.LinearProgressIndicator import androidx.compose.runtime.Composable @@ -18,7 +19,7 @@ class OnboardingSeedPhrase : OnboardingSeedPhraseApi { @Composable override fun ScreenContent(uiState: OnboardingSeedPhraseState, subScreen: SeedPhraseScreen, progress: Float) { BackHandler(onBack = uiState.onBackClick) - TangemTheme { + TangemTheme(isDark = isSystemInDarkTheme()) { Column { ProgressIndicator(progress) Content(subScreen, uiState) diff --git a/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/ui/AboutSeedPhraseScreen.kt b/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/ui/AboutSeedPhraseScreen.kt index fc583bccc7..51e56a32da 100644 --- a/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/ui/AboutSeedPhraseScreen.kt +++ b/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/ui/AboutSeedPhraseScreen.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Icon import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -135,13 +136,15 @@ private fun ReadMoreBlock(state: AboutState) { vertical = TangemTheme.dimens.size8, ), ) { - Image( + Icon( painter = painterResource(id = R.drawable.ic_arrow_top_right_24), contentDescription = null, + tint = TangemTheme.colors.icon.primary1, ) SpacerW8() Text( text = stringResource(id = R.string.onboarding_seed_button_read_more), + color = TangemTheme.colors.text.primary1, ) } } diff --git a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ReferralFragment.kt b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ReferralFragment.kt index f949764f94..e45014f407 100644 --- a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ReferralFragment.kt +++ b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ReferralFragment.kt @@ -1,5 +1,6 @@ package com.tangem.feature.referral +import android.os.Bundle import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -23,9 +24,13 @@ class ReferralFragment : ComposeFragment() { private val viewModel by viewModels() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + viewModel.setRouter(ReferralRouter(fragmentManager = WeakReference(parentFragmentManager))) + } + @Composable override fun ScreenContent(modifier: Modifier) { - viewModel.setRouter(ReferralRouter(fragmentManager = WeakReference(parentFragmentManager))) viewModel.onScreenOpened() val backgroundColor = TangemTheme.colors.background.secondary diff --git a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ReferralScreen.kt b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ReferralScreen.kt index 6dcec255cf..fd50ed3486 100644 --- a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ReferralScreen.kt +++ b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ReferralScreen.kt @@ -12,8 +12,6 @@ import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.draw.shadow import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity @@ -26,6 +24,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.tangem.core.ui.components.RectangleShimmer import com.tangem.core.ui.components.SpacerH16 import com.tangem.core.ui.components.SpacerH24 import com.tangem.core.ui.components.SpacerH32 @@ -38,7 +37,6 @@ import com.tangem.feature.referral.models.DemoModeException import com.tangem.feature.referral.models.ReferralStateHolder import com.tangem.feature.referral.models.ReferralStateHolder.* import com.tangem.feature.referral.presentation.R -import com.valentinilk.shimmer.shimmer import kotlinx.coroutines.launch /** @@ -338,24 +336,18 @@ private fun ShimmerInfo() { Column( modifier = Modifier .fillMaxWidth() - .padding(top = TangemTheme.dimens.spacing4) - .shimmer(), + .padding(top = TangemTheme.dimens.spacing4), verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing10), ) { - Box( + RectangleShimmer( modifier = Modifier - .clip(RoundedCornerShape(TangemTheme.dimens.radius6)) .width(TangemTheme.dimens.size102) - .height(TangemTheme.dimens.size16) - .background(TangemColorPalette.White), - // .background(Color(0xFFF8F8F8)), + .height(TangemTheme.dimens.size16), ) - Box( + RectangleShimmer( modifier = Modifier - .clip(RoundedCornerShape(TangemTheme.dimens.radius6)) .width(TangemTheme.dimens.size40) - .height(TangemTheme.dimens.size12) - .background(TangemColorPalette.White), + .height(TangemTheme.dimens.size12), ) } } @@ -422,10 +414,9 @@ private fun BoxScope.CopySnackbarHost(isCopyButtonPressed: MutableState Box( modifier = Modifier .onSizeChanged { snackbarSize = it.width } - .background(TangemColorPalette.Black, RoundedCornerShape(size = TangemTheme.dimens.radius8)) - .shadow( - TangemTheme.dimens.elevation3, - RoundedCornerShape(size = TangemTheme.dimens.radius8), + .background( + color = TangemTheme.colors.icon.primary1, + shape = RoundedCornerShape(size = TangemTheme.dimens.radius8), ) .padding( horizontal = TangemTheme.dimens.spacing16, diff --git a/features/swap/presentation/build.gradle.kts b/features/swap/presentation/build.gradle.kts index cd060cd2e8..63f2d6414e 100644 --- a/features/swap/presentation/build.gradle.kts +++ b/features/swap/presentation/build.gradle.kts @@ -32,6 +32,7 @@ dependencies { implementation(deps.compose.ui.tooling) implementation(deps.compose.coil) implementation(deps.compose.constraintLayout) + implementation(deps.compose.accompanist.systemUiController) /** Api */ implementation(projects.features.swap.api) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt index 07ab075e98..5130290638 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt @@ -1,14 +1,14 @@ package com.tangem.feature.swap.presentation import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup import androidx.compose.animation.Crossfade import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.ComposeView -import androidx.fragment.app.Fragment +import androidx.compose.ui.Modifier import androidx.fragment.app.viewModels +import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.screen.ComposeFragment +import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.feature.swap.router.CustomTabsManager import com.tangem.feature.swap.router.SwapNavScreen import com.tangem.feature.swap.router.SwapRouter @@ -18,31 +18,35 @@ import com.tangem.feature.swap.ui.SwapSuccessScreen import com.tangem.feature.swap.viewmodels.SwapViewModel import dagger.hilt.android.AndroidEntryPoint import java.lang.ref.WeakReference +import javax.inject.Inject @AndroidEntryPoint -class SwapFragment : Fragment() { +class SwapFragment : ComposeFragment() { + + @Inject + override lateinit var appThemeModeHolder: AppThemeModeHolder private val viewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) lifecycle.addObserver(viewModel) - } - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { viewModel.setRouter( SwapRouter( fragmentManager = WeakReference(parentFragmentManager), customTabsManager = CustomTabsManager(WeakReference(context)), ), ) + } + + @Composable + override fun ScreenContent(modifier: Modifier) { viewModel.onScreenOpened() - return ComposeView(inflater.context).apply { - setContent { - ScreenContent(viewModel = viewModel) - } - } + val backgroundColor = TangemTheme.colors.background.secondary + SystemBarsEffect { setSystemBarsColor(backgroundColor) } + + ScreenContent(viewModel = viewModel) } @Suppress("TopLevelComposableFunctions") diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreen.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreen.kt index 9c43985c64..a5f8b658ec 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreen.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreen.kt @@ -5,11 +5,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.ExperimentalMaterialApi -import androidx.compose.material.ModalBottomSheetLayout -import androidx.compose.material.ModalBottomSheetState -import androidx.compose.material.ModalBottomSheetValue -import androidx.compose.material.rememberModalBottomSheetState +import androidx.compose.material.* import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.rememberCoroutineScope @@ -38,51 +34,49 @@ internal fun SwapScreen(stateHolder: SwapStateHolder) { }, ) - TangemTheme { - ModalBottomSheetLayout( - modifier = Modifier.systemBarsPadding(), - sheetContent = { - if (stateHolder.permissionState is SwapPermissionState.ReadyForRequest) { - SwapPermissionBottomSheetContent( - data = stateHolder.permissionState, - onCancel = { - hideBottomSheet(coroutineScope, stateHolder, bottomSheetState) - }, - ) - } else { - // Required "else" block to prevent compose crash - // always close BS if its empty, cause user should not see this - LaunchedEffect(Unit) { - coroutineScope.launch { bottomSheetState.hide() } - } - Box(modifier = Modifier.fillMaxSize()) - } - }, - sheetState = bottomSheetState, - sheetShape = RoundedCornerShape( - topStart = TangemTheme.dimens.radius16, - topEnd = TangemTheme.dimens.radius16, - ), - sheetElevation = TangemTheme.dimens.elevation24, - content = { - SwapScreenContent( - state = stateHolder, - onPermissionWarningClick = { - val isBottomSheetReady = !bottomSheetState.isVisible && - stateHolder.permissionState is SwapPermissionState.ReadyForRequest - coroutineScope.launch { - if (isBottomSheetReady) { - bottomSheetState.show() - stateHolder.onShowPermissionBottomSheet.invoke() - } else { - bottomSheetState.hide() - } - } + ModalBottomSheetLayout( + modifier = Modifier.systemBarsPadding(), + sheetContent = { + if (stateHolder.permissionState is SwapPermissionState.ReadyForRequest) { + SwapPermissionBottomSheetContent( + data = stateHolder.permissionState, + onCancel = { + hideBottomSheet(coroutineScope, stateHolder, bottomSheetState) }, ) - }, - ) - } + } else { + // Required "else" block to prevent compose crash + // always close BS if its empty, cause user should not see this + LaunchedEffect(Unit) { + coroutineScope.launch { bottomSheetState.hide() } + } + Box(modifier = Modifier.fillMaxSize()) + } + }, + sheetState = bottomSheetState, + sheetShape = RoundedCornerShape( + topStart = TangemTheme.dimens.radius16, + topEnd = TangemTheme.dimens.radius16, + ), + sheetElevation = TangemTheme.dimens.elevation24, + content = { + SwapScreenContent( + state = stateHolder, + onPermissionWarningClick = { + val isBottomSheetReady = !bottomSheetState.isVisible && + stateHolder.permissionState is SwapPermissionState.ReadyForRequest + coroutineScope.launch { + if (isBottomSheetReady) { + bottomSheetState.show() + stateHolder.onShowPermissionBottomSheet.invoke() + } else { + bottomSheetState.hide() + } + } + }, + ) + }, + ) } @OptIn(ExperimentalMaterialApi::class) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt index c18c6a8889..52deac586f 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt @@ -293,10 +293,11 @@ private fun SwapWarnings(warnings: List) { warning.tokenCurrency, ), icon = { - Image( + Icon( painter = painterResource(id = com.tangem.core.ui.R.drawable.ic_locked_24), contentDescription = null, modifier = Modifier.size(TangemTheme.dimens.size20), + tint = TangemTheme.colors.icon.primary1, ) }, ) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt index ad9b5d8d2c..eb086a8df4 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt @@ -8,7 +8,6 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.Divider import androidx.compose.material.Scaffold import androidx.compose.material.Text @@ -24,6 +23,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import coil.compose.SubcomposeAsyncImage import coil.request.ImageRequest +import com.tangem.core.ui.components.CircleShimmer import com.tangem.core.ui.components.CurrencyPlaceholderIcon import com.tangem.core.ui.components.SpacerW2 import com.tangem.core.ui.components.appbar.ExpandableSearchView @@ -34,7 +34,6 @@ import com.tangem.feature.swap.models.SwapSelectTokenStateHolder import com.tangem.feature.swap.models.TokenBalanceData import com.tangem.feature.swap.models.TokenToSelect import com.tangem.feature.swap.presentation.R -import com.valentinilk.shimmer.shimmer @Composable fun SwapSelectTokenScreen( @@ -42,28 +41,26 @@ fun SwapSelectTokenScreen( onSearchFocusChange: (Boolean) -> Unit, onBack: () -> Unit, ) { - TangemTheme { - Scaffold( - modifier = Modifier - .systemBarsPadding() - .background(color = TangemTheme.colors.background.secondary), - content = { padding -> - ListOfTokens(state = state, Modifier.padding(padding)) - }, - topBar = { - ExpandableSearchView( - title = stringResource(R.string.swapping_token_list_title), - onBackClick = onBack, - placeholderSearchText = stringResource(id = R.string.common_search_tokens), - onSearchChange = state.onSearchEntered, - onSearchDisplayClose = { state.onSearchEntered("") }, - onFocusChange = onSearchFocusChange, - subtitle = state.network.name, - icon = painterResource(id = getActiveIconRes(state.network.blockchainId)), - ) - }, - ) - } + Scaffold( + modifier = Modifier + .systemBarsPadding() + .background(color = TangemTheme.colors.background.secondary), + content = { padding -> + ListOfTokens(state = state, Modifier.padding(padding)) + }, + topBar = { + ExpandableSearchView( + title = stringResource(R.string.swapping_token_list_title), + onBackClick = onBack, + placeholderSearchText = stringResource(id = R.string.common_search_tokens), + onSearchChange = state.onSearchEntered, + onSearchDisplayClose = { state.onSearchEntered("") }, + onFocusChange = onSearchFocusChange, + subtitle = state.network.name, + icon = painterResource(id = getActiveIconRes(state.network.blockchainId)), + ) + }, + ) } @OptIn(ExperimentalFoundationApi::class) @@ -213,7 +210,7 @@ private fun TokenIcon(token: TokenToSelect, @DrawableRes iconPlaceholder: Int?) .crossfade(true) .build(), contentDescription = token.id, - loading = { TokenImageShimmer(modifier = iconModifier) }, + loading = { CircleShimmer(modifier = iconModifier) }, error = { CurrencyPlaceholderIcon(modifier = iconModifier, id = token.id) }, alpha = if (!token.available) 0.7f else 1f, colorFilter = colorFilter, @@ -221,20 +218,6 @@ private fun TokenIcon(token: TokenToSelect, @DrawableRes iconPlaceholder: Int?) } } -@Composable -private fun TokenImageShimmer(modifier: Modifier = Modifier) { - Box(modifier = modifier.shimmer()) { - Box( - modifier = Modifier - .matchParentSize() - .background( - color = TangemTheme.colors.button.secondary, - shape = CircleShape, - ), - ) - } -} - private val token = TokenToSelect( id = "", name = "USDC", diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSuccessScreen.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSuccessScreen.kt index 2d6f3e52b4..a05fbdb29b 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSuccessScreen.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSuccessScreen.kt @@ -18,34 +18,32 @@ import com.tangem.feature.swap.presentation.R @Composable fun SwapSuccessScreen(state: SwapSuccessStateHolder, onBack: () -> Unit) { - TangemTheme { - Scaffold( - modifier = Modifier.systemBarsPadding(), - content = { padding -> - ResultScreenContent( - resultMessage = makeSuccessMessage( - fromTokenAmount = state.fromTokenAmount, - toTokenAmount = state.toTokenAmount, - ), - resultColor = TangemTheme.colors.icon.attention, - onButtonClick = onBack, - icon = R.drawable.ic_clock_24, - secondaryButtonIcon = R.drawable.ic_arrow_top_right_24, - onSecondaryButtonClick = state.onSecondaryButtonClick, - secondaryButtonText = R.string.swapping_success_view_explorer_button_title, - title = R.string.swapping_success_view_title, - modifier = Modifier.padding(padding), - ) - }, - topBar = { - AppBarWithBackButton( - text = stringResource(R.string.common_swap), - onBackClick = onBack, - iconRes = R.drawable.ic_close_24, - ) - }, - ) - } + Scaffold( + modifier = Modifier.systemBarsPadding(), + content = { padding -> + ResultScreenContent( + resultMessage = makeSuccessMessage( + fromTokenAmount = state.fromTokenAmount, + toTokenAmount = state.toTokenAmount, + ), + resultColor = TangemTheme.colors.icon.attention, + onButtonClick = onBack, + icon = R.drawable.ic_clock_24, + secondaryButtonIcon = R.drawable.ic_arrow_top_right_24, + onSecondaryButtonClick = state.onSecondaryButtonClick, + secondaryButtonText = R.string.swapping_success_view_explorer_button_title, + title = R.string.swapping_success_view_title, + modifier = Modifier.padding(padding), + ) + }, + topBar = { + AppBarWithBackButton( + text = stringResource(R.string.common_swap), + onBackClick = onBack, + iconRes = R.drawable.ic_close_24, + ) + }, + ) } @Composable diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt index 761a8f9448..be8d01441a 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt @@ -5,18 +5,7 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.defaultMinSize -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.Card @@ -43,16 +32,10 @@ import androidx.compose.ui.unit.sp import coil.compose.SubcomposeAsyncImage import coil.request.ImageRequest import com.tangem.core.ui.R -import com.tangem.core.ui.components.FontSizeRange -import com.tangem.core.ui.components.ResizableText -import com.tangem.core.ui.components.SpacerH4 -import com.tangem.core.ui.components.SpacerH8 -import com.tangem.core.ui.components.SpacerW16 -import com.tangem.core.ui.components.SpacerW4 +import com.tangem.core.ui.components.* import com.tangem.core.ui.res.TangemTheme import com.tangem.feature.swap.models.SwapWarning import com.tangem.feature.swap.models.TransactionCardType -import com.valentinilk.shimmer.shimmer @Suppress("LongParameterList") @Composable @@ -156,14 +139,11 @@ private fun Header(type: TransactionCardType, balance: String, modifier: Modifie .padding(top = TangemTheme.dimens.spacing2), ) } else { - Box( + RectangleShimmer( modifier = Modifier - .size(width = TangemTheme.dimens.size80, height = TangemTheme.dimens.size12) - .shimmer() - .background( - color = TangemTheme.colors.button.secondary, - shape = RoundedCornerShape(TangemTheme.dimens.radius3), - ), + .width(TangemTheme.dimens.size80) + .height(TangemTheme.dimens.size12), + radius = TangemTheme.dimens.radius3, ) } } @@ -206,15 +186,11 @@ private fun Content( modifier = sumTextModifier, ) } else { - Box( + RectangleShimmer( modifier = Modifier .padding(vertical = TangemTheme.dimens.spacing4) - .size(width = TangemTheme.dimens.size102, height = TangemTheme.dimens.size24) - .shimmer() - .background( - color = TangemTheme.colors.button.secondary, - shape = RoundedCornerShape(TangemTheme.dimens.radius6), - ), + .width(TangemTheme.dimens.size102) + .height(TangemTheme.dimens.size24), ) } } @@ -260,15 +236,12 @@ private fun Content( ) } } else { - Box( + RectangleShimmer( modifier = Modifier .padding(vertical = TangemTheme.dimens.spacing4) - .size(width = TangemTheme.dimens.size40, height = TangemTheme.dimens.size12) - .shimmer() - .background( - color = TangemTheme.colors.button.secondary, - shape = RoundedCornerShape(TangemTheme.dimens.radius3), - ), + .width(TangemTheme.dimens.size40) + .height(TangemTheme.dimens.size12), + radius = TangemTheme.dimens.radius3, ) } } @@ -310,8 +283,7 @@ fun Token( .data(data) .crossfade(true) .build(), - loading = { TokenImageShimmer(modifier = tokenImageModifier) }, - // error = { CurrencyPlaceholderIcon(modifier = tokenImageModifier, tokenCurrency) }, + loading = { CircleShimmer(modifier = tokenImageModifier) }, contentDescription = tokenCurrency, ) @@ -378,20 +350,6 @@ private fun makePriceImpactBalanceWarning(value: String, priceImpactPercents: In } } -@Composable -private fun TokenImageShimmer(modifier: Modifier = Modifier) { - Box(modifier = modifier.shimmer()) { - Box( - modifier = Modifier - .matchParentSize() - .background( - color = TangemTheme.colors.button.secondary, - shape = CircleShape, - ), - ) - } -} - // region preview @Preview(widthDp = 328, heightDp = 116, showBackground = true)