diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/common/prefs/widgets/ListPref.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/common/prefs/widgets/ListPref.kt index 45b78df5..3c02706f 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/common/prefs/widgets/ListPref.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/common/prefs/widgets/ListPref.kt @@ -51,7 +51,8 @@ fun ListPref( textColor: Color = MaterialTheme.colors.onBackground, enabled: Boolean = true, leadingIcon: @Composable (() -> Unit)? = null, - entries: Map = mapOf(), //TODO: Change to List? + entries: Map = emptyMap(), //TODO: Change to List? + icons: Map Unit> = emptyMap(), ) { val dialogState = rememberDialogState() val selectionKey = stringPreferencesKey(key) @@ -105,6 +106,7 @@ fun ListPref( edit(current = value to title) dismiss() }, + itemIcons = icons, modifier = Modifier.padding(bottom = 16.dp) ) } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/about/AboutPage.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/about/AboutPage.kt index 16e5f66f..d4c11015 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/about/AboutPage.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/about/AboutPage.kt @@ -1,6 +1,14 @@ package com.huanchengfly.tieba.post.ui.page.settings.about -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.ButtonDefaults import androidx.compose.material.MaterialTheme @@ -13,7 +21,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import coil.compose.AsyncImage +import com.google.accompanist.drawablepainter.rememberDrawablePainter import com.google.accompanist.insets.ui.Scaffold import com.huanchengfly.tieba.post.BuildConfig import com.huanchengfly.tieba.post.R @@ -48,8 +56,12 @@ fun AboutPage( modifier = Modifier.weight(1f) ) { Column(modifier = Modifier.align(Alignment.Center)) { - AsyncImage( - model = R.mipmap.ic_launcher_new, + Image( + painter = rememberDrawablePainter( + drawable = LocalContext.current.getDrawable( + R.mipmap.ic_launcher_new + ) + ), contentDescription = null, modifier = Modifier.size(100.dp) ) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/custom/CustomSettingsPage.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/custom/CustomSettingsPage.kt index da4959e4..d21d7316 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/custom/CustomSettingsPage.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/settings/custom/CustomSettingsPage.kt @@ -1,10 +1,17 @@ package com.huanchengfly.tieba.post.ui.page.settings.custom +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.Apps +import androidx.compose.material.icons.outlined.Brightness2 +import androidx.compose.material.icons.outlined.BrightnessAuto +import androidx.compose.material.icons.outlined.Explore +import androidx.compose.material.icons.outlined.FontDownload +import androidx.compose.material.icons.outlined.ViewAgenda import androidx.compose.runtime.Composable import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier @@ -12,6 +19,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import com.google.accompanist.drawablepainter.rememberDrawablePainter import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.activities.AppFontSizeActivity import com.huanchengfly.tieba.post.dataStore @@ -21,7 +29,12 @@ import com.huanchengfly.tieba.post.ui.common.prefs.widgets.ListPref import com.huanchengfly.tieba.post.ui.common.prefs.widgets.SwitchPref import com.huanchengfly.tieba.post.ui.common.prefs.widgets.TextPref import com.huanchengfly.tieba.post.ui.page.settings.LeadingIcon -import com.huanchengfly.tieba.post.ui.widgets.compose.* +import com.huanchengfly.tieba.post.ui.widgets.compose.AvatarIcon +import com.huanchengfly.tieba.post.ui.widgets.compose.BackNavigationIcon +import com.huanchengfly.tieba.post.ui.widgets.compose.MyScaffold +import com.huanchengfly.tieba.post.ui.widgets.compose.Sizes +import com.huanchengfly.tieba.post.ui.widgets.compose.TitleCentredToolbar +import com.huanchengfly.tieba.post.utils.AppIconUtil import com.huanchengfly.tieba.post.utils.ThemeUtil import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator @@ -89,6 +102,64 @@ fun CustomSettingsPage( useSelectedAsSummary = true, ) } + prefsItem { + ListPref( + key = "app_icon", + title = stringResource(id = R.string.settings_app_icon), + defaultValue = com.huanchengfly.tieba.post.utils.Icons.DEFAULT_ICON, + leadingIcon = { + LeadingIcon { + AvatarIcon( + icon = Icons.Outlined.Apps, + size = Sizes.Small, + contentDescription = null, + ) + } + }, + entries = mapOf( + com.huanchengfly.tieba.post.utils.Icons.NEW_ICON to "新图标", + com.huanchengfly.tieba.post.utils.Icons.NEW_ICON_INVERT to "新图标(反色)", + com.huanchengfly.tieba.post.utils.Icons.OLD_ICON to "旧图标", + ), + icons = mapOf( + com.huanchengfly.tieba.post.utils.Icons.NEW_ICON to { + Image( + painter = rememberDrawablePainter( + drawable = LocalContext.current.getDrawable( + R.drawable.ic_launcher_new_round + ) + ), + contentDescription = "新图标", + modifier = Modifier.size(Sizes.Medium) + ) + }, + com.huanchengfly.tieba.post.utils.Icons.NEW_ICON_INVERT to { + Image( + painter = rememberDrawablePainter( + drawable = LocalContext.current.getDrawable( + R.drawable.ic_launcher_new_invert_round + ) + ), + contentDescription = "新图标(反色)", + modifier = Modifier.size(Sizes.Medium) + ) + }, + com.huanchengfly.tieba.post.utils.Icons.OLD_ICON to { + Image( + painter = rememberDrawablePainter( + drawable = LocalContext.current.getDrawable( + R.drawable.ic_launcher_round + ) + ), + contentDescription = "旧图标", + modifier = Modifier.size(Sizes.Medium) + ) + }, + ), + onValueChange = { AppIconUtil.setIcon(it) }, + useSelectedAsSummary = true, + ) + } prefsItem { SwitchPref( key = "follow_system_night", diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/picker/ListPicker.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/picker/ListPicker.kt index e08dcd79..5b2d9206 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/picker/ListPicker.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/picker/ListPicker.kt @@ -2,6 +2,7 @@ package com.huanchengfly.tieba.post.ui.widgets.compose.picker import androidx.compose.foundation.background import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -28,6 +29,7 @@ fun ListSinglePicker( itemValues: List, selectedPosition: Int, onItemSelected: (position: Int, title: String, value: ItemValue, changed: Boolean) -> Unit, + itemIcons: Map Unit> = emptyMap(), selectedIndicator: @Composable () -> Unit = { Icon( imageVector = Icons.Rounded.Check, @@ -57,8 +59,11 @@ fun ListSinglePicker( it != selectedPosition ) } - .padding(vertical = 16.dp, horizontal = 24.dp) + .padding(vertical = 16.dp, horizontal = 24.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically ) { + (itemIcons.getOrDefault(itemValues[it]) {}).invoke() ProvideContentColor( color = if (selected) colors.selectedItemColor(enabled).value else colors.itemColor( enabled diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e2cd543e..23fdd287 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -615,4 +615,5 @@ (按内容热度排序,每小时更新一次) 总榜 热度 %s + 应用图标