From 7360fb93be14dbff86f8440f4c170d7414b67e9f Mon Sep 17 00:00:00 2001 From: Kishan Kumar Date: Mon, 8 Apr 2024 20:21:35 +0530 Subject: [PATCH] TP-62782 | Loader issue fixed master (#10368) --- .../navi/coin/ui/compose/CoinHomeScreen.kt | 30 ++++++++++++++----- .../java/com/navi/coin/vm/CoinHomeScreenVM.kt | 18 +++++------ .../com/navi/rr/network/di/NetworkModule.kt | 4 +-- .../rr/network/retrofit/NaviHttpClient.kt | 7 +---- .../java/com/navi/rr/utils/RRComposeUtils.kt | 10 +++---- 5 files changed, 37 insertions(+), 32 deletions(-) diff --git a/android/navi-coin/src/main/java/com/navi/coin/ui/compose/CoinHomeScreen.kt b/android/navi-coin/src/main/java/com/navi/coin/ui/compose/CoinHomeScreen.kt index 712ebc5fbf..41a62bf9d7 100644 --- a/android/navi-coin/src/main/java/com/navi/coin/ui/compose/CoinHomeScreen.kt +++ b/android/navi-coin/src/main/java/com/navi/coin/ui/compose/CoinHomeScreen.kt @@ -30,6 +30,7 @@ import androidx.compose.material.Scaffold import androidx.compose.material.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.SideEffect import androidx.compose.runtime.collectAsState @@ -47,10 +48,14 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil.compose.AsyncImage import coil.request.ImageRequest import com.google.accompanist.systemuicontroller.rememberSystemUiController @@ -112,14 +117,13 @@ fun CoinHomeScreen( naviCoinsAnalytics: NaviCoinsAnalytics.BasicEvent = NaviCoinsAnalytics.naviCoinsAnalytics.BasicEvent() ) { val scope = rememberCoroutineScope() + val lifeCycleOwner = LocalLifecycleOwner.current val context = LocalContext.current as RRBaseActivity val keyboardController = LocalSoftwareKeyboardController.current - val coinHomeScreenUiTronConfig by coinHomeScreenVM.coinHomeScreenState.collectAsState( - initial = CoinHomeScreenState.Loading - ) + val coinHomeScreenUiTronConfig by coinHomeScreenVM.coinHomeScreenState.collectAsStateWithLifecycle() val loadingScreenUiTronConfig by coinHomeScreenVM.nextScreenDefinitionState.collectAsState(null) val bottomSheetData by coinHomeScreenVM.bottomSheetData.collectAsState(null) @@ -187,15 +191,25 @@ fun CoinHomeScreen( } } - DisposableEffectWithLifeCycle( - onStart = { - coinHomeScreenVM.fetchCoinHomeScreenUiTronConfigs() - } - ) { + LaunchedEffect(Unit) { coinHomeScreenVM.fetchAndSaveCoinHistoryScreen() naviCoinsAnalytics.sendEvent(NaviCoinsAnalytics.REWARDS_NAVI_COINS_INFO_PAGE_LANDS) } + DisposableEffect(key1 = lifeCycleOwner) { + val observer = LifecycleEventObserver { _, event -> + when (event) { + Lifecycle.Event.ON_START -> { + coinHomeScreenVM.fetchCoinHomeScreenUiTronConfigs() + } + else -> Unit + } + } + lifeCycleOwner.lifecycle.addObserver(observer) + + onDispose { lifeCycleOwner.lifecycle.removeObserver(observer) } + } + LaunchedEffect(Unit) { launch { coinHomeScreenVM.navigateToNextScreen.collect { diff --git a/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeScreenVM.kt b/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeScreenVM.kt index 07fb0edc39..fadd34bfa5 100644 --- a/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeScreenVM.kt +++ b/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeScreenVM.kt @@ -69,8 +69,8 @@ class CoinHomeScreenVM @Inject constructor( private val eventPublisher: NaviCoinsAnalytics.BasicEvent = NaviCoinsAnalytics.naviCoinsAnalytics.BasicEvent() - private val _coinHomeScreenData = MutableSharedFlow() - val coinHomeScreenState = _coinHomeScreenData.asSharedFlow() + private val _coinHomeScreenData = MutableStateFlow(CoinHomeScreenState.Loading) + val coinHomeScreenState = _coinHomeScreenData.asStateFlow() private val _navigateToNextScreen = MutableSharedFlow() val navigateToNextScreen = _navigateToNextScreen.asSharedFlow() @@ -135,7 +135,7 @@ class CoinHomeScreenVM @Inject constructor( fun fetchCoinHomeScreenUiTronConfigs() { launch { - _coinHomeScreenData.emit(CoinHomeScreenState.Loading) + _coinHomeScreenData.update { CoinHomeScreenState.Loading} naviCacheRepository.getDataAndFetchFromAltSource( key = COIN_HOME_SCREEN_CACHE_KEY, version = CommonLibManager.buildConfigDetails.appVersionCode.toLongOrNull(), @@ -147,11 +147,9 @@ class CoinHomeScreenVM @Inject constructor( }, emitMultipleValues = true, ).collect { response -> - getGsonBuilders().fromJson(response.value, ScreenDefinition::class.java)?.let { - _coinHomeScreenData.emit( - CoinHomeScreenState.Success(it.copy()) - ) - initCoinHomeScreenImageCaching(it.screenStructure) + getGsonBuilders().fromJson(response.value, ScreenDefinition::class.java)?.let {response -> + _coinHomeScreenData.update { CoinHomeScreenState.Success(response.copy()) } + initCoinHomeScreenImageCaching(response.screenStructure) } } } @@ -160,9 +158,7 @@ class CoinHomeScreenVM @Inject constructor( private suspend fun fetchDataFromApi(): NaviCacheAltSourceEntity { val response = coinHomeScreenRepo.fetchCoinHomeScreenUiTronConfigs() if (!response.isValidResponse()) { - _coinHomeScreenData.emit( - CoinHomeScreenState.Error() - ) + _coinHomeScreenData.update { CoinHomeScreenState.Error() } return NaviCacheAltSourceEntity(isSuccess = false) } diff --git a/android/navi-rr/src/main/java/com/navi/rr/network/di/NetworkModule.kt b/android/navi-rr/src/main/java/com/navi/rr/network/di/NetworkModule.kt index f7450dbe12..cdefaaf870 100644 --- a/android/navi-rr/src/main/java/com/navi/rr/network/di/NetworkModule.kt +++ b/android/navi-rr/src/main/java/com/navi/rr/network/di/NetworkModule.kt @@ -77,7 +77,7 @@ object NetworkModule { .baseUrl(CommonLibManager.baseUrl) .addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.REWARDS.name)) .addConverterFactory(GsonConverterFactory.create(deserializer)) - .client(naviHttpClient.httpClient) + .client(naviHttpClient.httpClientBuilder.build()) .build() return retrofit.create(RetrofitService::class.java) } @@ -94,7 +94,7 @@ object NetworkModule { .baseUrl(CommonLibManager.baseUrl) .addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.REWARDS.name)) .addConverterFactory(GsonConverterFactory.create(percentDeserializer)) - .client(naviHttpClient.httpClient) + .client(naviHttpClient.httpClientBuilder.build()) .build() return retrofit.create(RetrofitService::class.java) } diff --git a/android/navi-rr/src/main/java/com/navi/rr/network/retrofit/NaviHttpClient.kt b/android/navi-rr/src/main/java/com/navi/rr/network/retrofit/NaviHttpClient.kt index e2cd555930..d22802d2fd 100644 --- a/android/navi-rr/src/main/java/com/navi/rr/network/retrofit/NaviHttpClient.kt +++ b/android/navi-rr/src/main/java/com/navi/rr/network/retrofit/NaviHttpClient.kt @@ -18,11 +18,7 @@ import okhttp3.logging.HttpLoggingInterceptor class NaviHttpClient(networkInfo: NetworkInfo, private val context: Context) : BaseHttpClient(networkInfo, context) { - - val httpClient: OkHttpClient - get() = httpClientBuilder.build() - - private val httpClientBuilder: OkHttpClient.Builder + val httpClientBuilder: OkHttpClient.Builder get() { val okHttpClientBuilder = baseHttpClientBuilder if (BuildConfig.DEBUG) { @@ -37,7 +33,6 @@ class NaviHttpClient(networkInfo: NetworkInfo, private val context: Context) : .build() ) } - } return okHttpClientBuilder } diff --git a/android/navi-rr/src/main/java/com/navi/rr/utils/RRComposeUtils.kt b/android/navi-rr/src/main/java/com/navi/rr/utils/RRComposeUtils.kt index ce6d34ab01..2baa81c0d5 100644 --- a/android/navi-rr/src/main/java/com/navi/rr/utils/RRComposeUtils.kt +++ b/android/navi-rr/src/main/java/com/navi/rr/utils/RRComposeUtils.kt @@ -2,18 +2,18 @@ package com.navi.rr.utils import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.LifecycleOwner @Composable fun DisposableEffectWithLifeCycle( + lifeCycleOwner: LifecycleOwner, onStart: (() -> Unit)? = null, onStop: (() -> Unit)? = null, effect: (() -> Unit)? = null ) { - val lifecycle = LocalLifecycleOwner.current.lifecycle - DisposableEffect(lifecycle) { + DisposableEffect(lifeCycleOwner) { effect?.invoke() val observer = LifecycleEventObserver { _, event -> when (event) { @@ -22,7 +22,7 @@ fun DisposableEffectWithLifeCycle( else -> Lifecycle.Event.ON_ANY } } - lifecycle.addObserver(observer) - onDispose { lifecycle.removeObserver(observer) } + lifeCycleOwner.lifecycle.addObserver(observer) + onDispose { lifeCycleOwner.lifecycle.removeObserver(observer) } } } \ No newline at end of file