Loading app/src/main/java/foundation/e/apps/api/fused/FusedAPIImpl.kt +13 −2 Original line number Diff line number Diff line Loading @@ -107,6 +107,13 @@ class FusedAPIImpl @Inject constructor( return true } fun isCategoriesEmpty(fusedCategories: List<FusedCategory>): Boolean { fusedCategories.forEach { if (it.title.isNotEmpty()) return false } return true } fun getApplicationCategoryPreference(): String { return preferenceManagerModule.preferredApplicationType() } Loading Loading @@ -168,7 +175,11 @@ class FusedAPIImpl @Inject constructor( setHomeErrorMessage(apiStatus, source) scope.emit(ResultSupreme.create(apiStatus, priorList)) scope.emit( ResultSupreme.create(apiStatus, priorList.toList()).apply { otherPayload = source.name } ) } private fun setHomeErrorMessage(apiStatus: ResultStatus, source: Source) { Loading Loading @@ -1314,7 +1325,7 @@ class FusedAPIImpl @Inject constructor( updateFilterLevel(authData) } } list.add(FusedHome(it.key, result)) list.add(FusedHome(it.key, result, source = APP_TYPE_ANY)) } return list } Loading app/src/main/java/foundation/e/apps/api/fused/FusedAPIRepository.kt +4 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,10 @@ class FusedAPIRepository @Inject constructor(private val fusedAPIImpl: FusedAPII return fusedAPIImpl.isFusedHomesEmpty(fusedHomes) } fun isCategoriesEmpty(fusedCategories: List<FusedCategory>): Boolean { return fusedAPIImpl.isCategoriesEmpty(fusedCategories) } fun getApplicationCategoryPreference(): String { return fusedAPIImpl.getApplicationCategoryPreference() } Loading app/src/main/java/foundation/e/apps/categories/CategoriesViewModel.kt +26 −16 Original line number Diff line number Diff line Loading @@ -26,9 +26,12 @@ import dagger.hilt.android.lifecycle.HiltViewModel import foundation.e.apps.api.fused.FusedAPIRepository import foundation.e.apps.api.fused.data.FusedCategory import foundation.e.apps.login.AuthObject import foundation.e.apps.utils.enums.AppTag import foundation.e.apps.utils.enums.ResultStatus import foundation.e.apps.utils.enums.User import foundation.e.apps.utils.exceptions.CleanApkException import foundation.e.apps.utils.exceptions.GPlayException import foundation.e.apps.utils.exceptions.GPlayLoginException import foundation.e.apps.utils.parentFragment.LoadingViewModel import kotlinx.coroutines.launch import javax.inject.Inject Loading @@ -49,25 +52,33 @@ class CategoriesViewModel @Inject constructor( super.onLoadData(authObjectList, { successAuthList, _ -> successAuthList.find { it is AuthObject.GPlayAuth }?.run { getCategoriesList(type, result.data!! as AuthData) getCategoriesList(type, result.data!! as AuthData, this.user) return@onLoadData } successAuthList.find { it is AuthObject.CleanApk }?.run { getCategoriesList(type, AuthData("", "")) getCategoriesList(type, AuthData("", ""), this.user) return@onLoadData } }, retryBlock) } fun getCategoriesList(type: Category.Type, authData: AuthData) { fun getCategoriesList(type: Category.Type, authData: AuthData, user: User) { viewModelScope.launch { val categoriesData = fusedAPIRepository.getCategoriesList(type, authData) categoriesList.postValue(categoriesData) val status = categoriesData.third if (status != ResultStatus.OK) { val categoriesList = categoriesData.first if (status == ResultStatus.OK) { if (categoriesList.all { it.tag is AppTag.GPlay } && isCategoriesEmpty(categoriesList)) { exceptionsList.add(GPlayLoginException(false, "Received empty Categories", user)) } return@launch } val exception = if (authData.aasToken.isNotBlank() || authData.authToken.isNotBlank()) GPlayException( Loading @@ -83,9 +94,8 @@ class CategoriesViewModel @Inject constructor( exceptionsLiveData.postValue(exceptionsList) } } } fun isCategoriesEmpty(): Boolean { return categoriesList.value?.first?.isEmpty() ?: true fun isCategoriesEmpty(fusedCategories: List<FusedCategory>): Boolean { return fusedAPIRepository.isCategoriesEmpty(fusedCategories) } } app/src/main/java/foundation/e/apps/home/HomeViewModel.kt +17 −5 Original line number Diff line number Diff line Loading @@ -28,8 +28,11 @@ import foundation.e.apps.api.fused.FusedAPIRepository import foundation.e.apps.api.fused.data.FusedApp import foundation.e.apps.api.fused.data.FusedHome import foundation.e.apps.login.AuthObject import foundation.e.apps.utils.enums.Source import foundation.e.apps.utils.enums.User import foundation.e.apps.utils.exceptions.CleanApkException import foundation.e.apps.utils.exceptions.GPlayException import foundation.e.apps.utils.exceptions.GPlayLoginException import foundation.e.apps.utils.parentFragment.LoadingViewModel import kotlinx.coroutines.launch import javax.inject.Inject Loading @@ -55,12 +58,12 @@ class HomeViewModel @Inject constructor( super.onLoadData(authObjectList, { successAuthList, _ -> successAuthList.find { it is AuthObject.GPlayAuth }?.run { getHomeScreenData(result.data!! as AuthData, lifecycleOwner) getHomeScreenData(result.data!! as AuthData, this.user, lifecycleOwner) return@onLoadData } successAuthList.find { it is AuthObject.CleanApk }?.run { getHomeScreenData(AuthData("", ""), lifecycleOwner) getHomeScreenData(AuthData("", ""), this.user, lifecycleOwner) return@onLoadData } }, retryBlock) Loading @@ -68,13 +71,22 @@ class HomeViewModel @Inject constructor( fun getHomeScreenData( authData: AuthData, user: User, lifecycleOwner: LifecycleOwner, ) { viewModelScope.launch { fusedAPIRepository.getHomeScreenData(authData).observe(lifecycleOwner) { homeScreenData.postValue(it) if (it.isSuccess()) return@observe val homeList = it.data ?: emptyList() val source = it.otherPayload?.toString() ?: "" if (it.isSuccess()) { if (homeList.all { source == Source.GPLAY.name } && isFusedHomesEmpty(homeList)) { exceptionsList.add(GPlayLoginException(false, "Received empty Home", user)) } return@observe } val exception = if (authData.aasToken.isNotBlank() || authData.authToken.isNotBlank()) Loading @@ -97,8 +109,8 @@ class HomeViewModel @Inject constructor( return fusedAPIRepository.getApplicationCategoryPreference() } fun isFusedHomesEmpty(): Boolean { return homeScreenData.value?.data?.let { fun isFusedHomesEmpty(fusedHomes: List<FusedHome>): Boolean { return fusedHomes.let { fusedAPIRepository.isFusedHomesEmpty(it) } ?: true } Loading app/src/main/java/foundation/e/apps/login/AuthObject.kt +3 −2 Original line number Diff line number Diff line Loading @@ -35,8 +35,9 @@ import foundation.e.apps.utils.enums.User sealed class AuthObject { abstract val result: ResultSupreme<*> abstract val user: User class GPlayAuth(override val result: ResultSupreme<AuthData?>, val user: User) : AuthObject() class CleanApk(override val result: ResultSupreme<Unit>, val user: User) : AuthObject() class GPlayAuth(override val result: ResultSupreme<AuthData?>, override val user: User) : AuthObject() class CleanApk(override val result: ResultSupreme<Unit>, override val user: User) : AuthObject() // Add more auth types here } Loading
app/src/main/java/foundation/e/apps/api/fused/FusedAPIImpl.kt +13 −2 Original line number Diff line number Diff line Loading @@ -107,6 +107,13 @@ class FusedAPIImpl @Inject constructor( return true } fun isCategoriesEmpty(fusedCategories: List<FusedCategory>): Boolean { fusedCategories.forEach { if (it.title.isNotEmpty()) return false } return true } fun getApplicationCategoryPreference(): String { return preferenceManagerModule.preferredApplicationType() } Loading Loading @@ -168,7 +175,11 @@ class FusedAPIImpl @Inject constructor( setHomeErrorMessage(apiStatus, source) scope.emit(ResultSupreme.create(apiStatus, priorList)) scope.emit( ResultSupreme.create(apiStatus, priorList.toList()).apply { otherPayload = source.name } ) } private fun setHomeErrorMessage(apiStatus: ResultStatus, source: Source) { Loading Loading @@ -1314,7 +1325,7 @@ class FusedAPIImpl @Inject constructor( updateFilterLevel(authData) } } list.add(FusedHome(it.key, result)) list.add(FusedHome(it.key, result, source = APP_TYPE_ANY)) } return list } Loading
app/src/main/java/foundation/e/apps/api/fused/FusedAPIRepository.kt +4 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,10 @@ class FusedAPIRepository @Inject constructor(private val fusedAPIImpl: FusedAPII return fusedAPIImpl.isFusedHomesEmpty(fusedHomes) } fun isCategoriesEmpty(fusedCategories: List<FusedCategory>): Boolean { return fusedAPIImpl.isCategoriesEmpty(fusedCategories) } fun getApplicationCategoryPreference(): String { return fusedAPIImpl.getApplicationCategoryPreference() } Loading
app/src/main/java/foundation/e/apps/categories/CategoriesViewModel.kt +26 −16 Original line number Diff line number Diff line Loading @@ -26,9 +26,12 @@ import dagger.hilt.android.lifecycle.HiltViewModel import foundation.e.apps.api.fused.FusedAPIRepository import foundation.e.apps.api.fused.data.FusedCategory import foundation.e.apps.login.AuthObject import foundation.e.apps.utils.enums.AppTag import foundation.e.apps.utils.enums.ResultStatus import foundation.e.apps.utils.enums.User import foundation.e.apps.utils.exceptions.CleanApkException import foundation.e.apps.utils.exceptions.GPlayException import foundation.e.apps.utils.exceptions.GPlayLoginException import foundation.e.apps.utils.parentFragment.LoadingViewModel import kotlinx.coroutines.launch import javax.inject.Inject Loading @@ -49,25 +52,33 @@ class CategoriesViewModel @Inject constructor( super.onLoadData(authObjectList, { successAuthList, _ -> successAuthList.find { it is AuthObject.GPlayAuth }?.run { getCategoriesList(type, result.data!! as AuthData) getCategoriesList(type, result.data!! as AuthData, this.user) return@onLoadData } successAuthList.find { it is AuthObject.CleanApk }?.run { getCategoriesList(type, AuthData("", "")) getCategoriesList(type, AuthData("", ""), this.user) return@onLoadData } }, retryBlock) } fun getCategoriesList(type: Category.Type, authData: AuthData) { fun getCategoriesList(type: Category.Type, authData: AuthData, user: User) { viewModelScope.launch { val categoriesData = fusedAPIRepository.getCategoriesList(type, authData) categoriesList.postValue(categoriesData) val status = categoriesData.third if (status != ResultStatus.OK) { val categoriesList = categoriesData.first if (status == ResultStatus.OK) { if (categoriesList.all { it.tag is AppTag.GPlay } && isCategoriesEmpty(categoriesList)) { exceptionsList.add(GPlayLoginException(false, "Received empty Categories", user)) } return@launch } val exception = if (authData.aasToken.isNotBlank() || authData.authToken.isNotBlank()) GPlayException( Loading @@ -83,9 +94,8 @@ class CategoriesViewModel @Inject constructor( exceptionsLiveData.postValue(exceptionsList) } } } fun isCategoriesEmpty(): Boolean { return categoriesList.value?.first?.isEmpty() ?: true fun isCategoriesEmpty(fusedCategories: List<FusedCategory>): Boolean { return fusedAPIRepository.isCategoriesEmpty(fusedCategories) } }
app/src/main/java/foundation/e/apps/home/HomeViewModel.kt +17 −5 Original line number Diff line number Diff line Loading @@ -28,8 +28,11 @@ import foundation.e.apps.api.fused.FusedAPIRepository import foundation.e.apps.api.fused.data.FusedApp import foundation.e.apps.api.fused.data.FusedHome import foundation.e.apps.login.AuthObject import foundation.e.apps.utils.enums.Source import foundation.e.apps.utils.enums.User import foundation.e.apps.utils.exceptions.CleanApkException import foundation.e.apps.utils.exceptions.GPlayException import foundation.e.apps.utils.exceptions.GPlayLoginException import foundation.e.apps.utils.parentFragment.LoadingViewModel import kotlinx.coroutines.launch import javax.inject.Inject Loading @@ -55,12 +58,12 @@ class HomeViewModel @Inject constructor( super.onLoadData(authObjectList, { successAuthList, _ -> successAuthList.find { it is AuthObject.GPlayAuth }?.run { getHomeScreenData(result.data!! as AuthData, lifecycleOwner) getHomeScreenData(result.data!! as AuthData, this.user, lifecycleOwner) return@onLoadData } successAuthList.find { it is AuthObject.CleanApk }?.run { getHomeScreenData(AuthData("", ""), lifecycleOwner) getHomeScreenData(AuthData("", ""), this.user, lifecycleOwner) return@onLoadData } }, retryBlock) Loading @@ -68,13 +71,22 @@ class HomeViewModel @Inject constructor( fun getHomeScreenData( authData: AuthData, user: User, lifecycleOwner: LifecycleOwner, ) { viewModelScope.launch { fusedAPIRepository.getHomeScreenData(authData).observe(lifecycleOwner) { homeScreenData.postValue(it) if (it.isSuccess()) return@observe val homeList = it.data ?: emptyList() val source = it.otherPayload?.toString() ?: "" if (it.isSuccess()) { if (homeList.all { source == Source.GPLAY.name } && isFusedHomesEmpty(homeList)) { exceptionsList.add(GPlayLoginException(false, "Received empty Home", user)) } return@observe } val exception = if (authData.aasToken.isNotBlank() || authData.authToken.isNotBlank()) Loading @@ -97,8 +109,8 @@ class HomeViewModel @Inject constructor( return fusedAPIRepository.getApplicationCategoryPreference() } fun isFusedHomesEmpty(): Boolean { return homeScreenData.value?.data?.let { fun isFusedHomesEmpty(fusedHomes: List<FusedHome>): Boolean { return fusedHomes.let { fusedAPIRepository.isFusedHomesEmpty(it) } ?: true } Loading
app/src/main/java/foundation/e/apps/login/AuthObject.kt +3 −2 Original line number Diff line number Diff line Loading @@ -35,8 +35,9 @@ import foundation.e.apps.utils.enums.User sealed class AuthObject { abstract val result: ResultSupreme<*> abstract val user: User class GPlayAuth(override val result: ResultSupreme<AuthData?>, val user: User) : AuthObject() class CleanApk(override val result: ResultSupreme<Unit>, val user: User) : AuthObject() class GPlayAuth(override val result: ResultSupreme<AuthData?>, override val user: User) : AuthObject() class CleanApk(override val result: ResultSupreme<Unit>, override val user: User) : AuthObject() // Add more auth types here }