fix: Update theme dialog styling to match M3 expressive

This commit also fixes a failing CI build pipeline
This commit is contained in:
Nishant Mishra
2025-09-27 12:31:49 +05:30
parent db82dd4c03
commit a7b6093737
3 changed files with 29 additions and 14 deletions

View File

@@ -37,7 +37,6 @@ import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation3.runtime.entry
import androidx.navigation3.runtime.entryProvider import androidx.navigation3.runtime.entryProvider
import androidx.navigation3.runtime.rememberNavBackStack import androidx.navigation3.runtime.rememberNavBackStack
import androidx.navigation3.ui.NavDisplay import androidx.navigation3.ui.NavDisplay

View File

@@ -7,6 +7,7 @@
package org.nsh07.pomodoro.ui.settingsScreen package org.nsh07.pomodoro.ui.settingsScreen
import androidx.compose.animation.AnimatedContent
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
@@ -21,11 +22,11 @@ import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.Icon
import androidx.compose.material3.ListItem import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.MaterialTheme.colorScheme import androidx.compose.material3.MaterialTheme.colorScheme
import androidx.compose.material3.MaterialTheme.shapes import androidx.compose.material3.MaterialTheme.shapes
import androidx.compose.material3.RadioButton
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
@@ -35,9 +36,12 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.Role
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import org.nsh07.pomodoro.R
import org.nsh07.pomodoro.ui.theme.CustomColors.listItemColors import org.nsh07.pomodoro.ui.theme.CustomColors.listItemColors
import org.nsh07.pomodoro.ui.theme.CustomColors.selectedListItemColors
import org.nsh07.pomodoro.ui.theme.TomatoShapeDefaults.bottomListItemShape import org.nsh07.pomodoro.ui.theme.TomatoShapeDefaults.bottomListItemShape
import org.nsh07.pomodoro.ui.theme.TomatoShapeDefaults.middleListItemShape import org.nsh07.pomodoro.ui.theme.TomatoShapeDefaults.middleListItemShape
import org.nsh07.pomodoro.ui.theme.TomatoShapeDefaults.topListItemShape import org.nsh07.pomodoro.ui.theme.TomatoShapeDefaults.topListItemShape
@@ -70,28 +74,30 @@ fun ThemeDialog(
text = "Choose theme", text = "Choose theme",
style = MaterialTheme.typography.headlineSmall style = MaterialTheme.typography.headlineSmall
) )
Spacer(modifier = Modifier.height(24.dp)) Spacer(modifier = Modifier.height(16.dp))
Column( Column(
verticalArrangement = Arrangement.spacedBy(2.dp), verticalArrangement = Arrangement.spacedBy(2.dp),
modifier = Modifier.selectableGroup() modifier = Modifier.selectableGroup()
) { ) {
themeMap.entries.forEachIndexed { index: Int, pair: Map.Entry<String, Pair<Int, String>> -> themeMap.entries.forEachIndexed { index: Int, pair: Map.Entry<String, Pair<Int, String>> ->
val text = pair.value.second val text = pair.value.second
val selected = text == selectedOption.value
ListItem( ListItem(
leadingContent = { leadingContent = {
RadioButton( AnimatedContent(selected) {
selected = (text == selectedOption.value), if (it)
onClick = null // null recommended for accessibility with screenreaders Icon(painterResource(R.drawable.check), null)
) else
Icon(painterResource(pair.value.first), null)
}
}, },
headlineContent = { headlineContent = {
Text( Text(text = text, style = MaterialTheme.typography.bodyLarge)
text = text,
style = MaterialTheme.typography.bodyLarge,
)
}, },
colors = listItemColors, colors = if (!selected) listItemColors else selectedListItemColors,
modifier = Modifier modifier = Modifier
.height(64.dp)
.clip( .clip(
when (index) { when (index) {
0 -> topListItemShape 0 -> topListItemShape
@@ -110,7 +116,7 @@ fun ThemeDialog(
) )
} }
} }
Spacer(modifier = Modifier.height(24.dp)) Spacer(modifier = Modifier.height(16.dp))
TextButton( TextButton(
shapes = ButtonDefaults.shapes(), shapes = ButtonDefaults.shapes(),
onClick = { setShowThemeDialog(false) }, onClick = { setShowThemeDialog(false) },

View File

@@ -30,5 +30,15 @@ object CustomColors {
val listItemColors: ListItemColors val listItemColors: ListItemColors
@Composable get() = @Composable get() =
ListItemDefaults.colors(containerColor = if (!black) colorScheme.surfaceBright else colorScheme.surfaceContainer) ListItemDefaults.colors(containerColor = if (!black) colorScheme.surfaceBright else colorScheme.surfaceContainerHigh)
val selectedListItemColors: ListItemColors
@Composable get() =
ListItemDefaults.colors(
containerColor = colorScheme.secondaryContainer,
headlineColor = colorScheme.secondary,
leadingIconColor = colorScheme.onSecondaryContainer,
supportingColor = colorScheme.onSecondaryFixedVariant,
trailingIconColor = colorScheme.onSecondaryFixedVariant
)
} }