TP-62782 | Loader issue fixed master (#10368)

This commit is contained in:
Kishan Kumar
2024-04-08 20:21:35 +05:30
committed by GitHub
parent f47c493e51
commit 7360fb93be
5 changed files with 37 additions and 32 deletions

View File

@@ -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 {

View File

@@ -69,8 +69,8 @@ class CoinHomeScreenVM @Inject constructor(
private val eventPublisher: NaviCoinsAnalytics.BasicEvent =
NaviCoinsAnalytics.naviCoinsAnalytics.BasicEvent()
private val _coinHomeScreenData = MutableSharedFlow<CoinHomeScreenState>()
val coinHomeScreenState = _coinHomeScreenData.asSharedFlow()
private val _coinHomeScreenData = MutableStateFlow<CoinHomeScreenState>(CoinHomeScreenState.Loading)
val coinHomeScreenState = _coinHomeScreenData.asStateFlow()
private val _navigateToNextScreen = MutableSharedFlow<Direction>()
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)
}

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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) }
}
}