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 Original line 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.fusedDownload.models.FusedDownload
import foundation.e.apps.data.gplay.GplayStoreRepository
import foundation.e.apps.data.gplay.GplayStoreRepository
import foundation.e.apps.data.handleNetworkResult
import foundation.e.apps.data.handleNetworkResult
import foundation.e.apps.data.login.AuthObject
import foundation.e.apps.data.preference.PreferenceManagerModule
import foundation.e.apps.data.preference.PreferenceManagerModule
import foundation.e.apps.install.pkg.PWAManagerModule
import foundation.e.apps.install.pkg.PWAManagerModule
import foundation.e.apps.install.pkg.PkgManagerModule
import foundation.e.apps.install.pkg.PkgManagerModule
import foundation.e.apps.ui.home.model.HomeChildFusedAppDiffUtil
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.Deferred
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.async
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
import retrofit2.Response
import retrofit2.Response
import timber.log.Timber
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Inject
@@ -91,6 +96,8 @@ class FusedApiImpl @Inject constructor(
        private const val CATEGORY_TITLE_REPLACEABLE_CONJUNCTION = "&"
        private const val CATEGORY_TITLE_REPLACEABLE_CONJUNCTION = "&"
        private const val CATEGORY_OPEN_GAMES_ID = "game_open_games"
        private const val CATEGORY_OPEN_GAMES_ID = "game_open_games"
        private const val CATEGORY_OPEN_GAMES_TITLE = "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 result = handleNetworkResult {
            val apps =
            val apps =
                cleanApkPWARepository.getSearchResult(query).body()?.apps
                cleanApkPWARepository.getSearchResult(query).body()?.apps
            apps?.apply {
            apps?.forEach {
                if (this.isNotEmpty()) {
                it.updateStatus()
                    pwaApps.addAll(this)
                it.updateType()
                }
                it.updateSource()
                pwaApps.add(it)
            }
            }
        }
        }


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


            handleLimitedResult(fusedAppList)

            if (searchResults.second.isNotEmpty()) {
            if (searchResults.second.isNotEmpty()) {
                fusedAppList.add(FusedApp(isPlaceHolder = true))
                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,
         * This function will replace a GPlay app with F-Droid app if exists,
         * else will show the GPlay app itself.
         * else will show the GPlay app itself.
@@ -1175,10 +1196,30 @@ class FusedApiImpl @Inject constructor(
            }
            }
            list.add(FusedHome(it.key, fusedApps))
            list.add(FusedHome(it.key, fusedApps))
        }
        }
        Timber.d("===> $list")

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

        return 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
     * FusedApp-related internal extensions and functions
     */
     */
+3 −3
Original line number Original line 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="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="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="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">
    <plurals name="updates_notification_title">
        <item quantity="one"><xliff:g id="version_code">%1$d</xliff:g> appuppdatering är tillgänglig</item>
        <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>
        <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="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="refresh_session">UPPADATERA SESSIONEN</string>
    <string name="data_load_error">Ett fel uppstod när appar lästes in.</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_title_paid_app">Köp <b>%1$s</b></string>
    <string name="dialog_confirm">BEKRÄFTA</string>
    <string name="dialog_confirm">BEKRÄFTA</string>
    <string name="unsupported_app_title">Appen stöds ej!</string>
    <string name="unsupported_app_title">Appen stöds ej!</string>
@@ -116,7 +116,7 @@
    <string name="daily">Varje dag</string>
    <string name="daily">Varje dag</string>
    <string name="weekly">Varje vecka</string>
    <string name="weekly">Varje vecka</string>
    <string name="monthly">Varje månad</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="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="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>
    <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>