taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit e40d0e9b3df5645309eadb70fc9551cc3812c350
parent ce6af48da61c263175b94e7910b131afac2d6eb4
Author: Iván Ávalos <avalos@disroot.org>
Date:   Wed, 29 Apr 2026 12:31:55 +0200

[wallet] bottom sheet smoother animation

Diffstat:
Mwallet/src/main/java/net/taler/wallet/main/MainScreen.kt | 24+++++++++++-------------
Mwallet/src/main/java/net/taler/wallet/main/TalerActionButton.kt | 6+++---
2 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/main/MainScreen.kt b/wallet/src/main/java/net/taler/wallet/main/MainScreen.kt @@ -92,6 +92,7 @@ fun MainScreen( ) { var tab by rememberSaveable { mutableStateOf(MainTab.ASSETS) } var showUriInput by remember { mutableStateOf(false) } + var showSheet by rememberSaveable { mutableStateOf(false) } val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } @@ -188,7 +189,7 @@ fun MainScreen( TalerActionButton( demandAttention = !actionButtonUsed, onShowSheet = { - scope.launch { sheetState.expand() } + showSheet = true }, onScanQr = { model.settingsManager.saveActionButtonUsed(context) @@ -340,51 +341,48 @@ fun MainScreen( } TalerActionsModal( + showSheet = showSheet, sheetState = sheetState, selectedCurrency = selectedBalance?.currency, showShopping = selectedBalance?.shoppingUrls?.isNotEmpty() == true, onDismiss = { - scope.launch { sheetState.hide() }.invokeOnCompletion { - if (!sheetState.isVisible) { - scope.launch { sheetState.hide() } - } - } + showSheet = false }, disableActions = disableActions, disablePeer = selectedBalance?.disablePeerPayments == true, onSend = { - scope.launch { sheetState.hide() } + showSheet = false model.settingsManager.saveActionButtonUsed(context) onNavigate(WalletDestination.OutgoingPush, true) }, onReceive = { - scope.launch { sheetState.hide() } + showSheet = false model.settingsManager.saveActionButtonUsed(context) onNavigate(WalletDestination.OutgoingPull, true) }, onScanQr = { - scope.launch { sheetState.hide() } + showSheet = false model.settingsManager.saveActionButtonUsed(context) onScanQr() }, onDeposit = { - scope.launch { sheetState.hide() } + showSheet = false model.settingsManager.saveActionButtonUsed(context) onNavigate(WalletDestination.Deposit(), true) }, onWithdraw = { - scope.launch { sheetState.hide() } + showSheet = false model.settingsManager.saveActionButtonUsed(context) model.withdrawManager.resetWithdrawal() onNavigate(WalletDestination.PromptWithdraw(), true) }, onEnterUri = { - scope.launch { sheetState.hide() } + showSheet = false model.settingsManager.saveActionButtonUsed(context) showUriInput = true }, onShoppingDiscovery = { - scope.launch { sheetState.hide() } + showSheet = false model.settingsManager.saveActionButtonUsed(context) val shoppingUrls = selectedBalance?.shoppingUrls ?: emptyList() if (shoppingUrls.size == 1) { diff --git a/wallet/src/main/java/net/taler/wallet/main/TalerActionButton.kt b/wallet/src/main/java/net/taler/wallet/main/TalerActionButton.kt @@ -33,11 +33,9 @@ import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.LocationOn -import androidx.compose.material3.Card import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.LargeFloatingActionButton -import androidx.compose.material3.ListItem import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.PlainTooltip import androidx.compose.material3.SheetState @@ -135,6 +133,7 @@ fun TalerActionButton( @OptIn(ExperimentalMaterial3Api::class) @Composable fun TalerActionsModal( + showSheet: Boolean, sheetState: SheetState, selectedCurrency: String? = null, showShopping: Boolean, @@ -149,7 +148,7 @@ fun TalerActionsModal( onEnterUri: () -> Unit, onShoppingDiscovery: () -> Unit, ) { - if (sheetState.isVisible) ModalBottomSheet( + if (showSheet) ModalBottomSheet( onDismissRequest = onDismiss, sheetState = sheetState, ) { @@ -234,6 +233,7 @@ fun TalerActionsModal( fun TalerActionsModalPreview() { TalerSurface { TalerActionsModal( + showSheet = true, sheetState = rememberModalBottomSheetState(), selectedCurrency = "CHF", showShopping = true,