From 6004b030a7a9946cffef45b00fd9470c7ee64a1f Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 29 Aug 2023 17:28:04 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../presentation/common/WalletPreviewData.kt | 1 + .../router/DefaultWalletRouter.kt | 8 ++++ .../presentation/router/InnerWalletRouter.kt | 6 +++ .../wallet/state/WalletMultiCurrencyState.kt | 1 + .../factory/WalletSkeletonStateConverter.kt | 1 + .../presentation/wallet/ui/WalletScreen.kt | 40 ++++++++++++++++--- .../wallet/viewmodels/WalletClickIntents.kt | 2 + .../wallet/viewmodels/WalletViewModel.kt | 4 ++ 8 files changed, 57 insertions(+), 6 deletions(-) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt index 3166b376ec..60f3ec11ff 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt @@ -356,6 +356,7 @@ internal object WalletPreviewData { ), bottomSheetConfig = bottomSheet, tokenActionsBottomSheet = actionsBottomSheet, + onManageTokensClick = {}, ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt index d5b55532ef..ceaeead504 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt @@ -117,12 +117,20 @@ internal class DefaultWalletRouter(private val reduxNavController: ReduxNavContr ) } + override fun openStoriesScreen() { + reduxNavController.navigate(action = NavigationAction.NavigateTo(screen = AppScreen.Home)) + } + override fun openSaveUserWalletScreen() { reduxNavController.navigate(action = NavigationAction.NavigateTo(AppScreen.SaveWallet)) } override fun isWalletLastScreen(): Boolean = reduxNavController.getBackStack().lastOrNull() == AppScreen.Wallet + override fun openManageTokensScreen() { + reduxNavController.navigate(action = NavigationAction.NavigateTo(AppScreen.AddTokens)) + } + private companion object { const val BACKSTACK_ENTRY_COUNT_TO_CLOSE_WALLET_SCREEN = 2 } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt index 71a7c8bf17..b5b2ff23e1 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt @@ -46,9 +46,15 @@ internal interface InnerWalletRouter : WalletRouter { /** Open token details screen */ fun openTokenDetails(currency: CryptoCurrency) + /** Open stories screen */ + fun openStoriesScreen() + /** Open save user wallet screen */ fun openSaveUserWalletScreen() /** Is wallet last screen */ fun isWalletLastScreen(): Boolean + + /** Open manage tokens screen */ + fun openManageTokensScreen() } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/WalletMultiCurrencyState.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/WalletMultiCurrencyState.kt index def8561d02..d22b1b6db6 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/WalletMultiCurrencyState.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/WalletMultiCurrencyState.kt @@ -23,6 +23,7 @@ internal sealed class WalletMultiCurrencyState : WalletState.ContentState() { override val bottomSheetConfig: WalletBottomSheetConfig?, override val tokensListState: WalletTokensListState, val tokenActionsBottomSheet: ActionsBottomSheetConfig?, + val onManageTokensClick: () -> Unit, ) : WalletMultiCurrencyState() data class Locked( diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/WalletSkeletonStateConverter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/WalletSkeletonStateConverter.kt index 6b5fcc5d49..15e42f3283 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/WalletSkeletonStateConverter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/WalletSkeletonStateConverter.kt @@ -52,6 +52,7 @@ internal class WalletSkeletonStateConverter( notifications = persistentListOf(), bottomSheetConfig = null, tokenActionsBottomSheet = null, + onManageTokensClick = clickIntents::onManageTokensClick, ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt index fa7dc84810..fca76604c4 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt @@ -12,12 +12,15 @@ import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import androidx.paging.compose.collectAsLazyPagingItems +import com.tangem.core.ui.components.PrimaryButton import com.tangem.core.ui.components.transactions.state.TxHistoryState import com.tangem.core.ui.res.TangemTheme +import com.tangem.feature.wallet.impl.R import com.tangem.feature.wallet.presentation.common.WalletPreviewData import com.tangem.feature.wallet.presentation.wallet.state.WalletMultiCurrencyState import com.tangem.feature.wallet.presentation.wallet.state.WalletSingleCurrencyState @@ -53,11 +56,7 @@ internal fun WalletScreen(state: WalletState) { private fun WalletContent(state: WalletState.ContentState) { val walletsListState = rememberLazyListState() - Scaffold( - topBar = { WalletTopBar(config = state.topBarConfig) }, - containerColor = TangemTheme.colors.background.secondary, - ) { scaffoldPaddings -> - + BaseScaffold(state = state) { scaffoldPaddings -> val movableItemModifier = Modifier.changeWalletAnimator(walletsListState) val pullRefreshState = rememberPullRefreshState( refreshing = state.pullToRefreshConfig.isRefreshing, @@ -85,7 +84,10 @@ private fun WalletContent(state: WalletState.ContentState) { LazyColumn( modifier = Modifier.fillMaxSize(), - contentPadding = PaddingValues(vertical = TangemTheme.dimens.spacing8), + contentPadding = PaddingValues( + top = TangemTheme.dimens.spacing8, + bottom = TangemTheme.dimens.spacing92, + ), horizontalAlignment = Alignment.CenterHorizontally, ) { item { @@ -128,6 +130,32 @@ private fun WalletContent(state: WalletState.ContentState) { WalletSideEffects(lazyListState = walletsListState, walletsListConfig = state.walletsListConfig) } +@Composable +private fun BaseScaffold(state: WalletState.ContentState, content: @Composable (PaddingValues) -> Unit) { + Scaffold( + topBar = { WalletTopBar(config = state.topBarConfig) }, + floatingActionButton = { + if (state is WalletMultiCurrencyState.Content) { + ManageTokensButton(onManageTokensClick = state.onManageTokensClick) + } + }, + floatingActionButtonPosition = FabPosition.Center, + containerColor = TangemTheme.colors.background.secondary, + content = content, + ) +} + +@Composable +private fun ManageTokensButton(onManageTokensClick: () -> Unit) { + PrimaryButton( + text = stringResource(id = R.string.main_manage_tokens), + onClick = onManageTokensClick, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = TangemTheme.dimens.spacing16), + ) +} + @Composable private fun WalletBottomSheets(state: WalletState) { val bottomSheetConfig = (state as? WalletState.ContentState)?.bottomSheetConfig diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt index ee7ed4346d..c3ba714c76 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt @@ -52,4 +52,6 @@ internal interface WalletClickIntents : TxHistoryClickIntents { fun onReceiveClick() fun onSellClick() + + fun onManageTokensClick() } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt index 2633a939df..cbeb3bc707 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt @@ -479,6 +479,10 @@ internal class WalletViewModel @Inject constructor( ) } + override fun onManageTokensClick() { + router.openManageTokensScreen() + } + override fun onReloadClick() { uiState = stateFactory.getStateAfterContentRefreshing() updateSingleCurrencyContent(