diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/MainActivity.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/MainActivity.kt index 688db9601..233a285d4 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/MainActivity.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/MainActivity.kt @@ -35,7 +35,6 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) val loginViewModel: LoginViewModel by viewModels() - val settingsViewModel: SettingsViewModel by viewModels() val searchViewModel: SearchViewModel by viewModels() val labelsViewModel: LabelsViewModel by viewModels() val saveViewModel: SaveViewModel by viewModels() @@ -64,7 +63,6 @@ class MainActivity : ComponentActivity() { RootView( loginViewModel, searchViewModel, - settingsViewModel, labelsViewModel, saveViewModel, editInfoViewModel diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/root/RootView.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/root/RootView.kt index 9afd0ec0b..4d8feacb8 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/root/RootView.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/root/RootView.kt @@ -17,8 +17,8 @@ import app.omnivore.omnivore.feature.library.SearchView import app.omnivore.omnivore.feature.library.SearchViewModel import app.omnivore.omnivore.feature.save.SaveViewModel import app.omnivore.omnivore.feature.settings.SettingsScreen -import app.omnivore.omnivore.feature.settings.SettingsViewModel import app.omnivore.omnivore.feature.settings.about.AboutScreen +import app.omnivore.omnivore.feature.settings.account.AccountScreen import app.omnivore.omnivore.feature.web.WebViewScreen import app.omnivore.omnivore.navigation.Routes @@ -26,7 +26,6 @@ import app.omnivore.omnivore.navigation.Routes fun RootView( loginViewModel: LoginViewModel, searchViewModel: SearchViewModel, - settingsViewModel: SettingsViewModel, labelsViewModel: LabelsViewModel, saveViewModel: SaveViewModel, editInfoViewModel: EditInfoViewModel, @@ -38,7 +37,6 @@ fun RootView( PrimaryNavigator( loginViewModel = loginViewModel, searchViewModel = searchViewModel, - settingsViewModel = settingsViewModel, labelsViewModel = labelsViewModel, saveViewModel = saveViewModel, editInfoViewModel = editInfoViewModel, @@ -60,14 +58,16 @@ fun RootView( fun PrimaryNavigator( loginViewModel: LoginViewModel, searchViewModel: SearchViewModel, - settingsViewModel: SettingsViewModel, labelsViewModel: LabelsViewModel, saveViewModel: SaveViewModel, editInfoViewModel: EditInfoViewModel, ) { val navController = rememberNavController() - NavHost(navController = navController, startDestination = Routes.Library.route) { + NavHost( + navController = navController, + startDestination = Routes.Library.route + ) { composable(Routes.Library.route) { LibraryView( navController = navController, @@ -79,23 +79,26 @@ fun PrimaryNavigator( composable(Routes.Search.route) { SearchView( - viewModel = searchViewModel, - navController = navController + viewModel = searchViewModel, navController = navController ) } composable(Routes.Settings.route) { SettingsScreen( loginViewModel = loginViewModel, - settingsViewModel = settingsViewModel, navController = navController ) } composable(Routes.About.route) { AboutScreen( - navController = navController, - settingsViewModel = settingsViewModel + navController = navController + ) + } + + composable(Routes.Account.route) { + AccountScreen( + navController = navController ) } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/LogoutDialog.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/LogoutDialog.kt index 6c95a0092..0e8804908 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/LogoutDialog.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/LogoutDialog.kt @@ -1,8 +1,8 @@ package app.omnivore.omnivore.feature.settings import androidx.compose.material3.AlertDialog -import androidx.compose.material3.Button import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource @@ -20,8 +20,7 @@ fun LogoutDialog(onClose: (Boolean) -> Unit) { Text(stringResource(R.string.logout_dialog_confirm_msg)) }, confirmButton = { - Button(onClick = { - // Sign out google users + TextButton(onClick = { val signInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).build() @@ -33,7 +32,7 @@ fun LogoutDialog(onClose: (Boolean) -> Unit) { } }, dismissButton = { - Button(onClick = { onClose(false) }) { + TextButton(onClick = { onClose(false) }) { Text(stringResource(R.string.logout_dialog_action_cancel)) } }) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/SettingsScreen.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/SettingsScreen.kt index 22bc7b891..4d99f2bdb 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/SettingsScreen.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/SettingsScreen.kt @@ -31,15 +31,13 @@ import androidx.compose.ui.unit.sp import androidx.navigation.NavHostController import app.omnivore.omnivore.R import app.omnivore.omnivore.feature.auth.LoginViewModel -import app.omnivore.omnivore.feature.settings.account.ManageAccountDialog import app.omnivore.omnivore.navigation.Routes @OptIn(ExperimentalMaterial3Api::class) @Composable internal fun SettingsScreen( loginViewModel: LoginViewModel, - settingsViewModel: SettingsViewModel, - navController: NavHostController, + navController: NavHostController ) { Scaffold(topBar = { TopAppBar( @@ -60,7 +58,6 @@ internal fun SettingsScreen( }) { paddingValues -> SettingsViewContent( loginViewModel = loginViewModel, - settingsViewModel = settingsViewModel, navController = navController, paddingValues = paddingValues ) @@ -70,12 +67,10 @@ internal fun SettingsScreen( @Composable fun SettingsViewContent( loginViewModel: LoginViewModel, - settingsViewModel: SettingsViewModel, navController: NavHostController, paddingValues: PaddingValues ) { val showLogoutDialog = remember { mutableStateOf(false) } - val showManageAccountDialog = remember { mutableStateOf(false) } val state = rememberLazyListState() @@ -86,7 +81,7 @@ fun SettingsViewContent( item { SettingRow(title = stringResource(R.string.settings_view_setting_row_manage_account)) { - showManageAccountDialog.value = true + navController.navigate(Routes.Account.route) } } @@ -113,13 +108,6 @@ fun SettingsViewContent( showLogoutDialog.value = false } } - - if (showManageAccountDialog.value) { - ManageAccountDialog( - onDismiss = { showManageAccountDialog.value = false }, - settingsViewModel = settingsViewModel - ) - } } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/about/AboutScreen.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/about/AboutScreen.kt index 984c62301..13ee241d3 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/about/AboutScreen.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/about/AboutScreen.kt @@ -23,11 +23,11 @@ import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavHostController import app.omnivore.omnivore.BuildConfig import app.omnivore.omnivore.R import app.omnivore.omnivore.core.ui.LinkIcon -import app.omnivore.omnivore.feature.settings.LogoHeader import app.omnivore.omnivore.feature.settings.RELEASE_URL import app.omnivore.omnivore.feature.settings.SettingRow import app.omnivore.omnivore.feature.settings.SettingsViewModel @@ -37,7 +37,7 @@ import app.omnivore.omnivore.navigation.Routes @Composable internal fun AboutScreen( navController: NavHostController, - settingsViewModel: SettingsViewModel + settingsViewModel: SettingsViewModel = hiltViewModel() ) { val uriHandler = LocalUriHandler.current @@ -67,14 +67,6 @@ internal fun AboutScreen( LogoHeader() } - item { - SettingRow( - title = stringResource(R.string.about_view_row_version), - subtitle = getVersionName(), - onClick = { }, - ) - } - item { SettingRow( title = stringResource(R.string.about_view_row_whats_new), @@ -106,6 +98,14 @@ internal fun AboutScreen( } } + item { + SettingRow( + title = stringResource(R.string.about_view_row_version), + subtitle = getVersionName(), + onClick = { }, + ) + } + item { Row( modifier = Modifier diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/LogoHeader.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/about/LogoHeader.kt similarity index 95% rename from android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/LogoHeader.kt rename to android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/about/LogoHeader.kt index 9fc95df41..9f2a77933 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/LogoHeader.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/about/LogoHeader.kt @@ -1,4 +1,4 @@ -package app.omnivore.omnivore.feature.settings +package app.omnivore.omnivore.feature.settings.about import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/account/AccountScreen.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/account/AccountScreen.kt index 57d8cde41..bc7977bb0 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/account/AccountScreen.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/settings/account/AccountScreen.kt @@ -1,70 +1,57 @@ package app.omnivore.omnivore.feature.settings.account -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.verticalScroll +import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Refresh +import androidx.compose.material.icons.automirrored.outlined.ArrowBack +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon -import androidx.compose.material3.Surface +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavHostController import app.omnivore.omnivore.R +import app.omnivore.omnivore.feature.settings.SettingRow import app.omnivore.omnivore.feature.settings.SettingsViewModel +@OptIn(ExperimentalMaterial3Api::class) @Composable -fun ManageAccountDialog(onDismiss: () -> Unit, settingsViewModel: SettingsViewModel) { - Dialog(onDismissRequest = { onDismiss() }) { - Surface( - shape = RoundedCornerShape(16.dp), - color = Color.White, - modifier = Modifier.height(300.dp) - ) { - ManageAccountView(settingsViewModel = settingsViewModel) - } - } -} +internal fun AccountScreen( + navController: NavHostController, + settingsViewModel: SettingsViewModel = hiltViewModel() +) { + Scaffold( + topBar = { + TopAppBar( + title = { Text(stringResource(R.string.manage_account_title)) }, + navigationIcon = { + IconButton(onClick = { navController.navigateUp() }) { + Icon( + imageVector = Icons.AutoMirrored.Outlined.ArrowBack, contentDescription = null + ) + } -@Composable -fun ManageAccountView(settingsViewModel: SettingsViewModel) { - Column( - modifier = Modifier.padding(top = 6.dp, start = 6.dp, end = 6.dp, bottom = 6.dp) - ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(top = 12.dp, bottom = 12.dp), - horizontalArrangement = Arrangement.Center + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = MaterialTheme.colorScheme.background + ), + ) + }, + ) { contentPadding -> + LazyColumn( + contentPadding = contentPadding, ) { - Text(stringResource(R.string.manage_account_title)) - } - - Column( - modifier = Modifier.verticalScroll(rememberScrollState()) - ) { - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.clickable(onClick = { settingsViewModel.resetDataCache() }) - ) { - Text(stringResource(R.string.manage_account_action_reset_data_cache)) - Spacer(modifier = Modifier.weight(1.0F)) - Icon(imageVector = Icons.Filled.Refresh, contentDescription = null) + item { + SettingRow( + title = stringResource(R.string.manage_account_action_reset_data_cache), + onClick = { settingsViewModel.resetDataCache() }, + ) } } } } - diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/navigation/Routes.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/navigation/Routes.kt index e10ee6e94..53a39b62d 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/navigation/Routes.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/navigation/Routes.kt @@ -4,6 +4,7 @@ sealed class Routes(val route: String) { object Library : Routes("Library") object Settings : Routes("Settings") object About : Routes("About") + object Account : Routes("Account") object Search : Routes("Search") object Documentation : Routes("Documentation") object PrivacyPolicy : Routes("PrivacyPolicy") diff --git a/android/Omnivore/app/src/main/res/values/strings.xml b/android/Omnivore/app/src/main/res/values/strings.xml index 451b66fa4..fba0f250b 100644 --- a/android/Omnivore/app/src/main/res/values/strings.xml +++ b/android/Omnivore/app/src/main/res/values/strings.xml @@ -212,7 +212,7 @@ Manage Account Logout - + About Version What\'s new