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

Commit fff0bd65 authored by Jonathan Klee's avatar Jonathan Klee
Browse files

Merge branch '0000-u-update-gplay-api' into 'main'

Integrate latest version of gplayapi lib to benefit from Web based API

See merge request !515
parents 556eaacd 1c979480
Loading
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -182,7 +182,7 @@ dependencies {
    api files('libs/splitinstall-lib.jar')

    implementation 'foundation.e.lib:telemetry:0.0.11-alpha'
    implementation "foundation.e:gplayapi:3.2.10-4"
    implementation 'foundation.e:gplayapi:3.4.2-0'
    implementation 'androidx.core:core-ktx:1.9.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'androidx.fragment:fragment-ktx:1.5.6'
@@ -249,9 +249,9 @@ dependencies {
    implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"

    // Hilt
    def hilt_version = '2.40.5'
    kapt "com.google.dagger:hilt-compiler:2.44.2"
    implementation "com.google.dagger:hilt-android:2.44.2"
    def hilt_version = '2.51.1'
    kapt "com.google.dagger:hilt-compiler:$hilt_version"
    implementation "com.google.dagger:hilt-android:$hilt_version"
    implementation 'androidx.hilt:hilt-work:1.0.0'
    kapt 'androidx.hilt:hilt-compiler:1.0.0'

@@ -271,10 +271,9 @@ dependencies {
    testImplementation "org.jetbrains.kotlin:kotlin-test:$test_kotlin_version"

    // Room
    def roomVersion = "2.4.1"
    kapt "androidx.room:room-compiler:$roomVersion"
    implementation "androidx.room:room-ktx:$roomVersion"
    implementation "androidx.room:room-runtime:$roomVersion"
    kapt "androidx.room:room-compiler:2.6.1"
    implementation "androidx.room:room-ktx:2.6.1"
    implementation "androidx.room:room-runtime:2.6.1"

    // WorkManager
    implementation 'androidx.work:work-runtime-ktx:2.7.1'
+1 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ private const val ERROR_GPLAY_API = "Gplay api has faced error!"
private const val REGEX_429_OR_401 = "429|401"
private const val MAX_RETRY_DELAY_IN_SECONDS = 300
private const val ONE_SECOND_IN_MILLIS = 1000L
private const val INITIAL_DELAY_RETRY_IN_SECONDS = 10
private const val INITIAL_DELAY_RETRY_IN_SECONDS = 1

suspend fun <T> handleNetworkResult(call: suspend () -> T): ResultSupreme<T> {
    return try {
+4 −6
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@
package foundation.e.apps.data.application

import com.aurora.gplayapi.Constants
import com.aurora.gplayapi.data.models.AuthData
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.application.data.Home
import foundation.e.apps.data.enums.FilterLevel
@@ -37,8 +36,8 @@ class ApplicationDataManager @Inject constructor(
    private val appLoungePackageManager: AppLoungePackageManager,
    private val pwaManager: PwaManager
) {
    suspend fun updateFilterLevel(authData: AuthData?, application: Application) {
        application.filterLevel = getAppFilterLevel(application, authData)
    suspend fun updateFilterLevel(application: Application) {
        application.filterLevel = getAppFilterLevel(application)
    }

    suspend fun prepareApps(
@@ -50,20 +49,19 @@ class ApplicationDataManager @Inject constructor(
            appList.forEach {
                it.updateType()
                updateStatus(it)
                updateFilterLevel(null, it)
                updateFilterLevel(it)
            }
            list.add(Home(value, appList))
        }
    }

    suspend fun getAppFilterLevel(application: Application, authData: AuthData?): FilterLevel {
    suspend fun getAppFilterLevel(application: Application): FilterLevel {
        return when {
            application.package_name.isBlank() -> FilterLevel.UNKNOWN
            !application.isFree && application.price.isBlank() -> FilterLevel.UI
            application.origin == Origin.CLEANAPK -> FilterLevel.NONE
            application.origin == Origin.GITLAB_RELEASES -> FilterLevel.NONE
            !isRestricted(application) -> FilterLevel.NONE
            authData == null -> FilterLevel.UNKNOWN // cannot determine for gplay app
            !isApplicationVisible(application) -> FilterLevel.DATA
            application.originalSize == 0L -> FilterLevel.UI
            !isDownloadable(application) -> FilterLevel.UI
+7 −7
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ class AppsApiImpl @Inject constructor(
                    appSources.cleanApkAppsRepo.getAppDetails(result.apps[0]._id)
            }

            application.updateFilterLevel(null)
            application.updateFilterLevel()
        }

        return Pair(application, result.getResultStatus())
@@ -72,8 +72,8 @@ class AppsApiImpl @Inject constructor(
    /*
     * Handy method to run on an instance of FusedApp to update its filter level.
     */
    private suspend fun Application.updateFilterLevel(authData: AuthData?) {
        this.filterLevel = applicationDataManager.getAppFilterLevel(this, authData)
    private suspend fun Application.updateFilterLevel() {
        this.filterLevel = applicationDataManager.getAppFilterLevel(this)
    }

    override suspend fun getApplicationDetails(
@@ -148,7 +148,7 @@ class AppsApiImpl @Inject constructor(
        applicationList: MutableList<Application>
    ) {
        val application = app.toApplication(context)
        val filter = applicationDataManager.getAppFilterLevel(application, authData)
        val filter = applicationDataManager.getAppFilterLevel(application)
        if (filter.isUnFiltered()) {
            applicationList.add(
                application.apply {
@@ -173,7 +173,7 @@ class AppsApiImpl @Inject constructor(
        if (hasSingleResult()) {
            applicationList.add(
                apps[0].apply {
                    updateFilterLevel(null)
                    updateFilterLevel()
                }
            )
        }
@@ -201,7 +201,7 @@ class AppsApiImpl @Inject constructor(
                applicationDataManager.updateStatus(it)
                it.updateType()
                it.updateSource(context)
                it.updateFilterLevel(authData)
                it.updateFilterLevel()
            }
            application
        }
@@ -217,7 +217,7 @@ class AppsApiImpl @Inject constructor(
        application: Application,
        authData: AuthData?
    ): FilterLevel {
        return applicationDataManager.getAppFilterLevel(application, authData)
        return applicationDataManager.getAppFilterLevel(application)
    }

    override fun isAnyFusedAppUpdated(
+7 −15
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ package foundation.e.apps.data.application.category
import android.content.Context
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.StreamCluster
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.R
import foundation.e.apps.data.AppSourcesContainer
@@ -180,15 +179,13 @@ class CategoryApiImpl @Inject constructor(
        var nextPageUrl = ""

        return handleNetworkResult {
            val streamCluster =
                appSources.gplayRepo.getAppsByCategory(category, pageUrl) as StreamCluster
            val cluster =
                appSources.gplayRepo.getAppsByCategory(category, pageUrl)

            val filteredAppList = filterRestrictedGPlayApps(authData, streamCluster.clusterAppList)
            filteredAppList.data?.let {
                applicationList = it.toMutableList()
            }
            val filteredAppList = filterRestrictedGPlayApps(cluster.clusterAppList)
            applicationList = (filteredAppList.data ?: emptyList()).toMutableList()

            nextPageUrl = streamCluster.clusterNextPageUrl
            nextPageUrl = cluster.clusterNextPageUrl
            if (nextPageUrl.isNotEmpty()) {
                applicationList.add(Application(isPlaceHolder = true))
            }
@@ -208,17 +205,12 @@ class CategoryApiImpl @Inject constructor(
     * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5131 [2]
     */
    private suspend fun filterRestrictedGPlayApps(
        authData: AuthData,
        appList: List<App>,
    ): ResultSupreme<List<Application>> {
        val filteredApplications = mutableListOf<Application>()
        return handleNetworkResult {
            appList.forEach {
                val filter = applicationDataManager.getAppFilterLevel(
                    it.toApplication(context),
                    authData
                )

                val filter = applicationDataManager.getAppFilterLevel(it.toApplication(context))
                if (filter.isUnFiltered()) {
                    filteredApplications.add(
                        it.toApplication(context).apply {
@@ -242,7 +234,7 @@ class CategoryApiImpl @Inject constructor(
            response?.apps?.forEach {
                applicationDataManager.updateStatus(it)
                it.updateType()
                applicationDataManager.updateFilterLevel(null, it)
                applicationDataManager.updateFilterLevel(it)
                list.add(it)
            }
        }
Loading