@@ -52,6 +52,9 @@ import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
5252import androidx.compose.material3.Icon
5353import androidx.compose.material3.MaterialTheme
5454import androidx.compose.material3.Scaffold
55+ import androidx.compose.material3.SegmentedButton
56+ import androidx.compose.material3.SegmentedButtonDefaults
57+ import androidx.compose.material3.SingleChoiceSegmentedButtonRow
5558import androidx.compose.material3.Text
5659import androidx.compose.material3.TopAppBarDefaults
5760import androidx.compose.material3.TwoRowsTopAppBar
@@ -82,6 +85,7 @@ import androidx.navigation.compose.NavHost
8285import androidx.navigation.compose.composable
8386import androidx.navigation.compose.rememberNavController
8487import com.android.camera.catalog.R
88+ import com.android.camera.catalog.domain.SampleType
8589import com.android.camera.catalog.domain.sampleCatalog
8690import kotlinx.serialization.Serializable
8791
@@ -207,19 +211,57 @@ fun CatalogApp() {
207211 }
208212 ) { hasPermission ->
209213 if (hasPermission) {
210- LazyColumn (
211- contentPadding = innerPadding,
212- modifier = Modifier .fillMaxWidth(),
213- horizontalAlignment = Alignment .CenterHorizontally ,
214- ) {
215- items(sampleCatalog) {
216- val onClick = {
217- navController.navigate(it.route)
214+ Column (modifier = Modifier
215+ .fillMaxSize()
216+ .padding(innerPadding)) {
217+ var selectedFilter by remember { mutableStateOf<SampleType ?>(null ) }
218+
219+ SingleChoiceSegmentedButtonRow (
220+ modifier = Modifier
221+ .fillMaxWidth()
222+ .padding(horizontal = 16 .dp, vertical = 8 .dp)
223+ ) {
224+ SegmentedButton (
225+ selected = selectedFilter == null ,
226+ onClick = { selectedFilter = null },
227+ shape = SegmentedButtonDefaults .itemShape(index = 0 , count = 3 )
228+ ) {
229+ Text (" All" )
230+ }
231+ SegmentedButton (
232+ selected = selectedFilter == SampleType .CAMERAX ,
233+ onClick = { selectedFilter = SampleType .CAMERAX },
234+ shape = SegmentedButtonDefaults .itemShape(index = 1 , count = 3 )
235+ ) {
236+ Text (" CameraX" )
237+ }
238+ SegmentedButton (
239+ selected = selectedFilter == SampleType .CAMERA2 ,
240+ onClick = { selectedFilter = SampleType .CAMERA2 },
241+ shape = SegmentedButtonDefaults .itemShape(index = 2 , count = 3 )
242+ ) {
243+ Text (" Camera 2" )
218244 }
219- if (it.isFeatured) {
220- CatalogWideCard (catalogItem = it, onClick = onClick)
221- } else {
222- CatalogRowCard (catalogItem = it, onClick = onClick)
245+ }
246+
247+ LazyColumn (
248+ modifier = Modifier .fillMaxWidth(),
249+ horizontalAlignment = Alignment .CenterHorizontally ,
250+ ) {
251+ val filteredSamples = sampleCatalog.filter {
252+ selectedFilter == null || it.type == selectedFilter
253+ }
254+ items(items = filteredSamples, key = { it.route }) {
255+ val onClick = {
256+ navController.navigate(it.route)
257+ }
258+ Column (modifier = Modifier .animateItem()) {
259+ if (it.isFeatured) {
260+ CatalogWideCard (catalogItem = it, onClick = onClick)
261+ } else {
262+ CatalogRowCard (catalogItem = it, onClick = onClick)
263+ }
264+ }
223265 }
224266 }
225267 }
0 commit comments