diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt index 6e3f5bcf1..0278f3646 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt @@ -34,6 +34,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.LoadRedirectScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.NotificationScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.ProfileScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.SearchScreen +import com.vitorpamplona.amethyst.ui.screen.loggedIn.SettingsScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.ThreadScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.VideoScreen import kotlinx.coroutines.delay @@ -219,6 +220,15 @@ fun AppNavigation( ) }) } + + Route.Settings.let { route -> + composable(route.route, route.arguments, content = { + SettingsScreen( + accountViewModel = accountViewModel, + nav = nav + ) + }) + } } actionableNextPage?.let { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt index b115e5b56..b69c5d5c3 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt @@ -355,6 +355,15 @@ fun ListContent( route = Route.BlockedUsers.route ) + NavigationRow( + title = stringResource(R.string.settings), + icon = Route.Settings.icon, + tint = MaterialTheme.colors.onBackground, + nav = nav, + scaffoldState = scaffoldState, + route = Route.Settings.route + ) + IconRow( title = stringResource(R.string.backup_keys), icon = R.drawable.ic_key, diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt index eec35833e..008cc0e10 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt @@ -128,6 +128,11 @@ sealed class Route( icon = R.drawable.ic_moments, arguments = listOf(navArgument("id") { type = NavType.StringType }).toImmutableList() ) + + object Settings : Route( + route = "Settings", + icon = com.google.android.exoplayer2.R.drawable.exo_ic_settings + ) } // ** diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SettingsScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SettingsScreen.kt new file mode 100644 index 000000000..5c8c7b1f1 --- /dev/null +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SettingsScreen.kt @@ -0,0 +1,104 @@ +package com.vitorpamplona.amethyst.ui.screen.loggedIn + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.material.DropdownMenuItem +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.ExposedDropdownMenuBox +import androidx.compose.material.ExposedDropdownMenuDefaults +import androidx.compose.material.Text +import androidx.compose.material.TextField +import androidx.compose.runtime.Composable +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp +import com.vitorpamplona.amethyst.ui.theme.DoubleVertSpacer +import com.vitorpamplona.amethyst.ui.theme.StdPadding + +@Composable +fun SettingsScreen( + accountViewModel: AccountViewModel, + nav: (String) -> Unit +) { + val listItems = arrayOf("Always", "Wifi-only", "Never") + val selectedItem = remember { + mutableStateOf(listItems[0]) + } + + val context = LocalContext.current + Column( + StdPadding + ) { + Section("Account preferences") + + Section("Application preferences") + Text( + "Media", + fontWeight = FontWeight.Bold + ) + DropDownSettings( + selectedItem = selectedItem, + listItems = listItems + ) + } +} + +@OptIn(ExperimentalMaterialApi::class) +@Composable +fun DropDownSettings( + selectedItem: MutableState, + listItems: Array +) { + var expanded by remember { + mutableStateOf(false) + } + ExposedDropdownMenuBox( + expanded = expanded, + onExpandedChange = { + expanded = !expanded + } + ) { + TextField( + value = selectedItem.value, + onValueChange = {}, + readOnly = true, + label = { Text(text = "Automatically load images/gifs") }, + trailingIcon = { + ExposedDropdownMenuDefaults.TrailingIcon( + expanded = expanded + ) + }, + colors = ExposedDropdownMenuDefaults.textFieldColors() + ) + + ExposedDropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false } + ) { + listItems.forEach { selectedOption -> + DropdownMenuItem(onClick = { + selectedItem.value = selectedOption + expanded = false + }) { + Text(text = selectedOption) + } + } + } + } +} + +@Composable +fun Section(text: String) { + Spacer(modifier = DoubleVertSpacer) + Text( + text = text, + fontWeight = FontWeight.Bold, + fontSize = 20.sp + ) + Spacer(modifier = DoubleVertSpacer) +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 748189d02..8babaa30f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -483,4 +483,5 @@ Sensitive Content Adds sensitive content warning before showing this content + Settings