Skip to content

Commit 4b9fd12

Browse files
authored
Merge pull request #489 from angeles-bilbao6/issue487/jetsnack-button-state
[Jetsnack] Create styles for different button states
2 parents 50567fb + c5f2ba0 commit 4b9fd12

File tree

3 files changed

+94
-24
lines changed

3 files changed

+94
-24
lines changed

Jetsnack/app/src/main/java/com/example/jetsnack/ui/components/Filters.kt

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
package com.example.jetsnack.ui.components
1818

1919
import androidx.compose.animation.animateColorAsState
20+
import androidx.compose.foundation.background
21+
import androidx.compose.foundation.interaction.MutableInteractionSource
22+
import androidx.compose.foundation.interaction.collectIsPressedAsState
2023
import androidx.compose.foundation.layout.Arrangement
2124
import androidx.compose.foundation.layout.Box
2225
import androidx.compose.foundation.layout.PaddingValues
@@ -35,8 +38,10 @@ import androidx.compose.material.icons.Icons
3538
import androidx.compose.material.icons.rounded.FilterList
3639
import androidx.compose.runtime.Composable
3740
import androidx.compose.runtime.getValue
41+
import androidx.compose.runtime.remember
3842
import androidx.compose.ui.Alignment
3943
import androidx.compose.ui.Modifier
44+
import androidx.compose.ui.graphics.Color
4045
import androidx.compose.ui.graphics.Shape
4146
import androidx.compose.ui.res.stringResource
4247
import androidx.compose.ui.unit.dp
@@ -46,10 +51,11 @@ import com.example.jetsnack.ui.theme.JetsnackTheme
4651

4752
@Composable
4853
fun FilterBar(filters: List<Filter>) {
54+
4955
LazyRow(
5056
verticalAlignment = Alignment.CenterVertically,
5157
horizontalArrangement = Arrangement.spacedBy(8.dp),
52-
contentPadding = PaddingValues(start = 8.dp, end = 8.dp),
58+
contentPadding = PaddingValues(start = 12.dp, end = 8.dp),
5359
modifier = Modifier.heightIn(min = 56.dp)
5460
) {
5561
item {
@@ -79,31 +85,49 @@ fun FilterChip(
7985
) {
8086
val (selected, setSelected) = filter.enabled
8187
val backgroundColor by animateColorAsState(
82-
if (selected) JetsnackTheme.colors.brand else JetsnackTheme.colors.uiBackground
88+
if (selected) JetsnackTheme.colors.brandSecondary else JetsnackTheme.colors.uiBackground
8389
)
8490
val border = Modifier.fadeInDiagonalGradientBorder(
8591
showBorder = !selected,
8692
colors = JetsnackTheme.colors.interactiveSecondary,
8793
shape = shape
8894
)
8995
val textColor by animateColorAsState(
90-
if (selected) JetsnackTheme.colors.textInteractive else JetsnackTheme.colors.textSecondary
96+
if (selected) Color.Black else JetsnackTheme.colors.textSecondary
9197
)
98+
9299
JetsnackSurface(
93-
modifier = modifier
94-
.height(28.dp)
95-
.then(border),
100+
modifier = modifier.height(28.dp),
96101
color = backgroundColor,
97102
contentColor = textColor,
98103
shape = shape,
99104
elevation = 2.dp
100105
) {
106+
val interactionSource = remember { MutableInteractionSource() }
107+
108+
val pressed by interactionSource.collectIsPressedAsState()
109+
val backgroundPressed =
110+
if (pressed) {
111+
Modifier.offsetGradientBackground(
112+
JetsnackTheme.colors.interactiveSecondary,
113+
200f,
114+
0f
115+
)
116+
} else {
117+
Modifier.background(Color.Transparent)
118+
}
101119
Box(
102-
modifier = Modifier.toggleable(
103-
value = selected,
104-
onValueChange = setSelected
105-
)
120+
modifier = Modifier
121+
.toggleable(
122+
value = selected,
123+
onValueChange = setSelected,
124+
interactionSource = interactionSource,
125+
indication = null
126+
)
127+
.then(backgroundPressed)
128+
.then(border),
106129
) {
130+
107131
Text(
108132
text = filter.name,
109133
style = MaterialTheme.typography.caption,

Jetsnack/app/src/main/java/com/example/jetsnack/ui/components/GradientTintedIconButton.kt

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,18 @@
1616

1717
package com.example.jetsnack.ui.components
1818

19+
import androidx.compose.foundation.background
20+
import androidx.compose.foundation.clickable
21+
import androidx.compose.foundation.interaction.MutableInteractionSource
22+
import androidx.compose.foundation.interaction.collectIsPressedAsState
23+
import androidx.compose.foundation.shape.CircleShape
1924
import androidx.compose.material.Icon
20-
import androidx.compose.material.IconButton
25+
import androidx.compose.material.Surface
2126
import androidx.compose.runtime.Composable
27+
import androidx.compose.runtime.getValue
28+
import androidx.compose.runtime.remember
2229
import androidx.compose.ui.Modifier
30+
import androidx.compose.ui.draw.clip
2331
import androidx.compose.ui.graphics.BlendMode
2432
import androidx.compose.ui.graphics.Color
2533
import androidx.compose.ui.graphics.vector.ImageVector
@@ -33,16 +41,51 @@ fun JetsnackGradientTintedIconButton(
3341
modifier: Modifier = Modifier,
3442
colors: List<Color> = JetsnackTheme.colors.interactiveSecondary
3543
) {
44+
val interactionSource = remember { MutableInteractionSource() }
45+
3646
// This should use a layer + srcIn but needs investigation
47+
val border = Modifier.fadeInDiagonalGradientBorder(
48+
showBorder = true,
49+
colors = JetsnackTheme.colors.interactiveSecondary,
50+
shape = CircleShape
51+
)
52+
val pressed by interactionSource.collectIsPressedAsState()
53+
val background = if (pressed) {
54+
Modifier.offsetGradientBackground(colors, 200f, 0f)
55+
} else {
56+
Modifier.background(JetsnackTheme.colors.uiBackground)
57+
}
3758
val blendMode = if (JetsnackTheme.colors.isDark) BlendMode.Darken else BlendMode.Plus
38-
IconButton(onClick = onClick, modifier) {
59+
val modifierColor = if (pressed) {
60+
Modifier.diagonalGradientTint(
61+
colors = listOf(
62+
JetsnackTheme.colors.textSecondary,
63+
JetsnackTheme.colors.textSecondary
64+
),
65+
blendMode = blendMode
66+
)
67+
} else {
68+
Modifier.diagonalGradientTint(
69+
colors = colors,
70+
blendMode = blendMode
71+
)
72+
}
73+
Surface(
74+
modifier = modifier
75+
.clickable(
76+
onClick = onClick,
77+
interactionSource = interactionSource,
78+
indication = null
79+
)
80+
.clip(CircleShape)
81+
.then(border)
82+
.then(background),
83+
color = Color.Transparent
84+
) {
3985
Icon(
4086
imageVector = imageVector,
4187
contentDescription = contentDescription,
42-
modifier = Modifier.diagonalGradientTint(
43-
colors = colors,
44-
blendMode = blendMode
45-
)
88+
modifier = modifierColor
4689
)
4790
}
4891
}

Jetsnack/app/src/main/java/com/example/jetsnack/ui/components/QuantitySelector.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717
package com.example.jetsnack.ui.components
1818

1919
import androidx.compose.animation.Crossfade
20+
import androidx.compose.foundation.layout.padding
2021
import androidx.compose.foundation.layout.widthIn
2122
import androidx.compose.material.ContentAlpha
2223
import androidx.compose.material.LocalContentAlpha
2324
import androidx.compose.material.MaterialTheme
2425
import androidx.compose.material.Text
2526
import androidx.compose.material.icons.Icons
26-
import androidx.compose.material.icons.outlined.AddCircleOutline
27-
import androidx.compose.material.icons.outlined.RemoveCircleOutline
27+
import androidx.compose.material.icons.filled.Add
28+
import androidx.compose.material.icons.filled.Remove
2829
import androidx.compose.runtime.Composable
2930
import androidx.compose.runtime.CompositionLocalProvider
3031
import androidx.compose.ui.Modifier
@@ -53,14 +54,16 @@ fun QuantitySelector(
5354
text = stringResource(R.string.quantity),
5455
style = MaterialTheme.typography.subtitle1,
5556
color = JetsnackTheme.colors.textSecondary,
56-
modifier = Modifier.constrainAs(qty) {
57-
start.linkTo(parent.start)
58-
linkTo(top = parent.top, bottom = parent.bottom)
59-
}
57+
modifier = Modifier
58+
.padding(end = 18.dp)
59+
.constrainAs(qty) {
60+
start.linkTo(parent.start)
61+
linkTo(top = parent.top, bottom = parent.bottom)
62+
}
6063
)
6164
}
6265
JetsnackGradientTintedIconButton(
63-
imageVector = Icons.Outlined.RemoveCircleOutline,
66+
imageVector = Icons.Default.Remove,
6467
onClick = decreaseItemCount,
6568
contentDescription = stringResource(R.string.label_decrease),
6669
modifier = Modifier.constrainAs(minus) {
@@ -83,7 +86,7 @@ fun QuantitySelector(
8386
)
8487
}
8588
JetsnackGradientTintedIconButton(
86-
imageVector = Icons.Outlined.AddCircleOutline,
89+
imageVector = Icons.Default.Add,
8790
onClick = increaseItemCount,
8891
contentDescription = stringResource(R.string.label_increase),
8992
modifier = Modifier.constrainAs(plus) {

0 commit comments

Comments
 (0)