Remove Scrollable column

This commit is contained in:
Syer10
2021-04-26 17:18:11 -04:00
parent 2bac6d5e8c
commit 3a83037104
15 changed files with 294 additions and 321 deletions

View File

@@ -1,29 +0,0 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package ca.gosyer.ui.base.components
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.rememberScrollState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@Composable
fun ScrollableColumn(
modifier: Modifier = Modifier,
content: @Composable () -> Unit
) {
Column(
modifier = modifier.scrollable(
state = rememberScrollState(),
orientation = Orientation.Vertical
)
) {
content()
}
}

View File

@@ -48,120 +48,9 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ca.gosyer.ui.base.WindowDialog import ca.gosyer.ui.base.WindowDialog
import ca.gosyer.ui.base.components.ColorPickerDialog import ca.gosyer.ui.base.components.ColorPickerDialog
import ca.gosyer.ui.base.components.ScrollableColumn
@Composable @Composable
fun PreferencesScrollableColumn( fun PreferenceRow(
modifier: Modifier = Modifier,
content: @Composable PreferenceScope.() -> Unit
) {
Box {
ScrollableColumn(modifier) {
val scope = PreferenceScope()
scope.content()
}
}
}
class PreferenceScope {
@Composable
fun <Key> ChoicePref(
preference: PreferenceMutableStateFlow<Key>,
choices: Map<Key, String>,
title: String,
subtitle: String? = null
) {
val prefValue by preference.collectAsState()
Pref(
title = title,
subtitle = if (subtitle == null) choices[prefValue] else null,
onClick = {
ChoiceDialog(
items = choices.toList(),
selected = prefValue,
title = title,
onSelected = { selected ->
preference.value = selected
}
)
}
)
}
@Composable
fun ColorPref(
preference: PreferenceMutableStateFlow<Color>,
title: String,
subtitle: String? = null,
unsetColor: Color = Color.Unspecified
) {
val initialColor = preference.value.takeOrElse { unsetColor }
Pref(
title = title,
subtitle = subtitle,
onClick = {
ColorPickerDialog(
title = title,
onSelected = {
preference.value = it
},
initialColor = initialColor
)
},
onLongClick = { preference.value = Color.Unspecified },
action = {
val prefValue by preference.collectAsState()
if (prefValue != Color.Unspecified || unsetColor != Color.Unspecified) {
val borderColor = MaterialTheme.colors.onBackground.copy(alpha = 0.54f)
Box(
modifier = Modifier
.padding(4.dp)
.size(32.dp)
.clip(CircleShape)
.background(color = initialColor)
.border(BorderStroke(1.dp, borderColor), CircleShape)
)
}
}
)
}
private fun <T> ChoiceDialog(
items: List<Pair<T, String>>,
selected: T?,
onDismissRequest: () -> Unit = {},
onSelected: (T) -> Unit,
title: String,
buttons: @Composable (AppWindow) -> Unit = { }
) {
WindowDialog(onDismissRequest = onDismissRequest, buttons = buttons, title = title, content = {
LazyColumn {
items(items) { (value, text) ->
Row(
modifier = Modifier.requiredHeight(48.dp).fillMaxWidth().clickable(
onClick = {
onSelected(value)
it.close()
}),
verticalAlignment = Alignment.CenterVertically
) {
RadioButton(
selected = value == selected,
onClick = {
onSelected(value)
it.close()
},
)
Text(text = text, modifier = Modifier.padding(start = 24.dp))
}
}
}
})
}
}
@Composable
fun Pref(
title: String, title: String,
icon: ImageVector? = null, icon: ImageVector? = null,
onClick: () -> Unit = {}, onClick: () -> Unit = {},
@@ -213,13 +102,13 @@ fun Pref(
} }
@Composable @Composable
fun SwitchPref( fun SwitchPreference(
preference: PreferenceMutableStateFlow<Boolean>, preference: PreferenceMutableStateFlow<Boolean>,
title: String, title: String,
subtitle: String? = null, subtitle: String? = null,
icon: ImageVector? = null, icon: ImageVector? = null,
) { ) {
Pref( PreferenceRow(
title = title, title = title,
subtitle = subtitle, subtitle = subtitle,
icon = icon, icon = icon,
@@ -232,14 +121,14 @@ fun SwitchPref(
} }
@Composable @Composable
fun EditTextPref( fun EditTextPreference(
preference: PreferenceMutableStateFlow<String>, preference: PreferenceMutableStateFlow<String>,
title: String, title: String,
subtitle: String? = null, subtitle: String? = null,
icon: ImageVector? = null icon: ImageVector? = null
) { ) {
var editText by remember { mutableStateOf(TextFieldValue(preference.value)) } var editText by remember { mutableStateOf(TextFieldValue(preference.value)) }
Pref( PreferenceRow(
title = title, title = title,
subtitle = subtitle, subtitle = subtitle,
icon = icon, icon = icon,
@@ -256,4 +145,99 @@ fun EditTextPref(
} }
} }
) )
} }
@Composable
fun <Key> ChoicePreference(
preference: PreferenceMutableStateFlow<Key>,
choices: Map<Key, String>,
title: String,
subtitle: String? = null
) {
val prefValue by preference.collectAsState()
PreferenceRow(
title = title,
subtitle = if (subtitle == null) choices[prefValue] else null,
onClick = {
ChoiceDialog(
items = choices.toList(),
selected = prefValue,
title = title,
onSelected = { selected ->
preference.value = selected
}
)
}
)
}
private fun <T> ChoiceDialog(
items: List<Pair<T, String>>,
selected: T?,
onDismissRequest: () -> Unit = {},
onSelected: (T) -> Unit,
title: String,
buttons: @Composable (AppWindow) -> Unit = { }
) {
WindowDialog(onDismissRequest = onDismissRequest, buttons = buttons, title = title, content = {
LazyColumn {
items(items) { (value, text) ->
Row(
modifier = Modifier.requiredHeight(48.dp).fillMaxWidth().clickable(
onClick = {
onSelected(value)
it.close()
}),
verticalAlignment = Alignment.CenterVertically
) {
RadioButton(
selected = value == selected,
onClick = {
onSelected(value)
it.close()
},
)
Text(text = text, modifier = Modifier.padding(start = 24.dp))
}
}
}
})
}
@Composable
fun ColorPreference(
preference: PreferenceMutableStateFlow<Color>,
title: String,
subtitle: String? = null,
unsetColor: Color = Color.Unspecified
) {
val initialColor = preference.value.takeOrElse { unsetColor }
PreferenceRow(
title = title,
subtitle = subtitle,
onClick = {
ColorPickerDialog(
title = title,
onSelected = {
preference.value = it
},
initialColor = initialColor
)
},
onLongClick = { preference.value = Color.Unspecified },
action = {
val prefValue by preference.collectAsState()
if (prefValue != Color.Unspecified || unsetColor != Color.Unspecified) {
val borderColor = MaterialTheme.colors.onBackground.copy(alpha = 0.54f)
Box(
modifier = Modifier
.padding(4.dp)
.size(32.dp)
.clip(CircleShape)
.background(color = initialColor)
.border(BorderStroke(1.dp, borderColor), CircleShape)
)
}
}
)
}

View File

@@ -4,18 +4,12 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/ */
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
import com.github.zsoltk.compose.router.BackStack import com.github.zsoltk.compose.router.BackStack
@@ -23,7 +17,7 @@ import com.github.zsoltk.compose.router.BackStack
fun SettingsAdvancedScreen(navController: BackStack<Route>) { fun SettingsAdvancedScreen(navController: BackStack<Route>) {
Column { Column {
Toolbar("Advanced Settings", navController, true) Toolbar("Advanced Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
} }
} }
} }

View File

@@ -4,12 +4,6 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/ */
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.border import androidx.compose.foundation.border
@@ -20,6 +14,7 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.shape.CornerSize
@@ -38,7 +33,8 @@ import androidx.compose.ui.unit.sp
import ca.gosyer.data.ui.UiPreferences import ca.gosyer.data.ui.UiPreferences
import ca.gosyer.data.ui.model.ThemeMode import ca.gosyer.data.ui.model.ThemeMode
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn import ca.gosyer.ui.base.prefs.ChoicePreference
import ca.gosyer.ui.base.prefs.ColorPreference
import ca.gosyer.ui.base.theme.AppColorsPreferenceState import ca.gosyer.ui.base.theme.AppColorsPreferenceState
import ca.gosyer.ui.base.theme.Theme import ca.gosyer.ui.base.theme.Theme
import ca.gosyer.ui.base.theme.asStateFlow import ca.gosyer.ui.base.theme.asStateFlow
@@ -79,39 +75,47 @@ fun SettingsAppearance(navController: BackStack<Route>) {
Column { Column {
Toolbar("Appearance Settings", navController, true) Toolbar("Appearance Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
ChoicePref( item {
preference = vm.themeMode, ChoicePreference(
choices = mapOf( preference = vm.themeMode,
//ThemeMode.System to R.string.follow_system_settings, choices = mapOf(
ThemeMode.Light to "Light", //ThemeMode.System to R.string.follow_system_settings,
ThemeMode.Dark to "Dark" ThemeMode.Light to "Light",
), ThemeMode.Dark to "Dark"
title = "Theme" ),
) title = "Theme"
Text( )
"Preset themes", }
modifier = Modifier.padding(start = 16.dp, top = 16.dp, bottom = 4.dp) item {
) Text(
LazyRow(modifier = Modifier.padding(horizontal = 8.dp)) { "Preset themes",
items(themesForCurrentMode) { theme -> modifier = Modifier.padding(start = 16.dp, top = 16.dp, bottom = 4.dp)
ThemeItem(theme, onClick = { )
(if (isLight) vm.lightTheme else vm.darkTheme).value = it.id LazyRow(modifier = Modifier.padding(horizontal = 8.dp)) {
activeColors.primaryStateFlow.value = it.colors.primary items(themesForCurrentMode) { theme ->
activeColors.secondaryStateFlow.value = it.colors.secondary ThemeItem(theme, onClick = {
}) (if (isLight) vm.lightTheme else vm.darkTheme).value = it.id
activeColors.primaryStateFlow.value = it.colors.primary
activeColors.secondaryStateFlow.value = it.colors.secondary
})
}
} }
} }
ColorPref( item {
preference = activeColors.primaryStateFlow, title = "Color primary", ColorPreference(
subtitle = "Displayed most frequently across your app", preference = activeColors.primaryStateFlow, title = "Color primary",
unsetColor = MaterialTheme.colors.primary subtitle = "Displayed most frequently across your app",
) unsetColor = MaterialTheme.colors.primary
ColorPref( )
preference = activeColors.secondaryStateFlow, title = "Color secondary", }
subtitle = "Accents select parts of the UI", item {
unsetColor = MaterialTheme.colors.secondary ColorPreference(
) preference = activeColors.secondaryStateFlow, title = "Color secondary",
subtitle = "Accents select parts of the UI",
unsetColor = MaterialTheme.colors.secondary
)
}
} }
} }
} }

View File

@@ -7,9 +7,9 @@
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
import com.github.zsoltk.compose.router.BackStack import com.github.zsoltk.compose.router.BackStack
@@ -17,7 +17,7 @@ import com.github.zsoltk.compose.router.BackStack
fun SettingsBackupScreen(navController: BackStack<Route>) { fun SettingsBackupScreen(navController: BackStack<Route>) {
Column { Column {
Toolbar("Backup Settings", navController, true) Toolbar("Backup Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
} }
} }
} }

View File

@@ -7,9 +7,9 @@
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
import com.github.zsoltk.compose.router.BackStack import com.github.zsoltk.compose.router.BackStack
@@ -17,7 +17,7 @@ import com.github.zsoltk.compose.router.BackStack
fun SettingsBrowseScreen(navController: BackStack<Route>) { fun SettingsBrowseScreen(navController: BackStack<Route>) {
Column { Column {
Toolbar("Browse Settings", navController, true) Toolbar("Browse Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
} }
} }
} }

View File

@@ -7,9 +7,9 @@
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
import com.github.zsoltk.compose.router.BackStack import com.github.zsoltk.compose.router.BackStack
@@ -17,7 +17,7 @@ import com.github.zsoltk.compose.router.BackStack
fun SettingsDownloadsScreen(navController: BackStack<Route>) { fun SettingsDownloadsScreen(navController: BackStack<Route>) {
Column { Column {
Toolbar("Download Settings", navController, true) Toolbar("Download Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
} }
} }
} }

View File

@@ -4,22 +4,17 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/ */
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.Divider import androidx.compose.material.Divider
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.data.ui.UiPreferences import ca.gosyer.data.ui.UiPreferences
import ca.gosyer.data.ui.model.StartScreen import ca.gosyer.data.ui.model.StartScreen
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn import ca.gosyer.ui.base.prefs.ChoicePreference
import ca.gosyer.ui.base.prefs.SwitchPref import ca.gosyer.ui.base.prefs.SwitchPreference
import ca.gosyer.ui.base.vm.ViewModel import ca.gosyer.ui.base.vm.ViewModel
import ca.gosyer.ui.base.vm.viewModel import ca.gosyer.ui.base.vm.viewModel
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
@@ -73,28 +68,38 @@ fun SettingsGeneralScreen(navController: BackStack<Route>) {
val vm = viewModel<SettingsGeneralViewModel>() val vm = viewModel<SettingsGeneralViewModel>()
Column { Column {
Toolbar("General Settings", navController, true) Toolbar("General Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
ChoicePref( item {
preference = vm.startScreen, ChoicePreference(
title = "Start Screen", preference = vm.startScreen,
choices = mapOf( title = "Start Screen",
StartScreen.Library to "Library", choices = mapOf(
StartScreen.Sources to "Sources", StartScreen.Library to "Library",
StartScreen.Extensions to "Extensions", StartScreen.Sources to "Sources",
StartScreen.Extensions to "Extensions",
)
) )
) }
SwitchPref(preference = vm.confirmExit, title = "Confirm Exit") item {
Divider() SwitchPreference(preference = vm.confirmExit, title = "Confirm Exit")
ChoicePref( }
preference = vm.language, item {
title = "Language", Divider()
choices = vm.getLanguageChoices(), }
) item {
ChoicePref( ChoicePreference(
preference = vm.dateFormat, preference = vm.language,
title = "Date Format", title = "Language",
choices = vm.getDateChoices() choices = vm.getLanguageChoices(),
) )
}
item {
ChoicePreference(
preference = vm.dateFormat,
title = "Date Format",
choices = vm.getDateChoices()
)
}
} }
} }
} }

View File

@@ -4,20 +4,14 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/ */
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.data.library.LibraryPreferences import ca.gosyer.data.library.LibraryPreferences
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn import ca.gosyer.ui.base.prefs.SwitchPreference
import ca.gosyer.ui.base.prefs.SwitchPref
import ca.gosyer.ui.base.vm.ViewModel import ca.gosyer.ui.base.vm.ViewModel
import ca.gosyer.ui.base.vm.viewModel import ca.gosyer.ui.base.vm.viewModel
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
@@ -37,8 +31,10 @@ fun SettingsLibraryScreen(navController: BackStack<Route>) {
Column { Column {
Toolbar("Library Settings", navController, true) Toolbar("Library Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
SwitchPref(preference = vm.showAllCategory, title = "Show all category") item {
SwitchPreference(preference = vm.showAllCategory, title = "Show all category")
}
} }
} }
} }

View File

@@ -7,9 +7,9 @@
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
import com.github.zsoltk.compose.router.BackStack import com.github.zsoltk.compose.router.BackStack
@@ -17,7 +17,7 @@ import com.github.zsoltk.compose.router.BackStack
fun SettingsParentalControlsScreen(navController: BackStack<Route>) { fun SettingsParentalControlsScreen(navController: BackStack<Route>) {
Column { Column {
Toolbar("Parental Control Settings", navController, true) Toolbar("Parental Control Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
} }
} }
} }

View File

@@ -7,9 +7,9 @@
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
import com.github.zsoltk.compose.router.BackStack import com.github.zsoltk.compose.router.BackStack
@@ -17,7 +17,7 @@ import com.github.zsoltk.compose.router.BackStack
fun SettingsReaderScreen(navController: BackStack<Route>) { fun SettingsReaderScreen(navController: BackStack<Route>) {
Column { Column {
Toolbar("Reader Settings", navController, true) Toolbar("Reader Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
} }
} }
} }

View File

@@ -4,19 +4,13 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/ */
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.Pref import ca.gosyer.ui.base.prefs.PreferenceRow
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
import com.github.zsoltk.compose.router.BackStack import com.github.zsoltk.compose.router.BackStack
import compose.icons.FontAwesomeIcons import compose.icons.FontAwesomeIcons
@@ -27,68 +21,91 @@ import compose.icons.fontawesomeicons.regular.Edit
fun SettingsScreen(navController: BackStack<Route>) { fun SettingsScreen(navController: BackStack<Route>) {
Column { Column {
Toolbar("Settings", closable = false) Toolbar("Settings", closable = false)
PreferencesScrollableColumn { LazyColumn {
Pref( item {
title = "General", PreferenceRow(
icon = FontAwesomeIcons.Regular.Edit, title = "General",
onClick = { navController.push(Route.SettingsGeneral) } icon = FontAwesomeIcons.Regular.Edit,
) onClick = { navController.push(Route.SettingsGeneral) }
Pref( )
title = "Appearance", }
icon = FontAwesomeIcons.Regular.Edit, item {
onClick = { navController.push(Route.SettingsAppearance) } PreferenceRow(
) title = "Appearance",
Pref( icon = FontAwesomeIcons.Regular.Edit,
title = "Server", onClick = { navController.push(Route.SettingsAppearance) }
icon = FontAwesomeIcons.Regular.Edit, )
onClick = { navController.push(Route.SettingsServer) } }
) item {
Pref( PreferenceRow(
title = "Library", title = "Server",
icon = FontAwesomeIcons.Regular.Edit, icon = FontAwesomeIcons.Regular.Edit,
onClick = { navController.push(Route.SettingsLibrary) } onClick = { navController.push(Route.SettingsServer) }
) )
Pref( }
title = "Reader", item {
icon = FontAwesomeIcons.Regular.Edit, PreferenceRow(
onClick = { navController.push(Route.SettingsReader) } title = "Library",
) icon = FontAwesomeIcons.Regular.Edit,
/*Pref( onClick = { navController.push(Route.SettingsLibrary) }
title = "Downloads", )
icon = FontAwesomeIcons.Regular.Edit, }
onClick = { navController.push(Route.SettingsDownloads) } item {
) PreferenceRow(
Pref( title = "Reader",
title = "Tracking", icon = FontAwesomeIcons.Regular.Edit,
icon = FontAwesomeIcons.Regular.Edit, onClick = { navController.push(Route.SettingsReader) }
onClick = { navController.push(Route.SettingsTracking) } )
) }
*/ /*item {
Pref( Pref(
title = "Browse", title = "Downloads",
icon = FontAwesomeIcons.Regular.Edit, icon = FontAwesomeIcons.Regular.Edit,
onClick = { navController.push(Route.SettingsBrowse) } onClick = { navController.push(Route.SettingsDownloads) }
) )
Pref( }
title = "Backup", item {
icon = FontAwesomeIcons.Regular.Edit, Pref(
onClick = { navController.push(Route.SettingsBackup) } title = "Tracking",
) icon = FontAwesomeIcons.Regular.Edit,
/*Pref( onClick = { navController.push(Route.SettingsTracking) }
title = "Security", )
icon = FontAwesomeIcons.Regular.Edit, }*/
onClick = { navController.push(Route.SettingsSecurity) } item {
) PreferenceRow(
Pref( title = "Browse",
title = "Parental Controls", icon = FontAwesomeIcons.Regular.Edit,
icon = FontAwesomeIcons.Regular.User, onClick = { navController.push(Route.SettingsBrowse) }
onClick = { navController.push(Route.SettingsParentalControls) } )
)*/ }
Pref( item {
title = "Advanced", PreferenceRow(
icon = FontAwesomeIcons.Regular.Edit, title = "Backup",
onClick = { navController.push(Route.SettingsAdvanced) } icon = FontAwesomeIcons.Regular.Edit,
) onClick = { navController.push(Route.SettingsBackup) }
)
}
/*item {
Pref(
title = "Security",
icon = FontAwesomeIcons.Regular.Edit,
onClick = { navController.push(Route.SettingsSecurity) }
)
}
item {
Pref(
title = "Parental Controls",
icon = FontAwesomeIcons.Regular.User,
onClick = { navController.push(Route.SettingsParentalControls) }
)
}*/
item {
PreferenceRow(
title = "Advanced",
icon = FontAwesomeIcons.Regular.Edit,
onClick = { navController.push(Route.SettingsAdvanced) }
)
}
} }
} }
} }

View File

@@ -7,9 +7,9 @@
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
import com.github.zsoltk.compose.router.BackStack import com.github.zsoltk.compose.router.BackStack
@@ -17,7 +17,7 @@ import com.github.zsoltk.compose.router.BackStack
fun SettingsSecurityScreen(navController: BackStack<Route>) { fun SettingsSecurityScreen(navController: BackStack<Route>) {
Column { Column {
Toolbar("Security Settings", navController, true) Toolbar("Security Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
} }
} }
} }

View File

@@ -7,13 +7,13 @@
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import ca.gosyer.data.server.ServerPreferences import ca.gosyer.data.server.ServerPreferences
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.EditTextPref import ca.gosyer.ui.base.prefs.EditTextPreference
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn import ca.gosyer.ui.base.prefs.SwitchPreference
import ca.gosyer.ui.base.prefs.SwitchPref
import ca.gosyer.ui.base.prefs.asStateIn import ca.gosyer.ui.base.prefs.asStateIn
import ca.gosyer.ui.base.vm.ViewModel import ca.gosyer.ui.base.vm.ViewModel
import ca.gosyer.ui.base.vm.viewModel import ca.gosyer.ui.base.vm.viewModel
@@ -33,9 +33,11 @@ fun SettingsServerScreen(navController: BackStack<Route>) {
val vm = viewModel<SettingsServerViewModel>() val vm = viewModel<SettingsServerViewModel>()
Column { Column {
Toolbar("Server Settings", navController, true) Toolbar("Server Settings", navController, true)
SwitchPref(preference = vm.host, title = "Host server inside TachideskJUI") SwitchPreference(preference = vm.host, title = "Host server inside TachideskJUI")
PreferencesScrollableColumn { LazyColumn {
EditTextPref(vm.serverUrl, "Server Url", subtitle = vm.serverUrl.collectAsState().value) item {
EditTextPreference(vm.serverUrl, "Server Url", subtitle = vm.serverUrl.collectAsState().value)
}
} }
} }
} }

View File

@@ -7,9 +7,9 @@
package ca.gosyer.ui.settings package ca.gosyer.ui.settings
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import ca.gosyer.ui.base.components.Toolbar import ca.gosyer.ui.base.components.Toolbar
import ca.gosyer.ui.base.prefs.PreferencesScrollableColumn
import ca.gosyer.ui.main.Route import ca.gosyer.ui.main.Route
import com.github.zsoltk.compose.router.BackStack import com.github.zsoltk.compose.router.BackStack
@@ -17,7 +17,7 @@ import com.github.zsoltk.compose.router.BackStack
fun SettingsTrackingScreen(navController: BackStack<Route>) { fun SettingsTrackingScreen(navController: BackStack<Route>) {
Column { Column {
Toolbar("Tracking Settings", navController, true) Toolbar("Tracking Settings", navController, true)
PreferencesScrollableColumn { LazyColumn {
} }
} }
} }