From b7021b99bcaec0d150fc65b905cdf4c991ada132 Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Wed, 22 Jun 2022 20:56:27 +0300 Subject: [PATCH] Top bar is not collapsable anymore and Unit groups are not sticky. --- .../unitto/screens/second/SecondScreen.kt | 69 ++++++++++--------- .../screens/second/components/ChipsRow.kt | 1 + 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/com/sadellie/unitto/screens/second/SecondScreen.kt b/app/src/main/java/com/sadellie/unitto/screens/second/SecondScreen.kt index 6b02b85c..4cf2bb6d 100644 --- a/app/src/main/java/com/sadellie/unitto/screens/second/SecondScreen.kt +++ b/app/src/main/java/com/sadellie/unitto/screens/second/SecondScreen.kt @@ -18,8 +18,6 @@ package com.sadellie.unitto.screens.second -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState @@ -30,6 +28,9 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.rememberTopAppBarScrollState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalFocusManager @@ -65,13 +66,17 @@ private fun BasicUnitListScreen( navigateUp: () -> Unit, selectAction: (AbstractUnit) -> Unit, viewModel: SecondViewModel, - chipsRow: @Composable ColumnScope.(UnitGroup?, (UnitGroup) -> Unit, LazyListState) -> Unit = {_,_,_->}, + chipsRow: @Composable (UnitGroup?, LazyListState) -> Unit = {_, _->}, unitsListItem: @Composable (AbstractUnit, (AbstractUnit) -> Unit) -> Unit, noBrokenCurrencies: Boolean, title: String, ) { val uiState = viewModel.uiState - val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarScrollState()) + val currentUnitGroup: UnitGroup? by rememberSaveable { + viewModel.setSelectedChip(currentUnit.group) + mutableStateOf(currentUnit.group) + } + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarScrollState()) val focusManager = LocalFocusManager.current val chipsRowLazyListState = rememberLazyListState() @@ -96,31 +101,25 @@ private fun BasicUnitListScreen( ) } ) { paddingValues -> - Column( - Modifier.padding(paddingValues) - ) { - chipsRow( - uiState.chosenUnitGroup, - { - viewModel.toggleSelectedChip(it) - viewModel.loadUnitsToShow(noBrokenCurrencies) - }, - chipsRowLazyListState - ) - LazyColumn { - if (uiState.unitsToShow.isEmpty()) { - item { SearchPlaceholder() } - return@LazyColumn - } - uiState.unitsToShow.forEach { (unitGroup, listOfUnits) -> - stickyHeader { Header(text = stringResource(id = unitGroup.res)) } - items(items = listOfUnits, key = { it.unitId }) { unit -> - unitsListItem(unit) { - selectAction(it) - viewModel.onSearchQueryChange("") - focusManager.clearFocus(true) - navigateUp() - } + LazyColumn(Modifier.padding(paddingValues)) { + stickyHeader { + chipsRow( + viewModel.uiState.chosenUnitGroup, + chipsRowLazyListState + ) + } + if (uiState.unitsToShow.isEmpty()) { + item { SearchPlaceholder() } + return@LazyColumn + } + uiState.unitsToShow.forEach { (unitGroup, listOfUnits) -> + item { Header(text = stringResource(id = unitGroup.res)) } + items(items = listOfUnits, key = { it.unitId }) { unit -> + unitsListItem(unit) { + selectAction(it) + viewModel.onSearchQueryChange("") + focusManager.clearFocus(true) + navigateUp() } } } @@ -129,12 +128,11 @@ private fun BasicUnitListScreen( // This block is called only once on initial composition LaunchedEffect(Unit) { - viewModel.setSelectedChip(currentUnit.group) /** * Telling viewModel that it needs to update the list */ viewModel.loadUnitsToShow(noBrokenCurrencies) - currentUnit.group.let { + currentUnitGroup?.let { chipsRowLazyListState.animateScrollToItem(ALL_UNIT_GROUPS.indexOf(it)) } } @@ -159,10 +157,13 @@ fun LeftSideScreen( navigateUp = navigateUp, selectAction = selectAction, viewModel = viewModel, - chipsRow = { chosenUnitGroup, selectUnitGroupAction, lazyListState -> + chipsRow = { unitGroup, lazyListState -> ChipsRow( - chosenUnitGroup = chosenUnitGroup, - selectAction = selectUnitGroupAction, + chosenUnitGroup = unitGroup, + selectAction = { + viewModel.toggleSelectedChip(it) + viewModel.loadUnitsToShow(true) + }, lazyListState = lazyListState ) }, diff --git a/app/src/main/java/com/sadellie/unitto/screens/second/components/ChipsRow.kt b/app/src/main/java/com/sadellie/unitto/screens/second/components/ChipsRow.kt index b7c5ec6e..432eb41b 100644 --- a/app/src/main/java/com/sadellie/unitto/screens/second/components/ChipsRow.kt +++ b/app/src/main/java/com/sadellie/unitto/screens/second/components/ChipsRow.kt @@ -64,6 +64,7 @@ fun ChipsRow( ) { val chipShape = RoundedCornerShape(8.dp) LazyRow( + modifier = Modifier.background(MaterialTheme.colorScheme.background), state = lazyListState, contentPadding = PaddingValues(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp)