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

Commit cab849d5 authored by Nishant Dande's avatar Nishant Dande
Browse files

Merge branch 'main' into 1346-connect-anonymous-api-with-ui

parents 48a62ca2 e2dd1688
Loading
Loading
Loading
Loading
Loading
+48 −7
Original line number Diff line number Diff line
@@ -61,13 +61,18 @@ import foundation.e.apps.data.fused.utils.CategoryUtils
import foundation.e.apps.data.fusedDownload.models.FusedDownload
import foundation.e.apps.data.gplay.GplayStoreRepository
import foundation.e.apps.data.handleNetworkResult
import foundation.e.apps.data.login.AuthObject
import foundation.e.apps.data.preference.PreferenceManagerModule
import foundation.e.apps.install.pkg.PWAManagerModule
import foundation.e.apps.install.pkg.PkgManagerModule
import foundation.e.apps.ui.home.model.HomeChildFusedAppDiffUtil
import foundation.e.apps.utils.eventBus.AppEvent
import foundation.e.apps.utils.eventBus.EventBus
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
import retrofit2.Response
import timber.log.Timber
import javax.inject.Inject
@@ -91,6 +96,8 @@ class FusedApiImpl @Inject constructor(
        private const val CATEGORY_TITLE_REPLACEABLE_CONJUNCTION = "&"
        private const val CATEGORY_OPEN_GAMES_ID = "game_open_games"
        private const val CATEGORY_OPEN_GAMES_TITLE = "Open games"
        private const val THRESHOLD_LIMITED_RESULT_HOME_PAGE = 4
        private const val KEYWORD_TEST_SEARCH = "facebook"
    }

    /**
@@ -281,10 +288,11 @@ class FusedApiImpl @Inject constructor(
        val result = handleNetworkResult {
            val apps =
                cleanApkPWARepository.getSearchResult(query).body()?.apps
            apps?.apply {
                if (this.isNotEmpty()) {
                    pwaApps.addAll(this)
                }
            apps?.forEach {
                it.updateStatus()
                it.updateType()
                it.updateSource()
                pwaApps.add(it)
            }
        }

@@ -1009,8 +1017,7 @@ class FusedApiImpl @Inject constructor(
        response?.forEach {
            it.updateStatus()
            it.updateType()
            it.source =
                if (source.contentEquals(CleanApkRetrofit.APP_SOURCE_FOSS)) "Open Source" else "PWA"
            it.updateSource()
            list.add(it)
        }
        return list
@@ -1031,6 +1038,8 @@ class FusedApiImpl @Inject constructor(
            val fusedAppList =
                searchResults.first.map { app -> replaceWithFDroid(app) }.toMutableList()

            handleLimitedResult(fusedAppList)

            if (searchResults.second.isNotEmpty()) {
                fusedAppList.add(FusedApp(isPlaceHolder = true))
            }
@@ -1039,6 +1048,18 @@ class FusedApiImpl @Inject constructor(
        }
    }

    private suspend fun handleLimitedResult(appList: List<FusedApp>?) {
        if (appList.isNullOrEmpty()) {
            // Call search api with a common keyword (ex: facebook)
            // to ensure Gplay is returning empty as search result for other keywords as well
            val searchResult = gplayRepository.getSearchResult(KEYWORD_TEST_SEARCH, null)
            if (searchResult.first.isEmpty()) {
                Timber.w("Limited result for search is found...")
                refreshToken()
            }
        }
    }

    /*
         * This function will replace a GPlay app with F-Droid app if exists,
         * else will show the GPlay app itself.
@@ -1175,10 +1196,30 @@ class FusedApiImpl @Inject constructor(
            }
            list.add(FusedHome(it.key, fusedApps))
        }
        Timber.d("===> $list")

        handleLimitedResult(list)
        Timber.d("HomePageData: $list")

        return list
    }

    private fun handleLimitedResult(fusedHomeList: List<FusedHome>) {
        val gplayHomes = fusedHomeList.filter { fusedHome -> fusedHome.source.isEmpty() }
        val hasGplayLimitedResult = gplayHomes.any { fusedHome -> fusedHome.list.size < THRESHOLD_LIMITED_RESULT_HOME_PAGE }
        if (hasGplayLimitedResult) {
            Timber.w("Limited result is found for homepage...")
            refreshToken()
        }
    }

    private fun refreshToken() {
        MainScope().launch {
            EventBus.invokeEvent(
                AppEvent.InvalidAuthEvent(AuthObject.GPlayAuth::class.java.simpleName)
            )
        }
    }

    /*
     * FusedApp-related internal extensions and functions
     */
+3 −3
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@
    <string name="version">Version: <xliff:g id="version_code">%1$s</xliff:g></string>
    <string name="license">Licens: <xliff:g id="version_code">%1$s</xliff:g></string>
    <string name="install_blocked_google">Betalda appar stöds ännu inte i App Lounge. Ha lite tålamod, det kommer snart vara aktuellt.</string>
    <string name="not_enough_storage">Det finns inte tillräckligt med utrymme för att hämta denna app.</string>
    <string name="not_enough_storage">Det finns inte tillräckligt med utrymme för att hämta denna app!</string>
    <plurals name="updates_notification_title">
        <item quantity="one"><xliff:g id="version_code">%1$d</xliff:g> appuppdatering är tillgänglig</item>
        <item quantity="other"><xliff:g id="version_code">%1$d</xliff:g> appuppdateringar är tillgängliga</item>
@@ -108,7 +108,7 @@
    <string name="too_many_requests_desc">Det anonyma kontot du använder är inte tillgängligt. Uppdatera sessionen för att få ett annat.</string>
    <string name="refresh_session">UPPADATERA SESSIONEN</string>
    <string name="data_load_error">Ett fel uppstod när appar lästes in.</string>
    <string name="sign_in_failed_title">Inloggning med Google misslyckades</string>
    <string name="sign_in_failed_title">Inloggning med Google misslyckades!</string>
    <string name="dialog_title_paid_app">Köp <b>%1$s</b></string>
    <string name="dialog_confirm">BEKRÄFTA</string>
    <string name="unsupported_app_title">Appen stöds ej!</string>
@@ -116,7 +116,7 @@
    <string name="daily">Varje dag</string>
    <string name="weekly">Varje vecka</string>
    <string name="monthly">Varje månad</string>
    <string name="anonymous_login_failed">Anonym inloggning misslyckades.</string>
    <string name="anonymous_login_failed">Anonym inloggning misslyckades!</string>
    <string name="preference_update_wifi_only_title" weblate_ctx="settings">Endast på nätverk med obegränsad data</string>
    <string name="rating_description">Betyg av 5. Beräknad utifrån användares betyg av appen.</string>
    <string name="preference_update_wifi_only_description" weblate_ctx="settings">Uppdatera endast appar automatiskt på nätverk utan databegränsning som t.ex. Wi-Fi</string>