Loading app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt +5 −7 Original line number Diff line number Diff line Loading @@ -21,12 +21,13 @@ package foundation.e.apps.data.application import com.aurora.gplayapi.Constants import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.application.data.Home import foundation.e.apps.data.application.utils.AppVisibilityResolver import foundation.e.apps.data.enums.FilterLevel import foundation.e.apps.data.enums.Source import foundation.e.apps.data.enums.Status import foundation.e.apps.data.playstore.PlayStoreRepository import foundation.e.apps.install.pkg.AppLoungePackageManager import foundation.e.apps.install.pkg.PwaManager import timber.log.Timber import javax.inject.Inject import javax.inject.Singleton Loading @@ -34,7 +35,7 @@ import javax.inject.Singleton class ApplicationDataManager @Inject constructor( private val appLoungePackageManager: AppLoungePackageManager, private val pwaManager: PwaManager, private val playStoreRepository: PlayStoreRepository private val visibilityFetcher: AppVisibilityResolver, ) { suspend fun updateFilterLevel(application: Application) { application.filterLevel = getAppFilterLevel(application) Loading @@ -56,6 +57,7 @@ class ApplicationDataManager @Inject constructor( } suspend fun getAppFilterLevel(application: Application): FilterLevel { Timber.i("getAppFilterLevel: $application") return when { application.package_name.isBlank() -> FilterLevel.UNKNOWN !application.isFree && application.price.isBlank() -> FilterLevel.UI Loading @@ -72,12 +74,8 @@ class ApplicationDataManager @Inject constructor( return application.restriction != Constants.Restriction.NOT_RESTRICTED } /* * Some apps are not visible because of geo-restriction, banning, etc. */ private suspend fun isApplicationVisible(application: Application): Boolean { val appDetails = playStoreRepository.getAppDetailsWeb(application.package_name) return appDetails != null return visibilityFetcher.isApplicationVisible(application) } fun updateStatus(application: Application) { Loading app/src/main/java/foundation/e/apps/data/application/utils/AppVisibilityResolver.kt 0 → 100644 +31 −0 Original line number Diff line number Diff line package foundation.e.apps.data.application.utils import android.content.Context import com.aurora.gplayapi.helpers.web.WebAppDetailsHelper import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.data.playstore.utils.GPlayHttpClient import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import javax.inject.Inject import javax.inject.Singleton @Singleton class AppVisibilityResolver @Inject constructor( private val gPlayHttpClient: GPlayHttpClient, @ApplicationContext private val context: Context ) { suspend fun isApplicationVisible(application: Application): Boolean { val webAppDetailsHelper = WebAppDetailsHelper().using(gPlayHttpClient) val appDetails = withContext(Dispatchers.IO) { val result = handleNetworkResult { webAppDetailsHelper.getAppByPackageName(application.package_name) } val app = result.data ?: return@withContext null app.toApplication(context) } return appDetails != null } } app/src/main/java/foundation/e/apps/data/login/AuthenticatorRepository.kt +2 −2 Original line number Diff line number Diff line Loading @@ -45,13 +45,13 @@ class AuthenticatorRepository @Inject constructor( appLoungeDataStore.saveAuthData(auth) } suspend fun getAuthObjects(clearAuthTypes: List<String> = listOf()): List<AuthObject> { suspend fun fetchAuthObjects(authTypes: List<String> = listOf()): List<AuthObject> { val authObjectsLocal = ArrayList<AuthObject>() for (authenticator in authenticators) { if (!authenticator.isStoreActive()) continue if (authenticator::class.java.simpleName in clearAuthTypes) { if (authenticator::class.java.simpleName in authTypes) { authenticator.logout() } Loading app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt +4 −19 Original line number Diff line number Diff line Loading @@ -29,12 +29,10 @@ import com.aurora.gplayapi.helpers.ContentRatingHelper import com.aurora.gplayapi.helpers.PurchaseHelper import com.aurora.gplayapi.helpers.contracts.TopChartsContract.Chart import com.aurora.gplayapi.helpers.contracts.TopChartsContract.Type import com.aurora.gplayapi.helpers.web.WebAppDetailsHelper import com.aurora.gplayapi.helpers.web.WebCategoryHelper import com.aurora.gplayapi.helpers.web.WebCategoryStreamHelper import com.aurora.gplayapi.helpers.web.WebSearchHelper import com.aurora.gplayapi.helpers.web.WebTopChartsHelper import dagger.Lazy import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.R import foundation.e.apps.data.StoreRepository Loading @@ -44,7 +42,6 @@ import foundation.e.apps.data.application.data.Home import foundation.e.apps.data.application.utils.CategoryType import foundation.e.apps.data.application.utils.toApplication import foundation.e.apps.data.enums.Source import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.data.login.AuthenticatorRepository import foundation.e.apps.data.login.PlayStoreAuthenticator import foundation.e.apps.data.playstore.utils.GPlayHttpClient Loading @@ -60,7 +57,7 @@ class PlayStoreRepository @Inject constructor( @ApplicationContext private val context: Context, private val gPlayHttpClient: GPlayHttpClient, private val authenticatorRepository: AuthenticatorRepository, private val applicationDataManager: Lazy<ApplicationDataManager> // Used Lazy to break circular dependency private val applicationDataManager: ApplicationDataManager ) : StoreRepository { override suspend fun getHomeScreenData(list: MutableList<Home>): List<Home> { Loading @@ -79,8 +76,8 @@ class PlayStoreRepository @Inject constructor( homeScreenData.map { val fusedApps = it.value.map { app -> app.apply { applicationDataManager.get().updateStatus(this) applicationDataManager.get().updateFilterLevel(this) applicationDataManager.updateStatus(this) applicationDataManager.updateFilterLevel(this) source = Source.PLAY_STORE } } Loading Loading @@ -178,19 +175,7 @@ class PlayStoreRepository @Inject constructor( private suspend fun refreshPlayStoreAuthentication() { Timber.i("Refreshing authentication.") authenticatorRepository.getAuthObjects(listOf(PlayStoreAuthenticator::class.java.simpleName)) } suspend fun getAppDetailsWeb(packageName: String): Application? { val webAppDetailsHelper = WebAppDetailsHelper().using(gPlayHttpClient) return withContext(Dispatchers.IO) { val result = handleNetworkResult { webAppDetailsHelper.getAppByPackageName(packageName) } val app = result.data ?: return@withContext null app.toApplication(context) } authenticatorRepository.fetchAuthObjects(listOf(PlayStoreAuthenticator::class.java.simpleName)) } private fun isEmulator(): Boolean { Loading app/src/main/java/foundation/e/apps/ui/LoginViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -59,7 +59,7 @@ class LoginViewModel @Inject constructor( */ fun startLoginFlow(clearList: List<String> = listOf()) { viewModelScope.launch { val authObjectsLocal = authenticatorRepository.getAuthObjects(clearList) val authObjectsLocal = authenticatorRepository.fetchAuthObjects(clearList) authObjects.postValue(authObjectsLocal) } } Loading Loading
app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt +5 −7 Original line number Diff line number Diff line Loading @@ -21,12 +21,13 @@ package foundation.e.apps.data.application import com.aurora.gplayapi.Constants import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.application.data.Home import foundation.e.apps.data.application.utils.AppVisibilityResolver import foundation.e.apps.data.enums.FilterLevel import foundation.e.apps.data.enums.Source import foundation.e.apps.data.enums.Status import foundation.e.apps.data.playstore.PlayStoreRepository import foundation.e.apps.install.pkg.AppLoungePackageManager import foundation.e.apps.install.pkg.PwaManager import timber.log.Timber import javax.inject.Inject import javax.inject.Singleton Loading @@ -34,7 +35,7 @@ import javax.inject.Singleton class ApplicationDataManager @Inject constructor( private val appLoungePackageManager: AppLoungePackageManager, private val pwaManager: PwaManager, private val playStoreRepository: PlayStoreRepository private val visibilityFetcher: AppVisibilityResolver, ) { suspend fun updateFilterLevel(application: Application) { application.filterLevel = getAppFilterLevel(application) Loading @@ -56,6 +57,7 @@ class ApplicationDataManager @Inject constructor( } suspend fun getAppFilterLevel(application: Application): FilterLevel { Timber.i("getAppFilterLevel: $application") return when { application.package_name.isBlank() -> FilterLevel.UNKNOWN !application.isFree && application.price.isBlank() -> FilterLevel.UI Loading @@ -72,12 +74,8 @@ class ApplicationDataManager @Inject constructor( return application.restriction != Constants.Restriction.NOT_RESTRICTED } /* * Some apps are not visible because of geo-restriction, banning, etc. */ private suspend fun isApplicationVisible(application: Application): Boolean { val appDetails = playStoreRepository.getAppDetailsWeb(application.package_name) return appDetails != null return visibilityFetcher.isApplicationVisible(application) } fun updateStatus(application: Application) { Loading
app/src/main/java/foundation/e/apps/data/application/utils/AppVisibilityResolver.kt 0 → 100644 +31 −0 Original line number Diff line number Diff line package foundation.e.apps.data.application.utils import android.content.Context import com.aurora.gplayapi.helpers.web.WebAppDetailsHelper import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.data.playstore.utils.GPlayHttpClient import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import javax.inject.Inject import javax.inject.Singleton @Singleton class AppVisibilityResolver @Inject constructor( private val gPlayHttpClient: GPlayHttpClient, @ApplicationContext private val context: Context ) { suspend fun isApplicationVisible(application: Application): Boolean { val webAppDetailsHelper = WebAppDetailsHelper().using(gPlayHttpClient) val appDetails = withContext(Dispatchers.IO) { val result = handleNetworkResult { webAppDetailsHelper.getAppByPackageName(application.package_name) } val app = result.data ?: return@withContext null app.toApplication(context) } return appDetails != null } }
app/src/main/java/foundation/e/apps/data/login/AuthenticatorRepository.kt +2 −2 Original line number Diff line number Diff line Loading @@ -45,13 +45,13 @@ class AuthenticatorRepository @Inject constructor( appLoungeDataStore.saveAuthData(auth) } suspend fun getAuthObjects(clearAuthTypes: List<String> = listOf()): List<AuthObject> { suspend fun fetchAuthObjects(authTypes: List<String> = listOf()): List<AuthObject> { val authObjectsLocal = ArrayList<AuthObject>() for (authenticator in authenticators) { if (!authenticator.isStoreActive()) continue if (authenticator::class.java.simpleName in clearAuthTypes) { if (authenticator::class.java.simpleName in authTypes) { authenticator.logout() } Loading
app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt +4 −19 Original line number Diff line number Diff line Loading @@ -29,12 +29,10 @@ import com.aurora.gplayapi.helpers.ContentRatingHelper import com.aurora.gplayapi.helpers.PurchaseHelper import com.aurora.gplayapi.helpers.contracts.TopChartsContract.Chart import com.aurora.gplayapi.helpers.contracts.TopChartsContract.Type import com.aurora.gplayapi.helpers.web.WebAppDetailsHelper import com.aurora.gplayapi.helpers.web.WebCategoryHelper import com.aurora.gplayapi.helpers.web.WebCategoryStreamHelper import com.aurora.gplayapi.helpers.web.WebSearchHelper import com.aurora.gplayapi.helpers.web.WebTopChartsHelper import dagger.Lazy import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.R import foundation.e.apps.data.StoreRepository Loading @@ -44,7 +42,6 @@ import foundation.e.apps.data.application.data.Home import foundation.e.apps.data.application.utils.CategoryType import foundation.e.apps.data.application.utils.toApplication import foundation.e.apps.data.enums.Source import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.data.login.AuthenticatorRepository import foundation.e.apps.data.login.PlayStoreAuthenticator import foundation.e.apps.data.playstore.utils.GPlayHttpClient Loading @@ -60,7 +57,7 @@ class PlayStoreRepository @Inject constructor( @ApplicationContext private val context: Context, private val gPlayHttpClient: GPlayHttpClient, private val authenticatorRepository: AuthenticatorRepository, private val applicationDataManager: Lazy<ApplicationDataManager> // Used Lazy to break circular dependency private val applicationDataManager: ApplicationDataManager ) : StoreRepository { override suspend fun getHomeScreenData(list: MutableList<Home>): List<Home> { Loading @@ -79,8 +76,8 @@ class PlayStoreRepository @Inject constructor( homeScreenData.map { val fusedApps = it.value.map { app -> app.apply { applicationDataManager.get().updateStatus(this) applicationDataManager.get().updateFilterLevel(this) applicationDataManager.updateStatus(this) applicationDataManager.updateFilterLevel(this) source = Source.PLAY_STORE } } Loading Loading @@ -178,19 +175,7 @@ class PlayStoreRepository @Inject constructor( private suspend fun refreshPlayStoreAuthentication() { Timber.i("Refreshing authentication.") authenticatorRepository.getAuthObjects(listOf(PlayStoreAuthenticator::class.java.simpleName)) } suspend fun getAppDetailsWeb(packageName: String): Application? { val webAppDetailsHelper = WebAppDetailsHelper().using(gPlayHttpClient) return withContext(Dispatchers.IO) { val result = handleNetworkResult { webAppDetailsHelper.getAppByPackageName(packageName) } val app = result.data ?: return@withContext null app.toApplication(context) } authenticatorRepository.fetchAuthObjects(listOf(PlayStoreAuthenticator::class.java.simpleName)) } private fun isEmulator(): Boolean { Loading
app/src/main/java/foundation/e/apps/ui/LoginViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -59,7 +59,7 @@ class LoginViewModel @Inject constructor( */ fun startLoginFlow(clearList: List<String> = listOf()) { viewModelScope.launch { val authObjectsLocal = authenticatorRepository.getAuthObjects(clearList) val authObjectsLocal = authenticatorRepository.fetchAuthObjects(clearList) authObjects.postValue(authObjectsLocal) } } Loading