NTP-66546 | State persistence in chunked widgets (#16257)
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<ConnectivityObserver.Status>()
|
||||
val internetConnectivity: SharedFlow<ConnectivityObserver.Status> = _internetConnectivity
|
||||
|
||||
var widgetsDisplayed by mutableIntStateOf(0)
|
||||
private set
|
||||
|
||||
fun updateDisplayedWidgetCount(count: Int) {
|
||||
widgetsDisplayed = count
|
||||
}
|
||||
|
||||
private val _delayedRenderingConfig: MutableStateFlow<RenderingConfig?> = MutableStateFlow(null)
|
||||
val delayedRenderingConfig = _delayedRenderingConfig.asStateFlow()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user