Skip to content

Commit 56230a7

Browse files
authored
[Jetcaster] Switched to FilterChip for improved readability (#1496)
2 parents c98fc47 + d6455f1 commit 56230a7

File tree

1 file changed

+40
-59
lines changed
  • Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/discover

1 file changed

+40
-59
lines changed

Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/discover/Discover.kt

Lines changed: 40 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,27 @@
1616

1717
package com.example.jetcaster.ui.home.discover
1818

19-
import androidx.compose.foundation.layout.Row
19+
import androidx.compose.foundation.layout.PaddingValues
2020
import androidx.compose.foundation.layout.Spacer
2121
import androidx.compose.foundation.layout.fillMaxWidth
2222
import androidx.compose.foundation.layout.height
2323
import androidx.compose.foundation.layout.padding
2424
import androidx.compose.foundation.lazy.LazyListScope
25+
import androidx.compose.foundation.lazy.LazyRow
2526
import androidx.compose.foundation.lazy.grid.LazyGridScope
27+
import androidx.compose.foundation.lazy.itemsIndexed
2628
import androidx.compose.material.icons.Icons
2729
import androidx.compose.material.icons.filled.Check
2830
import androidx.compose.material3.ExperimentalMaterial3Api
31+
import androidx.compose.material3.FilterChip
32+
import androidx.compose.material3.FilterChipDefaults
2933
import androidx.compose.material3.Icon
30-
import androidx.compose.material3.LocalMinimumInteractiveComponentSize
3134
import androidx.compose.material3.MaterialTheme
32-
import androidx.compose.material3.ScrollableTabRow
33-
import androidx.compose.material3.Surface
34-
import androidx.compose.material3.TabPosition
3535
import androidx.compose.material3.Text
3636
import androidx.compose.runtime.Composable
37-
import androidx.compose.runtime.CompositionLocalProvider
3837
import androidx.compose.ui.Alignment
3938
import androidx.compose.ui.Modifier
40-
import androidx.compose.ui.graphics.Color
4139
import androidx.compose.ui.res.stringResource
42-
import androidx.compose.ui.unit.Dp
4340
import androidx.compose.ui.unit.dp
4441
import com.example.jetcaster.R
4542
import com.example.jetcaster.core.model.CategoryInfo
@@ -122,8 +119,6 @@ fun LazyGridScope.discoverItems(
122119
)
123120
}
124121

125-
private val emptyTabIndicator: @Composable (List<TabPosition>) -> Unit = {}
126-
127122
@Composable
128123
private fun PodcastCategoryTabs(
129124
filterableCategoriesModel: FilterableCategoriesModel,
@@ -133,15 +128,15 @@ private fun PodcastCategoryTabs(
133128
val selectedIndex = filterableCategoriesModel.categories.indexOf(
134129
filterableCategoriesModel.selectedCategory
135130
)
136-
ScrollableTabRow(
137-
selectedTabIndex = selectedIndex,
138-
containerColor = Color.Transparent,
139-
divider = {}, /* Disable the built-in divider */
140-
edgePadding = Keyline1,
141-
indicator = emptyTabIndicator,
142-
modifier = modifier
131+
LazyRow(
132+
modifier = modifier,
133+
contentPadding = PaddingValues(horizontal = Keyline1),
134+
verticalAlignment = Alignment.CenterVertically,
143135
) {
144-
filterableCategoriesModel.categories.forEachIndexed { index, category ->
136+
itemsIndexed(
137+
items = filterableCategoriesModel.categories,
138+
key = { i, category -> category.id }
139+
) { index, category ->
145140
ChoiceChipContent(
146141
text = category.name,
147142
selected = index == selectedIndex,
@@ -160,47 +155,33 @@ private fun ChoiceChipContent(
160155
onClick: () -> Unit,
161156
modifier: Modifier = Modifier
162157
) {
163-
// When adding onClick to Surface, it automatically makes this item higher.
164-
// On the other hand, adding .clickable modifier, doesn't use the same shape as Surface.
165-
// This way we disable the minimum height requirement
166-
CompositionLocalProvider(value = LocalMinimumInteractiveComponentSize provides Dp.Unspecified) {
167-
Surface(
168-
color = when {
169-
selected -> MaterialTheme.colorScheme.secondaryContainer
170-
else -> MaterialTheme.colorScheme.surfaceContainer
171-
},
172-
contentColor = when {
173-
selected -> MaterialTheme.colorScheme.onSecondaryContainer
174-
else -> MaterialTheme.colorScheme.onSurfaceVariant
175-
},
176-
shape = MaterialTheme.shapes.medium,
177-
modifier = modifier,
178-
onClick = onClick,
179-
) {
180-
Row(
181-
verticalAlignment = Alignment.CenterVertically,
182-
modifier = Modifier.padding(
183-
horizontal = when {
184-
selected -> 8.dp
185-
else -> 16.dp
186-
},
187-
vertical = 8.dp
188-
)
189-
) {
190-
if (selected) {
191-
Icon(
192-
imageVector = Icons.Default.Check,
193-
contentDescription = stringResource(id = R.string.cd_selected_category),
194-
modifier = Modifier
195-
.height(18.dp)
196-
.padding(end = 8.dp)
197-
)
198-
}
199-
Text(
200-
text = text,
201-
style = MaterialTheme.typography.bodyMedium,
158+
FilterChip(
159+
selected = selected,
160+
onClick = onClick,
161+
leadingIcon = {
162+
if (selected) {
163+
Icon(
164+
imageVector = Icons.Default.Check,
165+
contentDescription = stringResource(id = R.string.cd_selected_category),
166+
modifier = Modifier.height(18.dp)
202167
)
203168
}
204-
}
205-
}
169+
},
170+
label = {
171+
Text(
172+
text = text,
173+
style = MaterialTheme.typography.bodyMedium,
174+
)
175+
},
176+
colors = FilterChipDefaults.filterChipColors().copy(
177+
containerColor = MaterialTheme.colorScheme.surfaceContainer,
178+
labelColor = MaterialTheme.colorScheme.onSurfaceVariant,
179+
selectedContainerColor = MaterialTheme.colorScheme.secondaryContainer,
180+
selectedLabelColor = MaterialTheme.colorScheme.onSecondaryContainer,
181+
selectedLeadingIconColor = MaterialTheme.colorScheme.onSecondaryContainer,
182+
),
183+
shape = MaterialTheme.shapes.medium,
184+
border = null,
185+
modifier = modifier,
186+
)
206187
}

0 commit comments

Comments
 (0)