1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-1472 Onboarding | Fix | Avoid inconsistent state in navigation when pressing "Back" button twice when returning back from keychain-phrase-login screen (#173)

This commit is contained in:
Evgenii Kozlov 2023-07-11 22:39:42 +02:00 committed by uburoiubu
parent 83d2e6237f
commit c2a9d50f14
No known key found for this signature in database
GPG key ID: C8FB80E0A595FBB6
2 changed files with 11 additions and 6 deletions

View file

@ -350,7 +350,7 @@ class OnboardingFragment : Fragment() {
state = Lifecycle.State.DESTROYED
)
val vm = daggerViewModel { component.get().getViewModel() }
val openDialog = remember { mutableStateOf(false) }
val isQrWarningDialogVisible = remember { mutableStateOf(false) }
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult()
@ -364,13 +364,17 @@ class OnboardingFragment : Fragment() {
RecoveryScreenWrapper(
vm = vm,
onBackClicked = vm::onBackButtonPressed,
onScanQrClick = { openDialog.value = true },
onScanQrClick = { isQrWarningDialogVisible.value = true },
)
LaunchedEffect(Unit) {
vm.sideEffects.collect { effect ->
when(effect) {
is OnboardingMnemonicLoginViewModel.SideEffect.Exit -> {
navController.popBackStack()
val lastDestination = navController.backQueue.lastOrNull()
// TODO Temporary workaround to prevent inconsistent state in navigation
if (lastDestination?.destination?.route == OnboardingNavigation.recovery) {
navController.popBackStack()
}
}
is OnboardingMnemonicLoginViewModel.SideEffect.ProceedWithLogin -> {
navController.navigate(OnboardingNavigation.enterTheVoid)
@ -381,15 +385,15 @@ class OnboardingFragment : Fragment() {
}
}
}
if (openDialog.value) {
if (isQrWarningDialogVisible.value) {
BaseAlertDialog(
dialogText = stringResource(id = R.string.alert_qr_camera),
buttonText = stringResource(id = R.string.alert_qr_camera_ok),
onButtonClick = {
openDialog.value = false
isQrWarningDialogVisible.value = false
proceedWithQrCodeActivity(launcher)
},
onDismissRequest = { openDialog.value = false }
onDismissRequest = { isQrWarningDialogVisible.value = false }
)
}
}

View file

@ -43,6 +43,7 @@ class OnboardingMnemonicLoginViewModel @Inject constructor(
}
fun onBackButtonPressed() {
Timber.d("onBackButtonPressed")
viewModelScope.launch {
sideEffects.emit(SideEffect.Exit)
}