feat: 新增更换应用图标

This commit is contained in:
HuanCheng65 2023-01-05 14:51:20 +08:00
parent 6eef2fcf06
commit 033d7cafa5
No known key found for this signature in database
GPG Key ID: E9031EF91A805148
5 changed files with 99 additions and 8 deletions

View File

@ -51,7 +51,8 @@ fun ListPref(
textColor: Color = MaterialTheme.colors.onBackground,
enabled: Boolean = true,
leadingIcon: @Composable (() -> Unit)? = null,
entries: Map<String, String> = mapOf(), //TODO: Change to List?
entries: Map<String, String> = emptyMap(), //TODO: Change to List?
icons: Map<String, @Composable () -> 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)
)
}

View File

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

View File

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

View File

@ -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 <ItemValue> ListSinglePicker(
itemValues: List<ItemValue>,
selectedPosition: Int,
onItemSelected: (position: Int, title: String, value: ItemValue, changed: Boolean) -> Unit,
itemIcons: Map<ItemValue, @Composable () -> Unit> = emptyMap(),
selectedIndicator: @Composable () -> Unit = {
Icon(
imageVector = Icons.Rounded.Check,
@ -57,8 +59,11 @@ fun <ItemValue> 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

View File

@ -615,4 +615,5 @@
<string name="hot_thread_rank_rule">(按内容热度排序,每小时更新一次)</string>
<string name="tab_all_hot_thread">总榜</string>
<string name="hot_num">热度 %s</string>
<string name="settings_app_icon">应用图标</string>
</resources>