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

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

Merge branch '0000-u-improvements-jklee-2' into '0000-u-refacto'

Sanitize StoreRepository interface and the classes implementing it

See merge request !503
parents ba635100 178cb995
Loading
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -18,7 +18,9 @@

package foundation.e.apps.data

import foundation.e.apps.data.application.data.Application

interface StoreRepository {
    suspend fun getHomeScreenData(): Any
    suspend fun getAppDetails(packageNameOrId: String): Any?
    suspend fun getHomeScreenData(): Map<String, List<Application>>
    suspend fun getAppDetails(packageNameOrId: String): Application
}
+6 −10
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ package foundation.e.apps.data.application.apps
import android.content.Context
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.ContentRating
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.data.AppSourcesContainer
import foundation.e.apps.data.application.ApplicationDataManager
@@ -38,7 +37,7 @@ import foundation.e.apps.data.preference.AppLoungePreference
import foundation.e.apps.ui.applicationlist.ApplicationDiffUtil
import retrofit2.Response
import javax.inject.Inject
import foundation.e.apps.data.cleanapk.data.app.Application as CleanApkApplication
import foundation.e.apps.data.cleanapk.data.app.CleanApkApplication

class AppsApiImpl @Inject constructor(
    @ApplicationContext private val context: Context,
@@ -61,8 +60,7 @@ class AppsApiImpl @Inject constructor(

            if (result?.hasSingleResult() == true) {
                application =
                    (appSources.cleanApkAppsRepo.getAppDetails(result.apps[0]._id)
                            as Response<CleanApkApplication>).body()?.app ?: Application()
                    appSources.cleanApkAppsRepo.getAppDetails(result.apps[0]._id)
            }

            application.updateFilterLevel(null)
@@ -190,18 +188,16 @@ class AppsApiImpl @Inject constructor(
        authData: AuthData,
        origin: Origin
    ): Pair<Application, ResultStatus> {
        var application: Application?
        var application: Application

        val result = handleNetworkResult {
            application = if (origin == Origin.CLEANAPK) {
                (appSources.cleanApkAppsRepo.getAppDetails(id)
                        as Response<CleanApkApplication>).body()?.app
                appSources.cleanApkAppsRepo.getAppDetails(id)
            } else {
                val app = appSources.gplayRepo.getAppDetails(packageName) as App?
                app?.toApplication(context)
                appSources.gplayRepo.getAppDetails(packageName)
            }

            application?.let {
            application.let {
                applicationDataManager.updateStatus(it)
                it.updateType()
                it.updateSource(context)
+8 −83
Original line number Diff line number Diff line
@@ -21,18 +21,14 @@ package foundation.e.apps.data.application.home
import android.content.Context
import androidx.lifecycle.LiveData
import androidx.lifecycle.liveData
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.R
import foundation.e.apps.data.AppSourcesContainer
import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.application.ApplicationDataManager
import foundation.e.apps.data.application.data.Home
import foundation.e.apps.data.application.search.FusedHomeDeferred
import foundation.e.apps.data.application.search.SearchApi
import foundation.e.apps.data.application.utils.toApplication
import foundation.e.apps.data.cleanapk.data.home.HomeScreen
import foundation.e.apps.data.enums.ResultStatus
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.handleNetworkResult
@@ -44,10 +40,8 @@ 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
import foundation.e.apps.data.cleanapk.data.home.Home as CleanApkHome

class HomeApiImpl @Inject constructor(
    @ApplicationContext private val context: Context,
@@ -142,87 +136,19 @@ class HomeApiImpl @Inject constructor(
        priorList: MutableList<Home>,
        appType: String
    ): MutableList<Home> {
        val response = if (appType == SearchApi.APP_TYPE_OPEN) {
            (appSources.cleanApkAppsRepo.getHomeScreenData() as Response<HomeScreen>).body()
        val homes = if (appType == SearchApi.APP_TYPE_OPEN) {
            appSources.cleanApkAppsRepo.getHomeScreenData()
        } else {
            (appSources.cleanApkPWARepo.getHomeScreenData() as Response<HomeScreen>).body()
            appSources.cleanApkPWARepo.getHomeScreenData()
        }

        response?.home?.let {
            priorList.addAll(generateCleanAPKHome(it, appType))
        homes.forEach { (title, list) ->
            priorList.add(Home(title, list, appType))
        }

        return priorList
    }

    private suspend fun generateCleanAPKHome(home: CleanApkHome, appType: String): List<Home> {
        val list = mutableListOf<Home>()
        val headings = if (appType == SearchApi.APP_TYPE_OPEN) {
            getOpenSourceHomeCategories()
        } else {
            getPWAHomeCategories()
        }

        headings.forEach { (key, value) ->
            when (key) {
                "top_updated_apps" -> {
                    applicationDataManager.prepareApps(home.top_updated_apps, list, value)
                }

                "top_updated_games" -> {
                    applicationDataManager.prepareApps(home.top_updated_games, list, value)
                }

                "popular_apps" -> {
                    applicationDataManager.prepareApps(home.popular_apps, list, value)
                }

                "popular_games" -> {
                    applicationDataManager.prepareApps(home.popular_games, list, value)
                }

                "popular_apps_in_last_24_hours" -> {
                    applicationDataManager.prepareApps(
                        home.popular_apps_in_last_24_hours,
                        list,
                        value
                    )
                }

                "popular_games_in_last_24_hours" -> {
                    applicationDataManager.prepareApps(
                        home.popular_games_in_last_24_hours,
                        list,
                        value
                    )
                }

                "discover" -> {
                    applicationDataManager.prepareApps(home.discover, list, value)
                }
            }
        }

        return list.map {
            it.source = appType
            it
        }
    }

    private fun getPWAHomeCategories() = mapOf(
        "popular_apps" to context.getString(R.string.popular_apps),
        "popular_games" to context.getString(R.string.popular_games),
        "discover" to context.getString(R.string.discover_pwa)
    )

    private fun getOpenSourceHomeCategories() = mapOf(
        "top_updated_apps" to context.getString(R.string.top_updated_apps),
        "top_updated_games" to context.getString(R.string.top_updated_games),
        "popular_apps_in_last_24_hours" to context.getString(R.string.popular_apps_in_last_24_hours),
        "popular_games_in_last_24_hours" to context.getString(R.string.popular_games_in_last_24_hours),
        "discover" to context.getString(R.string.discover)
    )

    private fun setHomeErrorMessage(apiStatus: ResultStatus, source: Source) {
        if (apiStatus != ResultStatus.OK) {
            apiStatus.message = when (source) {
@@ -239,11 +165,11 @@ class HomeApiImpl @Inject constructor(
        priorList: MutableList<Home>
    ): List<Home> {
        val list = mutableListOf<Home>()
        val gplayHomeData =
            appSources.gplayRepo.getHomeScreenData() as Map<String, List<App>>
        val gplayHomeData = appSources.gplayRepo.getHomeScreenData()

        gplayHomeData.map {
            val fusedApps = it.value.map { app ->
                app.toApplication(context).apply {
                app.apply {
                    applicationDataManager.updateStatus(this)
                    applicationDataManager.updateFilterLevel(authData, this)
                }
@@ -277,5 +203,4 @@ class HomeApiImpl @Inject constructor(
            )
        }
    }

}
+8 −8
Original line number Diff line number Diff line
@@ -22,22 +22,22 @@ import com.google.gson.Gson
import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import foundation.e.apps.data.cleanapk.data.app.Application
import foundation.e.apps.data.cleanapk.data.app.CleanApkApplication

class ApplicationDeserializer : JsonDeserializer<Application> {
class ApplicationDeserializer : JsonDeserializer<CleanApkApplication> {
    override fun deserialize(
        json: JsonElement?,
        typeOfT: java.lang.reflect.Type?,
        context: JsonDeserializationContext?
    ): Application {
    ): CleanApkApplication {
        val gson = Gson()
        val application = gson.fromJson(json?.asJsonObject?.toString(), Application::class.java)
        val lastUpdate = application.app.latest_downloaded_version
        val cleanApkApplication = gson.fromJson(json?.asJsonObject?.toString(), CleanApkApplication::class.java)
        val lastUpdate = cleanApkApplication.app.latest_downloaded_version
        val lastUpdateJson = json?.asJsonObject?.get("app")?.asJsonObject?.get(lastUpdate)?.asJsonObject
        val lastUpdatedOn = lastUpdateJson
            ?.asJsonObject?.get("update_on")?.asString ?: ""
        application.app.updatedOn = lastUpdatedOn
        application.app.latest_version_code = lastUpdateJson?.get("version_code")?.asInt ?: -1
        return application
        cleanApkApplication.app.updatedOn = lastUpdatedOn
        cleanApkApplication.app.latest_version_code = lastUpdateJson?.get("version_code")?.asInt ?: -1
        return cleanApkApplication
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -18,10 +18,10 @@

package foundation.e.apps.data.cleanapk

import foundation.e.apps.data.cleanapk.data.app.Application
import foundation.e.apps.data.cleanapk.data.app.CleanApkApplication
import foundation.e.apps.data.cleanapk.data.categories.Categories
import foundation.e.apps.data.cleanapk.data.download.Download
import foundation.e.apps.data.cleanapk.data.home.HomeScreen
import foundation.e.apps.data.cleanapk.data.home.HomeScreenResponse
import foundation.e.apps.data.cleanapk.data.search.Search
import retrofit2.Response
import retrofit2.http.GET
@@ -48,7 +48,7 @@ interface CleanApkRetrofit {
    suspend fun getHomeScreenData(
        @Query("type") type: String = APP_TYPE_ANY,
        @Query("source") source: String = APP_SOURCE_ANY,
    ): Response<HomeScreen>
    ): Response<HomeScreenResponse>

    // TODO: Reminder that this function is for search App and PWA both
    @GET("apps?action=app_detail")
@@ -56,7 +56,7 @@ interface CleanApkRetrofit {
        @Query("id") id: String,
        @Query("architectures") architectures: List<String>? = null,
        @Query("type") type: String? = null
    ): Response<Application>
    ): Response<CleanApkApplication>

    @GET("apps?action=search")
    suspend fun searchApps(
Loading