Skip to content

Commit b09e98c

Browse files
committed
feat: Update setting prefs space
Signed-off-by: Hu Shenghao <dede.hu@qq.com>
1 parent 56d6b4c commit b09e98c

File tree

6 files changed

+71
-71
lines changed

6 files changed

+71
-71
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import androidx.compose.material.icons.Icons
2323
import androidx.compose.material.icons.automirrored.rounded.NavigateNext
2424
import androidx.compose.material.icons.rounded.KeyboardArrowDown
2525
import androidx.compose.material3.Card
26+
import androidx.compose.material3.CardColors
2627
import androidx.compose.material3.CardDefaults
2728
import androidx.compose.material3.Icon
2829
import androidx.compose.material3.MaterialTheme
@@ -110,7 +111,7 @@ fun ExpandOptionsPref(
110111
modifier = Modifier
111112
.padding(horizontal = 10.dp)
112113
.padding(top = 4.dp, bottom = 10.dp),
113-
verticalArrangement = Arrangement.spacedBy(4.dp),
114+
verticalArrangement = Arrangement.spacedBy(6.dp),
114115
content = options
115116
)
116117
}
@@ -335,12 +336,13 @@ fun Option(
335336
Icon(imageVector = Icons.AutoMirrored.Rounded.NavigateNext, contentDescription = title)
336337
},
337338
shape: Shape = OptionShapes.defaultShape,
339+
colors: CardColors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface),
338340
onClick: () -> Unit = {},
339341
) {
340342
Card(
341343
onClick = onClick,
342344
shape = shape,
343-
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface),
345+
colors = colors,
344346
modifier = modifier
345347
) {
346348
Row(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ fun SettingPref(
118118
) {
119119
Row(
120120
verticalAlignment = Alignment.CenterVertically,
121-
modifier = Modifier.defaultMinSize(minHeight = 54.dp)
121+
modifier = Modifier.defaultMinSize(minHeight = 58.dp)
122122
) {
123123
if (leadingIcon != null) {
124124
leadingIcon()

app/src/main/java/com/dede/android_eggs/views/settings/compose/groups/AboutGroup.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import com.dede.android_eggs.ui.composes.icons.outlined.Beta
2323
import com.dede.android_eggs.util.CustomTabsBrowser
2424
import com.dede.android_eggs.views.settings.compose.basic.ExpandOptionsPref
2525
import com.dede.android_eggs.views.settings.compose.basic.Option
26+
import com.dede.android_eggs.views.settings.compose.basic.OptionShapes
2627
import com.dede.android_eggs.views.settings.compose.basic.imageVectorIconBlock
2728
import com.dede.android_eggs.views.settings.compose.options.GithubOption
2829
import com.dede.android_eggs.views.settings.compose.options.TestCrashOption
@@ -38,7 +39,7 @@ fun AboutGroup() {
3839
leadingIcon = Icons.Rounded.Info,
3940
title = stringResource(StringsR.string.label_about)
4041
) {
41-
VersionOption()
42+
VersionOption(shape = OptionShapes.firstShape())
4243
Option(
4344
leadingIcon = {
4445
Icon(
@@ -94,7 +95,8 @@ fun AboutGroup() {
9495
title = stringResource(StringsR.string.label_wiki),
9596
onClick = {
9697
CustomTabsBrowser.launchUrl(context, R.string.url_wiki)
97-
}
98+
},
99+
shape = OptionShapes.lastShape()
98100
)
99101

100102
if (BuildConfig.DEBUG) {

app/src/main/java/com/dede/android_eggs/views/settings/compose/options/TestCrashOption.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,22 @@ package com.dede.android_eggs.views.settings.compose.options
22

33
import androidx.compose.material.icons.Icons
44
import androidx.compose.material.icons.rounded.SentimentDissatisfied
5+
import androidx.compose.material3.CardDefaults
6+
import androidx.compose.material3.MaterialTheme
57
import androidx.compose.runtime.Composable
68
import com.dede.android_eggs.views.settings.compose.basic.Option
9+
import com.dede.android_eggs.views.settings.compose.basic.OptionShapes
710
import com.dede.android_eggs.views.settings.compose.basic.imageVectorIconBlock
811
import com.dede.basic.uiHandler
912

1013
@Composable
1114
fun TestCrashOption() {
1215
Option(
1316
leadingIcon = imageVectorIconBlock(Icons.Rounded.SentimentDissatisfied),
14-
title = "Test Crash",
17+
title = "Test crash",
18+
desc = "Click to trigger a test crash.",
19+
shape = OptionShapes.borderShape,
20+
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.errorContainer),
1521
onClick = {
1622
uiHandler.post {
1723
throw IllegalStateException("This is a test crash triggered by TestCrashOption.")

app/src/main/java/com/dede/android_eggs/views/settings/compose/options/VersionOption.kt

Lines changed: 41 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@
33
package com.dede.android_eggs.views.settings.compose.options
44

55
import androidx.activity.compose.LocalActivity
6-
import androidx.compose.animation.core.LinearEasing
76
import androidx.compose.animation.core.RepeatMode
87
import androidx.compose.animation.core.animateFloat
98
import androidx.compose.animation.core.infiniteRepeatable
109
import androidx.compose.animation.core.rememberInfiniteTransition
1110
import androidx.compose.animation.core.tween
1211
import androidx.compose.foundation.layout.Arrangement
13-
import androidx.compose.foundation.layout.Box
1412
import androidx.compose.foundation.layout.Row
1513
import androidx.compose.foundation.layout.Spacer
1614
import androidx.compose.foundation.layout.fillMaxWidth
@@ -30,13 +28,15 @@ import androidx.compose.material3.Text
3028
import androidx.compose.material3.TextButton
3129
import androidx.compose.material3.toShape
3230
import androidx.compose.runtime.Composable
31+
import androidx.compose.runtime.MutableState
3332
import androidx.compose.runtime.getValue
3433
import androidx.compose.runtime.mutableStateOf
3534
import androidx.compose.runtime.remember
3635
import androidx.compose.runtime.rememberCoroutineScope
3736
import androidx.compose.runtime.setValue
3837
import androidx.compose.ui.Alignment
3938
import androidx.compose.ui.Modifier
39+
import androidx.compose.ui.graphics.Shape
4040
import androidx.compose.ui.graphics.graphicsLayer
4141
import androidx.compose.ui.platform.LocalContext
4242
import androidx.compose.ui.res.stringResource
@@ -60,11 +60,11 @@ import com.dede.android_eggs.resources.R as StringR
6060

6161

6262
@Composable
63-
fun VersionOption() {
63+
fun VersionOption(shape: Shape = OptionShapes.defaultShape) {
6464
val context = LocalContext.current
6565
val (versionName, versionCode) = remember(context) { Utils.getAppVersionPair(context) }
6666
Option(
67-
shape = OptionShapes.firstShape(),
67+
shape = shape,
6868
leadingIcon = imageVectorIconBlock(imageVector = Icons.Outlined.NewReleases),
6969
title = stringResource(R.string.label_version, versionName, versionCode),
7070
desc = AGPUtils.getVcsRevision(7),
@@ -90,66 +90,57 @@ fun VersionOption() {
9090
)
9191
}
9292

93+
private val newVersionState: MutableState<LatestVersion?> = mutableStateOf(null)
94+
9395
@Composable
9496
private fun UpgradeIconButton() {
95-
var newVersion: LatestVersion? by remember { mutableStateOf(null) }
96-
Box(
97-
modifier = Modifier.offset(x = 4.dp),// fix padding end of Option
98-
contentAlignment = Alignment.Center
99-
) {
100-
val context = LocalContext.current
101-
val activity = LocalActivity.current
102-
val coroutineScope = rememberCoroutineScope()
97+
var newVersion: LatestVersion? by remember { newVersionState }
10398

104-
var iconButtonAnimatable by remember { mutableStateOf(true) }
105-
val infiniteTransition =
106-
rememberInfiniteTransition(label = "UpgradeIconButtonInfiniteTransition")
107-
val scale by infiniteTransition.animateFloat(
108-
initialValue = 1f, targetValue = 1.2f,
109-
animationSpec = infiniteRepeatable(tween(1000), RepeatMode.Reverse)
110-
)
111-
val degrees by infiniteTransition.animateFloat(
112-
initialValue = 0f, targetValue = 360f,
113-
animationSpec = infiniteRepeatable(
114-
animation = tween(2200, easing = LinearEasing),
115-
repeatMode = RepeatMode.Restart
116-
)
117-
)
118-
FilledTonalIconButton(
119-
modifier = Modifier.graphicsLayer {
99+
val context = LocalContext.current
100+
val activity = LocalActivity.current
101+
val coroutineScope = rememberCoroutineScope()
102+
103+
var iconButtonAnimatable by remember { mutableStateOf(true) }
104+
val infiniteTransition =
105+
rememberInfiniteTransition(label = "UpgradeIconButtonInfiniteTransition")
106+
val scale by infiniteTransition.animateFloat(
107+
initialValue = 1f, targetValue = 1.2f,
108+
animationSpec = infiniteRepeatable(tween(800), RepeatMode.Reverse)
109+
)
110+
FilledTonalIconButton(
111+
modifier = Modifier
112+
.offset(x = 4.dp)// fix padding end of Option
113+
.graphicsLayer {
120114
if (iconButtonAnimatable) {
121115
scaleY = scale
122116
scaleX = scale
123-
rotationZ = degrees
124117
}
125118
},
126-
shapes = IconButtonShapes(MaterialShapes.Cookie12Sided.toShape()),
127-
onClick = onClick@{
128-
if (activity == null) {
129-
iconButtonAnimatable = false
130-
return@onClick
131-
}
132-
coroutineScope.launch {
133-
val latestVersion = FlavorFeatures.get().checkUpdate(activity)
134-
if (latestVersion != null) {
135-
if (compareStringVersion(
136-
latestVersion.versionName,
137-
Utils.getAppVersionPair(context).first
138-
) > 0
139-
) {
140-
newVersion = latestVersion
141-
} else {
142-
context.toast(StringR.string.toast_no_update_found)
143-
iconButtonAnimatable = false
144-
}
119+
shapes = IconButtonShapes(MaterialShapes.Cookie12Sided.toShape()),
120+
onClick = onClick@{
121+
if (activity == null) {
122+
iconButtonAnimatable = false
123+
return@onClick
124+
}
125+
coroutineScope.launch {
126+
val latestVersion = FlavorFeatures.get().checkUpdate(activity)
127+
if (latestVersion != null) {
128+
if (compareStringVersion(
129+
latestVersion.versionName,
130+
Utils.getAppVersionPair(context).first
131+
) > 0
132+
) {
133+
newVersion = latestVersion
145134
} else {
135+
context.toast(StringR.string.toast_no_update_found)
146136
iconButtonAnimatable = false
147137
}
138+
} else {
139+
iconButtonAnimatable = false
148140
}
149141
}
150-
) {
151-
// no content
152142
}
143+
) {
153144
Icon(imageVector = Icons.Rounded.Upgrade, contentDescription = null)
154145
}
155146

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

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,21 @@ fun IconShapePref() {
5454
) {
5555
IconShapeGridLayout {
5656
polygonItems.forEachIndexed { index, roundedPolygon ->
57-
Box(modifier = Modifier.padding(4.dp)) {
58-
ShapeItem(
59-
isChecked = index == selectedIndex,
60-
polygon = roundedPolygon.toShapePlusNullable(),
61-
onClick = onClick@{
62-
if (selectedIndex == index) return@onClick
63-
selectedIndex = index
64-
SettingPrefUtil.iconShapeValueState.value = index
65-
val extras = bundleOf(SettingPrefUtil.EXTRA_VALUE to index)
66-
with(LocalEvent.poster()) {
67-
post(IconShapePrefUtil.ACTION_CHANGED, extras)
68-
post(SettingPrefUtil.ACTION_CLOSE_SETTING)
69-
}
57+
ShapeItem(
58+
modifier = Modifier.padding(2.dp),
59+
isChecked = index == selectedIndex,
60+
polygon = roundedPolygon.toShapePlusNullable(),
61+
onClick = onClick@{
62+
if (selectedIndex == index) return@onClick
63+
selectedIndex = index
64+
SettingPrefUtil.iconShapeValueState.value = index
65+
val extras = bundleOf(SettingPrefUtil.EXTRA_VALUE to index)
66+
with(LocalEvent.poster()) {
67+
post(IconShapePrefUtil.ACTION_CHANGED, extras)
68+
post(SettingPrefUtil.ACTION_CLOSE_SETTING)
7069
}
71-
)
72-
}
70+
}
71+
)
7372
}
7473
}
7574
}

0 commit comments

Comments
 (0)