Loading app/src/main/java/foundation/e/apps/data/StoreRepository.kt +4 −2 Original line number Diff line number Diff line Loading @@ -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> } app/src/main/java/foundation/e/apps/data/Stores.kt 0 → 100644 +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 app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt +6 −32 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 } } Loading @@ -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) Loading app/src/main/java/foundation/e/apps/data/application/ApplicationRepository.kt +14 −21 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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> { Loading @@ -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 { Loading @@ -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 ) } Loading Loading @@ -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( Loading @@ -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) } Loading app/src/main/java/foundation/e/apps/data/application/apps/AppsApi.kt +3 −5 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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 Loading
app/src/main/java/foundation/e/apps/data/StoreRepository.kt +4 −2 Original line number Diff line number Diff line Loading @@ -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> }
app/src/main/java/foundation/e/apps/data/Stores.kt 0 → 100644 +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
app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt +6 −32 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 } } Loading @@ -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) Loading
app/src/main/java/foundation/e/apps/data/application/ApplicationRepository.kt +14 −21 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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> { Loading @@ -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 { Loading @@ -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 ) } Loading Loading @@ -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( Loading @@ -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) } Loading
app/src/main/java/foundation/e/apps/data/application/apps/AppsApi.kt +3 −5 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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