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

Commit 2e86fc64 authored by Jonathan Klee's avatar Jonathan Klee
Browse files

Merge branch '0000-u-refacto-2025' into 'main'

Refacto 2025

See merge request !527
parents 37a5459d ed7d49b6
Loading
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -19,8 +19,10 @@
package foundation.e.apps.data

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

interface StoreRepository {
    suspend fun getHomeScreenData(): Map<String, List<Application>>
    suspend fun getAppDetails(packageNameOrId: String): Application
    suspend fun getHomeScreenData(list: MutableList<Home>): List<Home>
    suspend fun getAppDetails(packageName: String): Application
    suspend fun getSearchResults(pattern: String): List<Application>
}
+39 −0
Original line number Diff line number Diff line
package foundation.e.apps.data

import foundation.e.apps.data.cleanapk.repositories.CleanApkAppsRepository
import foundation.e.apps.data.cleanapk.repositories.CleanApkPwaRepository
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.playstore.PlayStoreRepository
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class Stores @Inject constructor(
    playStoreRepository: PlayStoreRepository,
    cleanApkAppsRepository: CleanApkAppsRepository,
    cleanApkPwaRepository: CleanApkPwaRepository,
) {

    private val defaultStores = mapOf(
        Source.OPEN_SOURCE to cleanApkAppsRepository,
        Source.PWA to cleanApkPwaRepository,
        Source.PLAY_STORE to playStoreRepository
    )

    private val stores = defaultStores.toMutableMap()

    fun getStores(): Map<Source, StoreRepository> = stores

    fun getStore(source: Source): StoreRepository? = stores[source]

    fun enableStore(source: Source) {
        val repository = defaultStores[source] ?: throw IllegalStateException("store not found")
        stores[source] = repository
    }

    fun disableStore(source: Source) {
        stores.remove(source)
    }

    fun isStoreEnabled(source: Source): Boolean = stores.containsKey(source)
}
 No newline at end of file
+6 −32
Original line number Diff line number Diff line
@@ -22,9 +22,8 @@ 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.enums.FilterLevel
import foundation.e.apps.data.enums.Origin
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.PwaManager
import foundation.e.apps.install.pkg.AppLoungePackageManager
import javax.inject.Inject
@@ -32,15 +31,14 @@ import javax.inject.Singleton

@Singleton
class ApplicationDataManager @Inject constructor(
    private val gPlayRepository: PlayStoreRepository,
    private val appLoungePackageManager: AppLoungePackageManager,
    private val pwaManager: PwaManager
) {
    suspend fun updateFilterLevel(application: Application) {
    fun updateFilterLevel(application: Application) {
        application.filterLevel = getAppFilterLevel(application)
    }

    suspend fun prepareApps(
    fun prepareApps(
        appList: List<Application>,
        list: MutableList<Home>,
        value: String
@@ -55,16 +53,14 @@ class ApplicationDataManager @Inject constructor(
        }
    }

    suspend fun getAppFilterLevel(application: Application): FilterLevel {
    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
            application.source == Source.PWA || application.source == Source.OPEN_SOURCE -> FilterLevel.NONE
            application.source == Source.SYSTEM_APP -> FilterLevel.NONE
            !isRestricted(application) -> FilterLevel.NONE
            !isApplicationVisible(application) -> FilterLevel.DATA
            application.originalSize == 0L -> FilterLevel.UI
            !isDownloadable(application) -> FilterLevel.UI
            else -> FilterLevel.NONE
        }
    }
@@ -73,28 +69,6 @@ class ApplicationDataManager @Inject constructor(
        return application.restriction != Constants.Restriction.NOT_RESTRICTED
    }

    /*
     * Some apps are simply not visible.
     * Example: com.skype.m2
     */
    private suspend fun isApplicationVisible(application: Application): Boolean {
        return kotlin.runCatching { gPlayRepository.getAppDetails(application.package_name) }.isSuccess
    }

    /*
     * Some apps are visible but not downloadable.
     * Example: com.riotgames.league.wildrift
     */
    private suspend fun isDownloadable(application: Application): Boolean {
        return kotlin.runCatching {
            gPlayRepository.getDownloadInfo(
                application.package_name,
                application.latest_version_code,
                application.offer_type,
            )
        }.isSuccess
    }

    fun updateStatus(application: Application) {
        if (application.status != Status.INSTALLATION_ISSUE) {
            application.status = getFusedAppInstallationStatus(application)
+14 −21
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.application.apps.AppsApi
import foundation.e.apps.data.application.category.CategoryApi
import foundation.e.apps.data.enums.FilterLevel
import foundation.e.apps.data.enums.Origin
import foundation.e.apps.data.enums.ResultStatus
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
@@ -52,8 +51,8 @@ class ApplicationRepository @Inject constructor(
    private val downloadInfoApi: DownloadInfoApi
) {

    suspend fun getHomeScreenData(authData: AuthData): LiveData<ResultSupreme<List<Home>>> {
        return homeApi.fetchHomeScreenData(authData)
    suspend fun getHomeScreenData(): LiveData<ResultSupreme<List<Home>>> {
        return homeApi.fetchHomeScreenData()
    }

    fun getSelectedAppTypes(): List<String> {
@@ -62,9 +61,9 @@ class ApplicationRepository @Inject constructor(

    suspend fun getApplicationDetails(
        packageNameList: List<String>,
        origin: Origin
        source: Source
    ): Pair<List<Application>, ResultStatus> {
        return appsApi.getApplicationDetails(packageNameList, origin)
        return appsApi.getApplicationDetails(packageNameList, source)
    }

    suspend fun getAppFilterLevel(application: Application): FilterLevel {
@@ -74,21 +73,17 @@ class ApplicationRepository @Inject constructor(
    suspend fun getApplicationDetails(
        id: String,
        packageName: String,
        origin: Origin
        source: Source
    ): Pair<Application, ResultStatus> {
        return appsApi.getApplicationDetails(id, packageName, origin)
    }

    suspend fun getCleanapkAppDetails(packageName: String): Pair<Application, ResultStatus> {
        return appsApi.getCleanapkAppDetails(packageName)
        return appsApi.getApplicationDetails(id, packageName, source)
    }

    suspend fun updateFusedDownloadWithDownloadingInfo(
        origin: Origin,
        source: Source,
        appInstall: AppInstall
    ) {
        downloadInfoApi.updateFusedDownloadWithDownloadingInfo(
            origin,
            source,
            appInstall
        )
    }
@@ -116,17 +111,15 @@ class ApplicationRepository @Inject constructor(
    }

    suspend fun getCleanApkSearchResults(
        query: String,
        authData: AuthData
        query: String
    ): SearchResult {
        return searchAPIImpl.getCleanApkSearchResults(query, authData)
        return searchAPIImpl.getCleanApkSearchResults(query)
    }

    suspend fun getGplaySearchResults(
        query: String,
        nextPageSubBundle: Set<SearchBundle.SubBundle>?
    ): GplaySearchResult {
        return searchAPIImpl.getGplaySearchResult(query, nextPageSubBundle)
        query: String
    ): SearchResult {
        return searchAPIImpl.getGplaySearchResult(query)
    }

    suspend fun getAppsListBasedOnCategory(
@@ -136,7 +129,7 @@ class ApplicationRepository @Inject constructor(
        source: Source
    ): ResultSupreme<Pair<List<Application>, String>> {
        return when (source) {
            Source.OPEN -> categoryApi.getCleanApkAppsByCategory(category, Source.OPEN)
            Source.OPEN_SOURCE -> categoryApi.getCleanApkAppsByCategory(category, Source.OPEN_SOURCE)
            Source.PWA -> categoryApi.getCleanApkAppsByCategory(category, Source.PWA)
            else -> categoryApi.getGplayAppsByCategory(authData, category, pageUrl)
        }
+3 −5
Original line number Diff line number Diff line
@@ -18,12 +18,10 @@

package foundation.e.apps.data.application.apps

import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.ContentRating
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.FilterLevel
import foundation.e.apps.data.enums.Origin
import foundation.e.apps.data.enums.ResultStatus
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status

interface AppsApi {
@@ -36,13 +34,13 @@ interface AppsApi {

    suspend fun getApplicationDetails(
        packageNameList: List<String>,
        origin: Origin
        source: Source
    ): Pair<List<Application>, ResultStatus>

    suspend fun getApplicationDetails(
        id: String,
        packageName: String,
        origin: Origin
        source: Source
    ): Pair<Application, ResultStatus>

    /**
Loading