From 16a732171ac689f65d9ea86fc42c7fa82b8bbe81 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Wed, 7 Aug 2024 11:48:38 -0300 Subject: [PATCH] Add 'create a pin' button to backups sub pin entry sheet. --- app/src/main/AndroidManifest.xml | 1 + .../MessageBackupsFlowFragment.kt | 23 +++++++++++++++---- .../MessageBackupsPinConfirmationScreen.kt | 21 +++++++++++++---- app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4efd80eaea..640a273092 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1105,6 +1105,7 @@ diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowFragment.kt index fd638c038d..a7181bfa52 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowFragment.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember +import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.fragment.findNavController @@ -23,6 +24,7 @@ import org.thoughtcrime.securesms.components.settings.app.subscription.donate.In import org.thoughtcrime.securesms.compose.ComposeFragment import org.thoughtcrime.securesms.compose.Nav import org.thoughtcrime.securesms.database.InAppPaymentTable +import org.thoughtcrime.securesms.lock.v2.CreateSvrPinActivity import org.thoughtcrime.securesms.util.navigation.safeNavigate import org.thoughtcrime.securesms.util.viewModel @@ -57,14 +59,19 @@ class MessageBackupsFlowFragment : ComposeFragment(), InAppPaymentCheckoutDelega skipPartiallyExpanded = true ) + val lifecycleOwner = LocalLifecycleOwner.current + LaunchedEffect(Unit) { navController.setLifecycleOwner(this@MessageBackupsFlowFragment) - requireActivity().onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { - viewModel.goToPreviousScreen() + requireActivity().onBackPressedDispatcher.addCallback( + lifecycleOwner, + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + viewModel.goToPreviousScreen() + } } - }) + ) } Nav.Host( @@ -95,7 +102,8 @@ class MessageBackupsFlowFragment : ComposeFragment(), InAppPaymentCheckoutDelega onPinChanged = viewModel::onPinEntryUpdated, pinKeyboardType = state.pinKeyboardType, onPinKeyboardTypeSelected = viewModel::onPinKeyboardTypeUpdated, - onNextClick = viewModel::goToNextScreen + onNextClick = viewModel::goToNextScreen, + onCreateNewPinClick = this@MessageBackupsFlowFragment::createANewPin ) } @@ -188,6 +196,11 @@ class MessageBackupsFlowFragment : ComposeFragment(), InAppPaymentCheckoutDelega } } + private fun createANewPin() { + viewModel.onPinEntryUpdated("") + startActivity(CreateSvrPinActivity.getIntentForPinChangeFromSettings(requireContext())) + } + private fun cancelSubscription() { findNavController().safeNavigate( MessageBackupsFlowFragmentDirections.actionDonateToSignalFragmentToStripePaymentInProgressFragment( diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsPinConfirmationScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsPinConfirmationScreen.kt index 5a3ea65875..108fff4a92 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsPinConfirmationScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsPinConfirmationScreen.kt @@ -7,6 +7,8 @@ package org.thoughtcrime.securesms.backup.v2.ui.subscription import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -54,7 +56,8 @@ fun MessageBackupsPinConfirmationScreen( onPinChanged: (String) -> Unit, pinKeyboardType: PinKeyboardType, onPinKeyboardTypeSelected: (PinKeyboardType) -> Unit, - onNextClick: () -> Unit + onNextClick: () -> Unit, + onCreateNewPinClick: () -> Unit ) { val focusRequester = remember { FocusRequester() } Surface { @@ -139,12 +142,21 @@ fun MessageBackupsPinConfirmationScreen( } } - Box( - contentAlignment = Alignment.BottomEnd, + Row( modifier = Modifier .fillMaxWidth() .padding(vertical = 16.dp) ) { + if (isPinIncorrect) { + TextButton(onClick = onCreateNewPinClick) { + Text( + text = stringResource(id = R.string.MessageBackupsPinConfirmationScreen__create_new_pin) + ) + } + } + + Spacer(modifier = Modifier.weight(1f)) + Buttons.LargeTonal( onClick = onNextClick ) { @@ -171,7 +183,8 @@ private fun MessageBackupsPinConfirmationScreenPreview() { onPinChanged = {}, pinKeyboardType = PinKeyboardType.ALPHA_NUMERIC, onPinKeyboardTypeSelected = {}, - onNextClick = {} + onNextClick = {}, + onCreateNewPinClick = {} ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 93b6ceca01..9cc50759c4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7346,6 +7346,8 @@ Next Switch keyboard + + Create new pin