From 775a7c7bd4f9d61ac872f7c285f25b6d48b22c09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Mlynari=C4=8D?= Date: Mon, 23 May 2022 14:51:48 +0200 Subject: [PATCH] Add ForYou feed scrolling state Change-Id: Ia371c564e4ff723fbeaca741d278174bd6db0dd8 --- .../feature/foryou/ForYouScreen.kt | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/feature-foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt b/feature-foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt index 2ab82c054..b29a3b6e0 100644 --- a/feature-foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt +++ b/feature-foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt @@ -45,6 +45,7 @@ import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyHorizontalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons @@ -63,6 +64,7 @@ import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -86,6 +88,7 @@ import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video import com.google.samples.apps.nowinandroid.core.model.data.SaveableNewsResource import com.google.samples.apps.nowinandroid.core.model.data.Topic +import com.google.samples.apps.nowinandroid.core.ui.JankMetricEffect import com.google.samples.apps.nowinandroid.core.ui.LoadingWheel import com.google.samples.apps.nowinandroid.core.ui.NewsResourceCardExpanded import com.google.samples.apps.nowinandroid.core.ui.component.NiaFilledButton @@ -95,8 +98,10 @@ import com.google.samples.apps.nowinandroid.core.ui.component.NiaTopAppBar import com.google.samples.apps.nowinandroid.core.ui.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.ui.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.ui.theme.NiaTypography -import kotlin.math.floor +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.combine import kotlinx.datetime.Instant +import kotlin.math.floor @Composable fun ForYouRoute( @@ -166,7 +171,25 @@ fun ForYouScreen( else -> floor(maxWidth / 300.dp).toInt().coerceAtLeast(1) } + val lazyListState = rememberLazyListState() + JankMetricEffect(lazyListState) { metricsHolder -> + combine( + snapshotFlow { lazyListState.isScrollInProgress }, + snapshotFlow { lazyListState.firstVisibleItemIndex }, + ) { isScrollInProgress, firstVisibleItemIndex -> + if (isScrollInProgress) { + metricsHolder.state?.addState( + "ForYou:Feed:Scrolling", + "index=${firstVisibleItemIndex}" + ) + } else { + metricsHolder.state?.removeState("ForYou:Feed:Scrolling") + } + }.collect() + } + LazyColumn( + state = lazyListState, modifier = Modifier.fillMaxSize(), ) { InterestsSelection(