diff --git a/android/app/src/main/java/com/naviapp/home/compose/home/ui/content/FrontLayerContent.kt b/android/app/src/main/java/com/naviapp/home/compose/home/ui/content/FrontLayerContent.kt index 243458c9d0..cea6fc205a 100644 --- a/android/app/src/main/java/com/naviapp/home/compose/home/ui/content/FrontLayerContent.kt +++ b/android/app/src/main/java/com/naviapp/home/compose/home/ui/content/FrontLayerContent.kt @@ -36,10 +36,8 @@ import androidx.compose.runtime.SideEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.key -import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier @@ -250,7 +248,10 @@ private fun ChunkedWidgetRenderer( onEvent: (event: HpEvents) -> Unit, firstChunkSize: Int = 2, ) { - var displayedCount by remember { mutableIntStateOf(0) } + if (elementList.isEmpty()) return + + val displayedCount = homeVM().widgetsDisplayed.coerceAtMost(elementList.size) + val delayBetweenChunks = remember { FirebaseRemoteConfigHelper.getLong( FirebaseRemoteConfigHelper.HOMEPAGE_WIDGET_RENDER_DELAY_MS, @@ -259,14 +260,20 @@ private fun ChunkedWidgetRenderer( } LaunchedEffect(elementList) { - withContext(Dispatchers.Default) { - displayedCount = displayedCount.coerceAtMost(elementList.size) - var nextChunk = if (displayedCount == 0) firstChunkSize else 1 - while (displayedCount < elementList.size) { - displayedCount = (displayedCount + nextChunk).coerceAtMost(elementList.size) - nextChunk += 1 - delay(delayBetweenChunks) + if (displayedCount < elementList.size) { + withContext(Dispatchers.Default) { + var nextChunk = if (displayedCount == 0) firstChunkSize else 1 + while (displayedCount < elementList.size) { + homeVM() + .updateDisplayedWidgetCount( + (displayedCount + nextChunk).coerceAtMost(elementList.size) + ) + nextChunk += 1 + delay(delayBetweenChunks) + } } + } else { + homeVM().updateDisplayedWidgetCount(elementList.size) } } diff --git a/android/app/src/main/java/com/naviapp/home/viewmodel/HomeViewModel.kt b/android/app/src/main/java/com/naviapp/home/viewmodel/HomeViewModel.kt index 486d3ab026..f6f483bee6 100644 --- a/android/app/src/main/java/com/naviapp/home/viewmodel/HomeViewModel.kt +++ b/android/app/src/main/java/com/naviapp/home/viewmodel/HomeViewModel.kt @@ -8,6 +8,9 @@ package com.naviapp.home.viewmodel import android.content.Context +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.setValue import androidx.lifecycle.viewModelScope import com.navi.analytics.utils.NaviTrackEvent import com.navi.base.cache.model.NaviCacheAltSourceEntity @@ -107,6 +110,13 @@ constructor( private val _internetConnectivity = MutableSharedFlow() val internetConnectivity: SharedFlow = _internetConnectivity + var widgetsDisplayed by mutableIntStateOf(0) + private set + + fun updateDisplayedWidgetCount(count: Int) { + widgetsDisplayed = count + } + private val _delayedRenderingConfig: MutableStateFlow = MutableStateFlow(null) val delayedRenderingConfig = _delayedRenderingConfig.asStateFlow()