add account screen

This commit is contained in:
Stefano Sansone
2024-02-23 22:10:55 +00:00
parent 77f04ea0c3
commit a156c6dbdc
9 changed files with 71 additions and 95 deletions

View File

@ -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

View File

@ -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
)
}

View File

@ -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))
}
})

View File

@ -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
)
}
}

View File

@ -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

View File

@ -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

View File

@ -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() },
)
}
}
}
}

View File

@ -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")

View File

@ -212,7 +212,7 @@
<string name="settings_view_setting_row_manage_account">Manage Account</string>
<string name="settings_view_setting_row_logout">Logout</string>
<!-- AboutView -->
<!-- About -->
<string name="about_view_title">About</string>
<string name="about_view_row_version">Version</string>
<string name="about_view_row_whats_new">What\'s new</string>