Skip to content

Commit 03acaa8

Browse files
committed
feat: Settings screen add icon shape
Signed-off-by: Hu Shenghao <dede.hu@qq.com>
1 parent ca4524f commit 03acaa8

File tree

6 files changed

+81
-3
lines changed

6 files changed

+81
-3
lines changed

app/src/main/java/com/dede/android_eggs/startup/ApplicationInitializer.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ package com.dede.android_eggs.startup
33
import android.app.Application
44
import android.content.Context
55
import androidx.startup.Initializer
6+
import com.dede.android_eggs.views.settings.compose.basic.SettingPrefUtil
67
import com.dede.android_eggs.views.settings.compose.prefs.ThemePrefUtil
78
import com.dede.basic.GlobalContext
89

910
class ApplicationInitializer : Initializer<Unit> {
1011

1112
override fun create(context: Context) {
1213
val application = context.applicationContext as Application
14+
// setup states value
15+
SettingPrefUtil.setup(application)
1316
// apply compat style
1417
ThemePrefUtil.apply(application)
1518
}

app/src/main/java/com/dede/android_eggs/views/settings/compose/basic/SettingPref.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import androidx.compose.ui.text.font.FontWeight
2323
import androidx.compose.ui.text.style.TextOverflow
2424
import androidx.compose.ui.unit.dp
2525
import com.dede.android_eggs.views.main.compose.Wavy
26+
import com.dede.android_eggs.views.settings.compose.prefs.SettingPrefIcon
2627

2728

2829
@Composable
@@ -76,9 +77,11 @@ fun SettingPref(
7677
SettingPref(
7778
modifier = modifier,
7879
leadingIcon = {
79-
Box(Modifier.padding(start = 14.dp)) {
80-
Icon(imageVector = leadingIcon, contentDescription = title)
81-
}
80+
SettingPrefIcon(
81+
icon = leadingIcon,
82+
contentDescription = title,
83+
modifier = Modifier.padding(start = 14.dp),
84+
)
8285
},
8386
title = title,
8487
desc = desc,

app/src/main/java/com/dede/android_eggs/views/settings/compose/prefs/IconShapePref.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ fun IconShapePref() {
6161
onClick = onClick@{
6262
if (selectedIndex == index) return@onClick
6363
selectedIndex = index
64+
SettingPrefUtil.iconShapeValueState.value = index
6465
val extras = bundleOf(SettingPrefUtil.EXTRA_VALUE to index)
6566
with(LocalEvent.poster()) {
6667
post(IconShapePrefUtil.ACTION_CHANGED, extras)

core/settings/src/main/java/com/dede/android_eggs/views/settings/compose/basic/SettingPrefUtil.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.dede.android_eggs.views.settings.compose.basic
22

33
import android.content.Context
4+
import androidx.compose.runtime.mutableStateOf
45
import androidx.core.content.edit
56
import com.dede.android_eggs.util.pref
7+
import com.dede.android_eggs.views.settings.compose.prefs.IconShapePrefUtil
68

79
object SettingPrefUtil {
810
const val ON = 1
@@ -19,4 +21,10 @@ object SettingPrefUtil {
1921
fun setValue(context: Context, key: String, value: Int) {
2022
context.pref.edit { putInt(key, value) }
2123
}
24+
25+
val iconShapeValueState = mutableStateOf(OFF)
26+
27+
fun setup(context: Context) {
28+
iconShapeValueState.value = getValue(context, IconShapePrefUtil.KEY_ICON_SHAPE, OFF)
29+
}
2230
}

core/settings/src/main/java/com/dede/android_eggs/views/settings/compose/prefs/IconShapePrefUtil.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ object IconShapePrefUtil {
5656
return polygonItems.getOrNull(index)
5757
}
5858

59+
fun getIconShapeRoundedPolygon(index: Int): RoundedPolygon? {
60+
return polygonItems.getOrNull(index)
61+
}
62+
5963
@Composable
6064
fun getIconShapePref(): Shape {
6165
val roundedPolygon = getIconShapeRoundedPolygon(LocalContext.current)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.dede.android_eggs.views.settings.compose.prefs
2+
3+
import androidx.compose.foundation.layout.padding
4+
import androidx.compose.material3.Card
5+
import androidx.compose.material3.CardDefaults
6+
import androidx.compose.material3.Icon
7+
import androidx.compose.material3.MaterialTheme.colorScheme
8+
import androidx.compose.runtime.Composable
9+
import androidx.compose.runtime.LaunchedEffect
10+
import androidx.compose.runtime.getValue
11+
import androidx.compose.runtime.mutableStateOf
12+
import androidx.compose.runtime.remember
13+
import androidx.compose.runtime.setValue
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.graphics.Shape
16+
import androidx.compose.ui.graphics.vector.ImageVector
17+
import androidx.compose.ui.unit.dp
18+
import androidx.graphics.shapes.RoundedPolygon
19+
import com.dede.android_eggs.views.settings.compose.basic.SettingPrefUtil
20+
import com.dede.android_eggs.views.settings.compose.prefs.IconShapePrefUtil.toShapePlus
21+
22+
@Composable
23+
fun SettingPrefIcon(
24+
icon: ImageVector,
25+
modifier: Modifier = Modifier,
26+
contentDescription: String? = null,
27+
) {
28+
val iconShapeIndex by SettingPrefUtil.iconShapeValueState
29+
var newPolygon: RoundedPolygon? by remember { mutableStateOf(null) }
30+
LaunchedEffect(iconShapeIndex) {
31+
newPolygon = IconShapePrefUtil.getIconShapeRoundedPolygon(iconShapeIndex)
32+
}
33+
SettingPrefIcon(
34+
icon = icon,
35+
modifier = modifier,
36+
shape = newPolygon.toShapePlus(),
37+
contentDescription = contentDescription,
38+
)
39+
}
40+
41+
@Composable
42+
fun SettingPrefIcon(
43+
icon: ImageVector,
44+
shape: Shape,
45+
modifier: Modifier = Modifier,
46+
contentDescription: String? = null,
47+
) {
48+
Card(
49+
modifier = modifier,
50+
shape = shape,
51+
colors = CardDefaults.cardColors(containerColor = colorScheme.primaryContainer)
52+
) {
53+
Icon(
54+
imageVector = icon,
55+
contentDescription = contentDescription,
56+
modifier = Modifier.padding(6.dp)
57+
)
58+
}
59+
}

0 commit comments

Comments
 (0)