Skip to content

Commit 989602d

Browse files
committed
fix: detect when the sheet is dismissed by swipe down
1 parent 63897cf commit 989602d

File tree

2 files changed

+37
-12
lines changed

2 files changed

+37
-12
lines changed

app/src/main/java/to/bitkit/ui/nav/SheetSceneStrategy.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ import androidx.compose.material3.rememberModalBottomSheetState
1717
import androidx.compose.runtime.Composable
1818
import androidx.compose.runtime.LaunchedEffect
1919
import androidx.compose.runtime.getValue
20+
import androidx.compose.runtime.mutableStateOf
21+
import androidx.compose.runtime.remember
2022
import androidx.compose.runtime.rememberCoroutineScope
23+
import androidx.compose.runtime.setValue
24+
import androidx.compose.runtime.snapshotFlow
2125
import androidx.compose.ui.Modifier
2226
import androidx.compose.ui.graphics.Color
2327
import androidx.compose.ui.unit.dp
@@ -26,6 +30,7 @@ import androidx.navigation3.scene.OverlayScene
2630
import androidx.navigation3.scene.Scene
2731
import androidx.navigation3.scene.SceneStrategy
2832
import androidx.navigation3.scene.SceneStrategyScope
33+
import kotlinx.coroutines.flow.drop
2934
import kotlinx.coroutines.launch
3035
import to.bitkit.ui.components.SheetDragHandle
3136
import to.bitkit.ui.components.SheetSize
@@ -87,8 +92,21 @@ internal class BitKitSheetScene<T : Any>(
8792
bottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
8893
)
8994

95+
var isInitialExpansion by remember { mutableStateOf(true) }
96+
9097
LaunchedEffect(Unit) {
9198
scaffoldState.bottomSheetState.expand()
99+
isInitialExpansion = false
100+
}
101+
102+
LaunchedEffect(scaffoldState.bottomSheetState) {
103+
snapshotFlow { scaffoldState.bottomSheetState.currentValue }
104+
.drop(1)
105+
.collect { value: SheetValue ->
106+
if (!isInitialExpansion && value == SheetValue.Hidden) {
107+
onBack()
108+
}
109+
}
92110
}
93111

94112
Box(modifier = Modifier.fillMaxSize()) {

app/src/main/java/to/bitkit/ui/nav/entries/SheetEntries.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package to.bitkit.ui.nav.entries
33
import android.content.Intent
44
import androidx.compose.foundation.layout.fillMaxSize
55
import androidx.compose.foundation.layout.navigationBarsPadding
6+
import androidx.compose.runtime.DisposableEffect
67
import androidx.compose.runtime.LaunchedEffect
78
import androidx.compose.runtime.getValue
89
import androidx.compose.runtime.remember
@@ -833,30 +834,33 @@ private fun EntryProviderScope<NavKey>.timedSheetEntries(
833834
entry<Routes.TimedUpdateSheet>(
834835
metadata = SheetSceneStrategy.sheet()
835836
) {
837+
DisposableEffect(Unit) {
838+
onDispose { appViewModel.dismissTimedSheet() }
839+
}
836840
UpdateSheet(
837-
onCancel = {
838-
appViewModel.dismissTimedSheet()
839-
navigator.goBack()
840-
},
841+
onCancel = { navigator.goBack() },
841842
)
842843
}
843844

844845
entry<Routes.TimedBackupSheet>(
845846
metadata = SheetSceneStrategy.sheet()
846847
) {
848+
DisposableEffect(Unit) {
849+
onDispose { appViewModel.dismissTimedSheet() }
850+
}
847851
BackupIntroScreen(
848852
hasFunds = LocalBalances.current.totalSats > 0u,
849-
onClose = {
850-
appViewModel.dismissTimedSheet()
851-
navigator.goBack()
852-
},
853+
onClose = { navigator.goBack() },
853854
onConfirm = { navigator.navigate(Routes.BackupShowMnemonic) },
854855
)
855856
}
856857

857858
entry<Routes.TimedNotificationsSheet>(
858859
metadata = SheetSceneStrategy.sheet()
859860
) {
861+
DisposableEffect(Unit) {
862+
onDispose { appViewModel.dismissTimedSheet() }
863+
}
860864
BackgroundPaymentsIntroSheet(
861865
onContinue = {
862866
appViewModel.dismissTimedSheet(skipQueue = true)
@@ -868,6 +872,9 @@ private fun EntryProviderScope<NavKey>.timedSheetEntries(
868872
entry<Routes.TimedQuickPaySheet>(
869873
metadata = SheetSceneStrategy.sheet()
870874
) {
875+
DisposableEffect(Unit) {
876+
onDispose { appViewModel.dismissTimedSheet() }
877+
}
871878
QuickPayIntroSheet(
872879
onContinue = {
873880
appViewModel.dismissTimedSheet(skipQueue = true)
@@ -879,12 +886,12 @@ private fun EntryProviderScope<NavKey>.timedSheetEntries(
879886
entry<Routes.TimedHighBalanceSheet>(
880887
metadata = SheetSceneStrategy.sheet()
881888
) {
889+
DisposableEffect(Unit) {
890+
onDispose { appViewModel.dismissTimedSheet() }
891+
}
882892
val context = LocalContext.current
883893
HighBalanceWarningSheet(
884-
understoodClick = {
885-
appViewModel.dismissTimedSheet()
886-
navigator.goBack()
887-
},
894+
understoodClick = { navigator.goBack() },
888895
learnMoreClick = {
889896
val intent = Intent(Intent.ACTION_VIEW, Env.STORING_BITCOINS_URL.toUri())
890897
context.startActivity(intent)

0 commit comments

Comments
 (0)