TP-62782 | Loader issue fixed master (#10368)
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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) }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user