From 6ff219b865c3f6ccce6ae5cd4857b76a1d686816 Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Thu, 22 Jun 2023 17:55:17 -0700 Subject: [PATCH] Add main screen settings --- .../frost/compose/settings/SettingsListDsl.kt | 5 +- .../compose/settings/SettingsListItemDsl.kt | 16 +++- .../settings/screens/MainSettingsScreen.kt | 90 +++++++++++++++++++ 3 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 app-compose/src/main/kotlin/com/pitchedapps/frost/settings/screens/MainSettingsScreen.kt diff --git a/app-compose/src/main/kotlin/com/pitchedapps/frost/compose/settings/SettingsListDsl.kt b/app-compose/src/main/kotlin/com/pitchedapps/frost/compose/settings/SettingsListDsl.kt index 62a54a279..54695f8c4 100644 --- a/app-compose/src/main/kotlin/com/pitchedapps/frost/compose/settings/SettingsListDsl.kt +++ b/app-compose/src/main/kotlin/com/pitchedapps/frost/compose/settings/SettingsListDsl.kt @@ -28,7 +28,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview @Composable -fun SettingsListDsl(modifier: Modifier = Modifier, content: SettingsListDsl.() -> Unit) { +fun SettingsListDsl( + modifier: Modifier = Modifier, + content: @Composable SettingsListDsl.() -> Unit +) { val items = SettingsDsl.settingsListDsl(content) LazyColumn(modifier = modifier) { items(items) { compose -> compose() } } diff --git a/app-compose/src/main/kotlin/com/pitchedapps/frost/compose/settings/SettingsListItemDsl.kt b/app-compose/src/main/kotlin/com/pitchedapps/frost/compose/settings/SettingsListItemDsl.kt index 69378f01b..a9083ba49 100644 --- a/app-compose/src/main/kotlin/com/pitchedapps/frost/compose/settings/SettingsListItemDsl.kt +++ b/app-compose/src/main/kotlin/com/pitchedapps/frost/compose/settings/SettingsListItemDsl.kt @@ -21,7 +21,10 @@ import androidx.compose.material3.Switch import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.vector.ImageVector -fun SettingsDsl.settingsListDsl(content: SettingsListDsl.() -> Unit): List<@Composable () -> Unit> { +@Composable +fun SettingsDsl.settingsListDsl( + content: @Composable SettingsListDsl.() -> Unit +): List<@Composable () -> Unit> { val data = SettingsListDslData() data.content() return data.items @@ -41,7 +44,16 @@ private class SettingsListDslData : SettingsListDsl { description: String?, onClick: (() -> Unit)? ) { - addCompose {} + addCompose { + SettingsListItem( + icon = icon, + title = title, + enabled = enabled, + description = description, + onClick = onClick, + content = null, + ) + } } override fun description(text: String, icon: ImageVector?) {} diff --git a/app-compose/src/main/kotlin/com/pitchedapps/frost/settings/screens/MainSettingsScreen.kt b/app-compose/src/main/kotlin/com/pitchedapps/frost/settings/screens/MainSettingsScreen.kt new file mode 100644 index 000000000..06dda2a01 --- /dev/null +++ b/app-compose/src/main/kotlin/com/pitchedapps/frost/settings/screens/MainSettingsScreen.kt @@ -0,0 +1,90 @@ +/* + * Copyright 2023 Allan Wang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.pitchedapps.frost.settings.screens + +import androidx.compose.material.icons.Icons.Outlined as MaterialIcons +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.material.icons.outlined.Newspaper +import androidx.compose.material.icons.outlined.Notifications +import androidx.compose.material.icons.outlined.Palette +import androidx.compose.material.icons.outlined.Replay +import androidx.compose.material.icons.outlined.Translate +import androidx.compose.material.icons.outlined.TrendingUp +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import com.pitchedapps.frost.R +import com.pitchedapps.frost.compose.settings.SettingsListDsl + +@Composable +fun MainSettingsScreen(modifier: Modifier = Modifier) { + SettingsListDsl(modifier = modifier) { + item( + icon = MaterialIcons.Palette, + title = stringResource(id = R.string.appearance), + description = stringResource(id = R.string.appearance_desc), + ) + item( + icon = MaterialIcons.TrendingUp, + title = stringResource(id = R.string.behaviour), + description = stringResource(id = R.string.behaviour_desc), + ) + item( + icon = MaterialIcons.Newspaper, + title = stringResource(id = R.string.newsfeed), + description = stringResource(id = R.string.newsfeed_desc), + ) + item( + icon = MaterialIcons.Notifications, + title = stringResource(id = R.string.notifications), + description = stringResource(id = R.string.notifications_desc), + ) + item( + icon = MaterialIcons.Lock, + title = stringResource(id = R.string.security), + description = stringResource(id = R.string.security_desc), + ) + item( + icon = MaterialIcons.Info, + title = stringResource(id = R.string.about_frost), + description = stringResource(id = R.string.about_frost_desc), + ) + item( + icon = MaterialIcons.Translate, + title = stringResource(id = R.string.help_translate), + description = stringResource(id = R.string.help_translate_desc), + ) + item( + icon = MaterialIcons.Replay, + title = stringResource(id = R.string.replay_intro), + ) + // item( + // icon = MaterialIcons.Science, + // title = stringResource(id = R.string.experimental), + // description = stringResource(id = R.string.experimental_desc), + // ) + } +} + +@Preview +@Composable +fun MainSettingsScreenPreview() { + MaterialTheme { MainSettingsScreen() } +}