Skip to content

Commit 13f52e6

Browse files
committed
Bring in rememberPinLastArrangement composable to both tools and lessons
1 parent ee5daf1 commit 13f52e6

2 files changed

Lines changed: 15 additions & 33 deletions

File tree

app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import androidx.compose.runtime.remember
2121
import androidx.compose.ui.Alignment
2222
import androidx.compose.ui.Modifier
2323
import androidx.compose.ui.res.stringResource
24-
import androidx.compose.ui.unit.Density
2524
import androidx.compose.ui.unit.dp
2625
import com.slack.circuit.codegen.annotations.CircuitInject
2726
import dagger.hilt.components.SingletonComponent
@@ -31,29 +30,22 @@ import org.cru.godtools.base.ui.circuit.screen.dashboard.page.LessonsScreen
3130
import org.cru.godtools.ui.dashboard.LocalizationSettingsBox
3231
import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiEvent
3332
import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiState
33+
import org.cru.godtools.ui.dashboard.rememberPinLastItemBottomArrangement
3434
import org.cru.godtools.ui.tools.LessonToolCard
3535

3636
internal val MARGIN_LESSONS_LAYOUT_HORIZONTAL = 16.dp
3737

3838
@Composable
3939
@CircuitInject(LessonsScreen::class, SingletonComponent::class)
4040
internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) {
41+
val verticalArrangement = if (state.mode == UiState.Mode.PERSONALIZATION) {
42+
rememberPinLastItemBottomArrangement(state.lessons.size)
43+
} else {
44+
Arrangement.Top
45+
}
46+
4147
LazyColumn(
42-
verticalArrangement = remember {
43-
object : Arrangement.Vertical {
44-
override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) {
45-
var currentOffset = 0
46-
sizes.forEachIndexed { index, size ->
47-
if (index == sizes.lastIndex) {
48-
outPositions[index] = maxOf(currentOffset, totalSize - size)
49-
} else {
50-
outPositions[index] = currentOffset
51-
currentOffset += size
52-
}
53-
}
54-
}
55-
}
56-
},
48+
verticalArrangement = remember { verticalArrangement },
5749
modifier = modifier.fillMaxHeight()
5850
) {
5951
if (state.isPersonalizationEnabled) {

app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ import androidx.compose.material3.Text
2020
import androidx.compose.runtime.Composable
2121
import androidx.compose.runtime.LaunchedEffect
2222
import androidx.compose.runtime.getValue
23-
import androidx.compose.runtime.remember
2423
import androidx.compose.runtime.rememberUpdatedState
2524
import androidx.compose.ui.Alignment
2625
import androidx.compose.ui.Modifier
2726
import androidx.compose.ui.res.stringResource
28-
import androidx.compose.ui.unit.Density
2927
import androidx.compose.ui.unit.dp
3028
import com.slack.circuit.codegen.annotations.CircuitInject
3129
import dagger.hilt.components.SingletonComponent
@@ -34,6 +32,7 @@ import org.cru.godtools.R
3432
import org.cru.godtools.base.ui.circuit.screen.dashboard.page.ToolsScreen
3533
import org.cru.godtools.ui.banner.Banners
3634
import org.cru.godtools.ui.dashboard.LocalizationSettingsBox
35+
import org.cru.godtools.ui.dashboard.rememberPinLastItemBottomArrangement
3736
import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiEvent
3837
import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiState
3938
import org.cru.godtools.ui.tools.SquareToolCard
@@ -50,24 +49,15 @@ internal fun ToolsLayout(state: UiState, modifier: Modifier = Modifier) {
5049

5150
val columnState = rememberLazyListState()
5251
LaunchedEffect(state.banner?.type) { if (state.banner != null) columnState.animateScrollToItem(0) }
52+
val verticalArrangement = if (state.mode == UiState.Mode.PERSONALIZATION) {
53+
rememberPinLastItemBottomArrangement(state.tools.size)
54+
} else {
55+
Arrangement.Top
56+
}
5357

5458
LazyColumn(
5559
state = columnState,
56-
verticalArrangement = remember {
57-
object : Arrangement.Vertical {
58-
override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) {
59-
var currentOffset = 0
60-
sizes.forEachIndexed { index, size ->
61-
if (index == sizes.lastIndex) {
62-
outPositions[index] = maxOf(currentOffset, totalSize - size)
63-
} else {
64-
outPositions[index] = currentOffset
65-
currentOffset += size
66-
}
67-
}
68-
}
69-
}
70-
},
60+
verticalArrangement = verticalArrangement,
7161
modifier = modifier.fillMaxHeight()
7262
) {
7363
if (!state.dataLoaded) return@LazyColumn

0 commit comments

Comments
 (0)