From 9910bd0dfa76f80c5b0ecd078fa9921665187b62 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 3 Mar 2026 15:43:18 +0000 Subject: [PATCH] feat: convert AccountBackupDialog to a navigation Route MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the local dialog state in AllSettingsScreen with a proper Route.AccountBackup, presented as a bottom-slide composable. - Add `Route.AccountBackup` to Routes.kt (sealed class + getRouteWithArguments) - Rename `AccountBackupDialog` → `AccountBackupScreen` accepting `INav` instead of `onClose`; remove Dialog wrapper - Register `composableFromBottom` in AppNavigation - Update AllSettingsScreen to navigate to Route.AccountBackup instead of managing local dialog state https://claude.ai/code/session_01KRRANB1b7wV7mpxEvpfjc7 --- .../amethyst/ui/navigation/AppNavigation.kt | 2 ++ .../amethyst/ui/navigation/routes/Routes.kt | 3 +++ .../loggedIn/keyBackup/AccountBackupDialog.kt | 20 +++++++------------ .../loggedIn/settings/AllSettingsScreen.kt | 12 +---------- 4 files changed, 13 insertions(+), 24 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt index c6ab5bdb6..98783df1a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt @@ -105,6 +105,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.relay.RelayFeedScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.AllRelayListScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.RelayInformationScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.search.SearchScreen +import com.vitorpamplona.amethyst.ui.screen.loggedIn.keyBackup.AccountBackupScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.AllSettingsScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.NIP47SetupScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.SecurityFiltersScreen @@ -165,6 +166,7 @@ fun AppNavigation( composable { SearchScreen(accountViewModel, nav) } composableFromEnd { AllSettingsScreen(accountViewModel, nav) } + composableFromBottom { AccountBackupScreen(accountViewModel, nav) } composableFromEnd { SecurityFiltersScreen(accountViewModel, nav) } composableFromEnd { PrivacyOptionsScreen(Amethyst.instance.torPrefs.value, nav) } composableFromEnd { BookmarkListScreen(accountViewModel, nav) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/routes/Routes.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/routes/Routes.kt index 106dee44f..57fc0d0b1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/routes/Routes.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/routes/Routes.kt @@ -81,6 +81,8 @@ sealed class Route { @Serializable object AllSettings : Route() + @Serializable object AccountBackup : Route() + @Serializable object Settings : Route() @Serializable object UserSettings : Route() @@ -332,6 +334,7 @@ fun getRouteWithArguments(navController: NavHostController): Route? { dest.hasRoute() -> entry.toRoute() dest.hasRoute() -> entry.toRoute() dest.hasRoute() -> entry.toRoute() + dest.hasRoute() -> entry.toRoute() dest.hasRoute() -> entry.toRoute() dest.hasRoute() -> entry.toRoute() dest.hasRoute() -> entry.toRoute() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/keyBackup/AccountBackupDialog.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/keyBackup/AccountBackupDialog.kt index d0c669bad..a51b6e5c2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/keyBackup/AccountBackupDialog.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/keyBackup/AccountBackupDialog.kt @@ -80,8 +80,6 @@ import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties import androidx.fragment.app.FragmentActivity import com.halilibo.richtext.commonmark.CommonMarkdownParseOptions import com.halilibo.richtext.commonmark.CommonmarkAstNodeParser @@ -91,6 +89,7 @@ import com.halilibo.richtext.ui.material3.RichText import com.halilibo.richtext.ui.resolveDefaults import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.Account +import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.note.ArrowBackIcon import com.vitorpamplona.amethyst.ui.note.authenticate import com.vitorpamplona.amethyst.ui.painterRes @@ -112,23 +111,18 @@ import kotlinx.coroutines.launch @OptIn(ExperimentalComposeUiApi::class) @Composable -fun AccountBackupDialog( +fun AccountBackupScreen( accountViewModel: AccountViewModel, - onClose: () -> Unit, + nav: INav, ) { - Dialog( - onDismissRequest = onClose, - properties = DialogProperties(usePlatformDefaultWidth = false), - ) { - DialogContents(accountViewModel, onClose) - } + AccountBackupScreenContent(accountViewModel, nav::popBack) } @Preview(device = "spec:width=2160px,height=2340px,dpi=440") @Composable -fun DialogContentsPreview() { +fun AccountBackupScreenPreview() { ThemeComparisonRow { - DialogContents( + AccountBackupScreenContent( mockAccountViewModel(), ) {} } @@ -136,7 +130,7 @@ fun DialogContentsPreview() { @OptIn(ExperimentalComposeUiApi::class) @Composable -private fun DialogContents( +private fun AccountBackupScreenContent( accountViewModel: AccountViewModel, onClose: () -> Unit, ) { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/AllSettingsScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/AllSettingsScreen.kt index 1b9ee3abd..9f9667412 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/AllSettingsScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/AllSettingsScreen.kt @@ -61,7 +61,6 @@ import com.vitorpamplona.amethyst.ui.note.UpdateReactionTypeDialog import com.vitorpamplona.amethyst.ui.note.UpdateZapAmountDialog import com.vitorpamplona.amethyst.ui.painterRes import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel -import com.vitorpamplona.amethyst.ui.screen.loggedIn.keyBackup.AccountBackupDialog import com.vitorpamplona.amethyst.ui.screen.loggedIn.mockAccountViewModel import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonColumn @@ -152,22 +151,13 @@ fun AllSettingsScreen( onClick = { nav.nav(Route.UserSettings) }, ) accountViewModel.account.settings.keyPair.privKey?.let { - var backupDialogOpen by remember { mutableStateOf(false) } - HorizontalDivider() SettingsNavigationRow( title = R.string.backup_keys, icon = Icons.Outlined.Key, tint = tint, - onClick = { - nav.closeDrawer() - backupDialogOpen = true - }, + onClick = { nav.nav(Route.AccountBackup) }, ) - - if (backupDialogOpen) { - AccountBackupDialog(accountViewModel, onClose = { backupDialogOpen = false }) - } } HorizontalDivider(thickness = 4.dp) SettingsSectionHeader(R.string.app_settings)