From 3ae1425eba1410369c1f8b7516040d539820ac24 Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Wed, 22 Apr 2026 18:31:57 +0200 Subject: [PATCH] refactor: Add lazy list state to sections for automatic scrolling to top --- .../continuewatching/ContinueWatchingSection.kt | 11 ++++++++++- .../home/components/library/LibraryPosterSection.kt | 11 ++++++++++- .../ui/screen/home/components/nextup/NextUpSection.kt | 11 ++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/continuewatching/ContinueWatchingSection.kt b/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/continuewatching/ContinueWatchingSection.kt index 98fe9de9..0c05447f 100644 --- a/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/continuewatching/ContinueWatchingSection.kt +++ b/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/continuewatching/ContinueWatchingSection.kt @@ -6,7 +6,9 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import hu.bbara.purefin.core.ui.model.MediaUiModel @@ -20,6 +22,12 @@ fun ContinueWatchingSection( ) { if (items.isEmpty()) return + val listState = rememberLazyListState() + + LaunchedEffect(items) { + listState.scrollToItem(index = 0) + } + Column( verticalArrangement = Arrangement.spacedBy(4.dp), modifier = modifier @@ -28,7 +36,8 @@ fun ContinueWatchingSection( LazyRow( contentPadding = PaddingValues(horizontal = 16.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), + state = listState ) { items(items = items, key = { item -> item.id }) { item -> ContinueWatchingCard( diff --git a/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/library/LibraryPosterSection.kt b/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/library/LibraryPosterSection.kt index 3e6543e3..2c3abb72 100644 --- a/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/library/LibraryPosterSection.kt +++ b/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/library/LibraryPosterSection.kt @@ -6,7 +6,9 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import hu.bbara.purefin.core.ui.model.MediaUiModel @@ -23,6 +25,12 @@ fun LibraryPosterSection( ) { if (items.isEmpty()) return + val listState = rememberLazyListState() + + LaunchedEffect(items) { + listState.scrollToItem(index = 0) + } + Column( verticalArrangement = Arrangement.spacedBy(4.dp), modifier = modifier @@ -35,7 +43,8 @@ fun LibraryPosterSection( LazyRow( contentPadding = PaddingValues(horizontal = 16.dp), horizontalArrangement = Arrangement.spacedBy(14.dp), - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), + state = listState ) { items(items = items, key = { item -> item.id }) { item -> HomeBrowseCard( diff --git a/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/nextup/NextUpSection.kt b/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/nextup/NextUpSection.kt index e61d9343..2b29793f 100644 --- a/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/nextup/NextUpSection.kt +++ b/app/src/main/java/hu/bbara/purefin/ui/screen/home/components/nextup/NextUpSection.kt @@ -6,7 +6,9 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import hu.bbara.purefin.core.ui.model.MediaUiModel @@ -20,6 +22,12 @@ fun NextUpSection( ) { if (items.isEmpty()) return + val listState = rememberLazyListState() + + LaunchedEffect(items) { + listState.scrollToItem(index = 0) + } + Column( verticalArrangement = Arrangement.spacedBy(4.dp), modifier = modifier @@ -28,7 +36,8 @@ fun NextUpSection( LazyRow( contentPadding = PaddingValues(horizontal = 16.dp), horizontalArrangement = Arrangement.spacedBy(14.dp), - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), + state = listState ) { items(items = items, key = { item -> item.id }) { item -> NextUpCard(