Skip to content

Commit c2ca123

Browse files
committed
refactor: Handle authCheck onSuccess before back nav
1 parent f70fe07 commit c2ca123

File tree

4 files changed

+25
-40
lines changed

4 files changed

+25
-40
lines changed

app/src/main/java/to/bitkit/ui/ContentView.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -478,10 +478,9 @@ private fun NavGraphBuilder.generalSettings(navController: NavHostController) {
478478
}
479479

480480
private fun NavGraphBuilder.securitySettings(navController: NavHostController) {
481-
composableWithDefaultTransitions<Routes.SecuritySettings> { backStackEntry ->
481+
composableWithDefaultTransitions<Routes.SecuritySettings> {
482482
SecuritySettingsScreen(
483483
navController = navController,
484-
savedStateHandle = backStackEntry.savedStateHandle,
485484
)
486485
}
487486
}
Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package to.bitkit.ui.components
22

33
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.getValue
5+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
46
import androidx.navigation.NavController
57
import to.bitkit.ui.Routes
68
import to.bitkit.ui.appViewModel
@@ -12,27 +14,36 @@ fun AuthCheckScreen(
1214
) {
1315
val app = appViewModel ?: return
1416

17+
val isPinOnLaunchEnabled by app.isPinOnLaunchEnabled.collectAsStateWithLifecycle()
18+
val isBiometricEnabled by app.isBiometricEnabled.collectAsStateWithLifecycle()
19+
1520
AuthCheckView(
1621
showLogoOnPin = route.showLogoOnPin,
1722
appViewModel = app,
1823
requireBiometrics = route.requireBiometrics,
1924
requirePin = route.requirePin,
2025
onSuccess = {
21-
navController.previousBackStackEntry
22-
?.savedStateHandle
23-
?.set(AuthCheckAction.KEY, route.onSuccessActionId)
26+
when (route.onSuccessActionId) {
27+
AuthCheckAction.TOGGLE_BIOMETRICS -> {
28+
app.setIsBiometricEnabled(!isBiometricEnabled)
29+
}
30+
31+
AuthCheckAction.TOGGLE_PIN_ON_LAUNCH -> {
32+
app.setIsPinOnLaunchEnabled(!isPinOnLaunchEnabled)
33+
}
34+
35+
AuthCheckAction.DISABLE_PIN -> {
36+
app.removePin()
37+
}
38+
}
2439

2540
navController.popBackStack()
2641
},
2742
)
2843
}
2944

3045
object AuthCheckAction {
31-
const val KEY = "auth_check_action_key"
32-
33-
object Id {
34-
const val TOGGLE_PIN_ON_LAUNCH = "toggle_pin_on_launch"
35-
const val TOGGLE_BIOMETRICS = "toggle_biometrics"
36-
const val DISABLE_PIN = "disable_pin"
37-
}
46+
const val TOGGLE_PIN_ON_LAUNCH = "toggle_pin_on_launch"
47+
const val TOGGLE_BIOMETRICS = "toggle_biometrics"
48+
const val DISABLE_PIN = "disable_pin"
3849
}

app/src/main/java/to/bitkit/ui/settings/SecuritySettingsScreen.kt

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import androidx.compose.foundation.layout.padding
55
import androidx.compose.foundation.rememberScrollState
66
import androidx.compose.foundation.verticalScroll
77
import androidx.compose.runtime.Composable
8-
import androidx.compose.runtime.LaunchedEffect
98
import androidx.compose.runtime.getValue
109
import androidx.compose.runtime.mutableStateOf
1110
import androidx.compose.runtime.remember
@@ -14,10 +13,8 @@ import androidx.compose.ui.Modifier
1413
import androidx.compose.ui.res.stringResource
1514
import androidx.compose.ui.tooling.preview.Preview
1615
import androidx.compose.ui.unit.dp
17-
import androidx.lifecycle.SavedStateHandle
1816
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1917
import androidx.navigation.NavController
20-
import kotlinx.coroutines.flow.filterNotNull
2118
import to.bitkit.R
2219
import to.bitkit.ui.appViewModel
2320
import to.bitkit.ui.components.AuthCheckAction
@@ -38,7 +35,6 @@ import to.bitkit.ui.utils.rememberBiometricAuthSupported
3835
@Composable
3936
fun SecuritySettingsScreen(
4037
navController: NavController,
41-
savedStateHandle: SavedStateHandle,
4238
) {
4339
val app = appViewModel ?: return
4440

@@ -47,27 +43,6 @@ fun SecuritySettingsScreen(
4743
val isPinOnLaunchEnabled by app.isPinOnLaunchEnabled.collectAsStateWithLifecycle()
4844
val isBiometricEnabled by app.isBiometricEnabled.collectAsStateWithLifecycle()
4945

50-
LaunchedEffect(savedStateHandle) {
51-
savedStateHandle.getStateFlow<String?>(AuthCheckAction.KEY, null)
52-
.filterNotNull()
53-
.collect { actionId ->
54-
when (actionId) {
55-
AuthCheckAction.Id.TOGGLE_BIOMETRICS -> {
56-
app.setIsBiometricEnabled(!isBiometricEnabled)
57-
}
58-
59-
AuthCheckAction.Id.TOGGLE_PIN_ON_LAUNCH -> {
60-
app.setIsPinOnLaunchEnabled(!isPinOnLaunchEnabled)
61-
}
62-
63-
AuthCheckAction.Id.DISABLE_PIN -> {
64-
app.removePin()
65-
}
66-
}
67-
savedStateHandle.remove<String>(AuthCheckAction.KEY)
68-
}
69-
}
70-
7146
PinNavigationSheet(
7247
showSheet = showPinSheet,
7348
showLaterButton = false,
@@ -87,13 +62,13 @@ fun SecuritySettingsScreen(
8762
},
8863
onPinOnLaunchClick = {
8964
navController.navigateToAuthCheck(
90-
onSuccessActionId = AuthCheckAction.Id.TOGGLE_PIN_ON_LAUNCH,
65+
onSuccessActionId = AuthCheckAction.TOGGLE_PIN_ON_LAUNCH,
9166
)
9267
},
9368
onUseBiometricsClick = {
9469
navController.navigateToAuthCheck(
9570
requireBiometrics = true,
96-
onSuccessActionId = AuthCheckAction.Id.TOGGLE_BIOMETRICS,
71+
onSuccessActionId = AuthCheckAction.TOGGLE_BIOMETRICS,
9772
)
9873
},
9974
onBackClick = { navController.popBackStack() },

app/src/main/java/to/bitkit/ui/settings/pin/DisablePinScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ fun DisablePinScreen(
3838
onDisableClick = {
3939
navController.navigateToAuthCheck(
4040
requirePin = true,
41-
onSuccessActionId = AuthCheckAction.Id.DISABLE_PIN,
41+
onSuccessActionId = AuthCheckAction.DISABLE_PIN,
4242
navOptions = navOptions { popUpTo(Routes.SecuritySettings) },
4343
)
4444
},

0 commit comments

Comments
 (0)