Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47705fe9 authored by Jonathan Klee's avatar Jonathan Klee
Browse files

Merge branch '0000-a15-remove-circular-dependency' into 'main'

Remove circular dependency

See merge request !591
parents acc17cdc b1dc479c
Loading
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -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

@@ -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)
@@ -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
@@ -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) {
+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
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -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()
            }

+4 −19
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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> {
@@ -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
                }
            }
@@ -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 {
+1 −1
Original line number Diff line number Diff line
@@ -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