diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt index a6db86afed..fc6dbc0b58 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt @@ -83,7 +83,7 @@ class AppSettingsActivity : DSLSettingsActivity(), GooglePayComponent { ) AppSettingsRoute.ChatsRoute.Chats -> AppSettingsFragmentDirections.actionDirectToChatsSettingsFragment() - AppSettingsRoute.BackupsRoute.Backups -> AppSettingsFragmentDirections.actionDirectToBackupsSettingsFragment() + is AppSettingsRoute.BackupsRoute.Backups -> AppSettingsFragmentDirections.actionDirectToBackupsSettingsFragment().setLaunchCheckoutFlow(appSettingsRoute.launchCheckoutFlow) AppSettingsRoute.Invite -> AppSettingsFragmentDirections.actionDirectToInviteFragment() AppSettingsRoute.DataAndStorageRoute.DataAndStorage -> AppSettingsFragmentDirections.actionDirectToStoragePreferenceFragment() else -> error("Unsupported start location: ${appSettingsRoute?.javaClass?.name}") @@ -233,7 +233,8 @@ class AppSettingsActivity : DSLSettingsActivity(), GooglePayComponent { } @JvmStatic - fun backupsSettings(context: Context): Intent = getIntentForStartLocation(context, AppSettingsRoute.BackupsRoute.Backups) + @JvmOverloads + fun backupsSettings(context: Context, launchCheckoutFlow: Boolean = false): Intent = getIntentForStartLocation(context, AppSettingsRoute.BackupsRoute.Backups(launchCheckoutFlow = launchCheckoutFlow)) @JvmStatic fun invite(context: Context): Intent = getIntentForStartLocation(context, AppSettingsRoute.Invite) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt index e86a41bc85..5809eaa510 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt @@ -417,7 +417,7 @@ private fun AppSettingsContent( icon = SignalIcons.Backup.imageVector, text = stringResource(R.string.preferences_chats__backups), onClick = { - callbacks.navigate(AppSettingsRoute.BackupsRoute.Backups) + callbacks.navigate(AppSettingsRoute.BackupsRoute.Backups()) }, onLongClick = { callbacks.copyRemoteBackupsSubscriberIdToClipboard() diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupsSettingsFragment.kt index 0a2a19c143..244cfca073 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/BackupsSettingsFragment.kt @@ -38,6 +38,7 @@ import androidx.compose.ui.unit.dp import androidx.fragment.app.viewModels import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.fragment.findNavController +import androidx.navigation.fragment.navArgs import kotlinx.coroutines.delay import org.signal.core.ui.compose.Buttons import org.signal.core.ui.compose.ComposeFragment @@ -62,6 +63,7 @@ import org.thoughtcrime.securesms.util.navigation.safeNavigate import java.math.BigDecimal import java.util.Currency import java.util.Locale +import kotlin.getValue import kotlin.time.Duration import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.minutes @@ -76,11 +78,16 @@ class BackupsSettingsFragment : ComposeFragment() { private lateinit var checkoutLauncher: ActivityResultLauncher private val viewModel: BackupsSettingsViewModel by viewModels() + private val args: BackupsSettingsFragmentArgs by navArgs() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { checkoutLauncher = createBackupsCheckoutLauncher { findNavController().safeNavigate(R.id.action_backupsSettingsFragment_to_remoteBackupsSettingsFragment) } + + if (savedInstanceState == null && args.launchCheckoutFlow) { + checkoutLauncher.launch(null) + } } @Composable diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt index a395637542..4bbe2e0a08 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt @@ -49,7 +49,6 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/routes/AppSettingsRoute.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/routes/AppSettingsRoute.kt index 7b64a1ea18..0a6565192b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/routes/AppSettingsRoute.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/routes/AppSettingsRoute.kt @@ -63,9 +63,11 @@ sealed interface AppSettingsRoute : Parcelable { @Parcelize sealed interface BackupsRoute : AppSettingsRoute { - data object Backups : BackupsRoute + data class Backups( + val launchCheckoutFlow: Boolean = false + ) : BackupsRoute data class Local(val triggerUpdateFlow: Boolean = false) : BackupsRoute - data class Remote(val backupLaterSelected: Boolean = false, val forQuickRestore: Boolean = false) : BackupsRoute + data class Remote(val forQuickRestore: Boolean = false) : BackupsRoute data object DisplayKey : BackupsRoute } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index e7bf0d7e2a..e81b35bb1e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -3746,7 +3746,13 @@ class ConversationFragment : "username_edit" -> startActivity(EditProfileActivity.getIntentForUsernameEdit(requireContext())) "calls_tab" -> startActivity(MainActivity.clearTopAndOpenTab(requireContext(), MainNavigationListLocation.CALLS)) "chat_folder" -> startActivity(AppSettingsActivity.chatFolders(requireContext())) - "remote_backups" -> startActivity(AppSettingsActivity.remoteBackups(requireContext())) + "remote_backups" -> { + if (SignalStore.backup.areBackupsEnabled) { + startActivity(AppSettingsActivity.remoteBackups(requireContext())) + } else { + startActivity(AppSettingsActivity.backupsSettings(requireContext(), launchCheckoutFlow = true)) + } + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java index a2c6590459..a630ec1e46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -476,7 +476,7 @@ public final class Megaphones { .setTitle(R.string.TurnOnSignalBackups__title) .setBody(R.string.TurnOnSignalBackups__body) .setActionButton(R.string.TurnOnSignalBackups__turn_on, (megaphone, controller) -> { - Intent intent = AppSettingsActivity.remoteBackups(controller.getMegaphoneActivity()); + Intent intent = AppSettingsActivity.backupsSettings(controller.getMegaphoneActivity(), true); controller.onMegaphoneNavigationRequested(intent); controller.onMegaphoneSnooze(Event.BACKUPS_GENERIC_UPSELL); @@ -692,7 +692,7 @@ public final class Megaphones { .setTitle(R.string.BackupMessagesUpsell__title) .setBody(R.string.BackupMessagesUpsell__body) .setActionButton(R.string.BackupMessagesUpsell__turn_on, (megaphone, controller) -> { - Intent intent = AppSettingsActivity.remoteBackups(controller.getMegaphoneActivity()); + Intent intent = AppSettingsActivity.backupsSettings(controller.getMegaphoneActivity(), true); controller.onMegaphoneNavigationRequested(intent); controller.onMegaphoneSnooze(Event.BACKUP_MESSAGE_COUNT_UPSELL); }) diff --git a/app/src/main/res/navigation/app_settings_with_change_number.xml b/app/src/main/res/navigation/app_settings_with_change_number.xml index 3f18aafb47..decf073511 100644 --- a/app/src/main/res/navigation/app_settings_with_change_number.xml +++ b/app/src/main/res/navigation/app_settings_with_change_number.xml @@ -786,6 +786,7 @@ android:name="forQuickRestore" android:defaultValue="false" app:argType="boolean" /> + + app:popUpToInclusive="true"> + + + + + +