Top bar is not collapsable anymore and Unit groups are not sticky.

This commit is contained in:
Sad Ellie 2022-06-22 20:56:27 +03:00
parent d10b3b04ac
commit b7021b99bc
2 changed files with 36 additions and 34 deletions

View File

@ -18,8 +18,6 @@
package com.sadellie.unitto.screens.second 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.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyListState
@ -30,6 +28,9 @@ import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.rememberTopAppBarScrollState import androidx.compose.material3.rememberTopAppBarScrollState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect 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.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalFocusManager
@ -65,13 +66,17 @@ private fun BasicUnitListScreen(
navigateUp: () -> Unit, navigateUp: () -> Unit,
selectAction: (AbstractUnit) -> Unit, selectAction: (AbstractUnit) -> Unit,
viewModel: SecondViewModel, viewModel: SecondViewModel,
chipsRow: @Composable ColumnScope.(UnitGroup?, (UnitGroup) -> Unit, LazyListState) -> Unit = {_,_,_->}, chipsRow: @Composable (UnitGroup?, LazyListState) -> Unit = {_, _->},
unitsListItem: @Composable (AbstractUnit, (AbstractUnit) -> Unit) -> Unit, unitsListItem: @Composable (AbstractUnit, (AbstractUnit) -> Unit) -> Unit,
noBrokenCurrencies: Boolean, noBrokenCurrencies: Boolean,
title: String, title: String,
) { ) {
val uiState = viewModel.uiState 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 focusManager = LocalFocusManager.current
val chipsRowLazyListState = rememberLazyListState() val chipsRowLazyListState = rememberLazyListState()
@ -96,24 +101,19 @@ private fun BasicUnitListScreen(
) )
} }
) { paddingValues -> ) { paddingValues ->
Column( LazyColumn(Modifier.padding(paddingValues)) {
Modifier.padding(paddingValues) stickyHeader {
) {
chipsRow( chipsRow(
uiState.chosenUnitGroup, viewModel.uiState.chosenUnitGroup,
{
viewModel.toggleSelectedChip(it)
viewModel.loadUnitsToShow(noBrokenCurrencies)
},
chipsRowLazyListState chipsRowLazyListState
) )
LazyColumn { }
if (uiState.unitsToShow.isEmpty()) { if (uiState.unitsToShow.isEmpty()) {
item { SearchPlaceholder() } item { SearchPlaceholder() }
return@LazyColumn return@LazyColumn
} }
uiState.unitsToShow.forEach { (unitGroup, listOfUnits) -> uiState.unitsToShow.forEach { (unitGroup, listOfUnits) ->
stickyHeader { Header(text = stringResource(id = unitGroup.res)) } item { Header(text = stringResource(id = unitGroup.res)) }
items(items = listOfUnits, key = { it.unitId }) { unit -> items(items = listOfUnits, key = { it.unitId }) { unit ->
unitsListItem(unit) { unitsListItem(unit) {
selectAction(it) selectAction(it)
@ -125,16 +125,14 @@ private fun BasicUnitListScreen(
} }
} }
} }
}
// This block is called only once on initial composition // This block is called only once on initial composition
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
viewModel.setSelectedChip(currentUnit.group)
/** /**
* Telling viewModel that it needs to update the list * Telling viewModel that it needs to update the list
*/ */
viewModel.loadUnitsToShow(noBrokenCurrencies) viewModel.loadUnitsToShow(noBrokenCurrencies)
currentUnit.group.let { currentUnitGroup?.let {
chipsRowLazyListState.animateScrollToItem(ALL_UNIT_GROUPS.indexOf(it)) chipsRowLazyListState.animateScrollToItem(ALL_UNIT_GROUPS.indexOf(it))
} }
} }
@ -159,10 +157,13 @@ fun LeftSideScreen(
navigateUp = navigateUp, navigateUp = navigateUp,
selectAction = selectAction, selectAction = selectAction,
viewModel = viewModel, viewModel = viewModel,
chipsRow = { chosenUnitGroup, selectUnitGroupAction, lazyListState -> chipsRow = { unitGroup, lazyListState ->
ChipsRow( ChipsRow(
chosenUnitGroup = chosenUnitGroup, chosenUnitGroup = unitGroup,
selectAction = selectUnitGroupAction, selectAction = {
viewModel.toggleSelectedChip(it)
viewModel.loadUnitsToShow(true)
},
lazyListState = lazyListState lazyListState = lazyListState
) )
}, },

View File

@ -64,6 +64,7 @@ fun ChipsRow(
) { ) {
val chipShape = RoundedCornerShape(8.dp) val chipShape = RoundedCornerShape(8.dp)
LazyRow( LazyRow(
modifier = Modifier.background(MaterialTheme.colorScheme.background),
state = lazyListState, state = lazyListState,
contentPadding = PaddingValues(8.dp), contentPadding = PaddingValues(8.dp),
horizontalArrangement = Arrangement.spacedBy(8.dp) horizontalArrangement = Arrangement.spacedBy(8.dp)