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:
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,