Loading app/src/main/java/foundation/e/apps/data/Stores.kt 0 → 100644 +36 −0 Original line number Diff line number Diff line package foundation.e.apps.data import foundation.e.apps.data.application.ApplicationDataManager import foundation.e.apps.data.application.home.CleanApkAppsHomeDataBuilder import foundation.e.apps.data.application.home.CleanApkPwaHomeDataBuilder import foundation.e.apps.data.application.home.GooglePlayHomeDataBuilder import foundation.e.apps.data.application.home.HomeDataBuilder 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, applicationDataManager: ApplicationDataManager ) { private val mapHomeDataBuilder = mutableMapOf<Source, HomeDataBuilder>() fun getHomeDataBuilder(): Map<Source, HomeDataBuilder> { return mapHomeDataBuilder } init { mapHomeDataBuilder[Source.OPEN] = CleanApkAppsHomeDataBuilder(cleanApkAppsRepository) mapHomeDataBuilder[Source.PWA] = CleanApkPwaHomeDataBuilder(cleanApkPwaRepository) mapHomeDataBuilder[Source.GPLAY] = GooglePlayHomeDataBuilder( playStoreRepository, applicationDataManager ) } } No newline at end of file app/src/main/java/foundation/e/apps/data/application/ApplicationRepository.kt +2 −2 Original line number Diff line number Diff line Loading @@ -52,8 +52,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 app/src/main/java/foundation/e/apps/data/application/home/HomeApi.kt +1 −3 Original line number Diff line number Diff line Loading @@ -24,7 +24,5 @@ import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.application.data.Home interface HomeApi { suspend fun fetchHomeScreenData( authData: AuthData, ): LiveData<ResultSupreme<List<Home>>> suspend fun fetchHomeScreenData(): LiveData<ResultSupreme<List<Home>>> } app/src/main/java/foundation/e/apps/data/application/home/HomeApiImpl.kt +61 −56 Original line number Diff line number Diff line Loading @@ -23,16 +23,19 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.liveData import com.aurora.gplayapi.data.models.AuthData import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.AppSourcesContainer import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.Stores 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.cleanapk.repositories.CleanApkAppsRepository import foundation.e.apps.data.cleanapk.repositories.CleanApkPwaRepository import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.Source import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.data.login.AuthObject import foundation.e.apps.data.playstore.PlayStoreRepository import foundation.e.apps.data.preference.AppLoungePreference import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus Loading @@ -46,21 +49,16 @@ import javax.inject.Inject class HomeApiImpl @Inject constructor( @ApplicationContext private val context: Context, private val appLoungePreference: AppLoungePreference, private val appSources: AppSourcesContainer, private val applicationDataManager: ApplicationDataManager private val stores: Stores ) : HomeApi { companion object { private const val THRESHOLD_LIMITED_RESULT_HOME_PAGE = 4 } private enum class AppSourceWeight { GPLAY, OPEN_SOURCE, PWA } override suspend fun fetchHomeScreenData(authData: AuthData): LiveData<ResultSupreme<List<Home>>> { override suspend fun fetchHomeScreenData(): LiveData<ResultSupreme<List<Home>>> { val list = mutableListOf<Home>() var resultGplay: FusedHomeDeferred? = null var resultOpenSource: FusedHomeDeferred? = null Loading @@ -70,15 +68,15 @@ class HomeApiImpl @Inject constructor( coroutineScope { if (appLoungePreference.isGplaySelected()) { resultGplay = async { loadHomeData(list, Source.GPLAY, authData) } resultGplay = async { loadHomeData(list, Source.GPLAY) } } if (appLoungePreference.isOpenSourceSelected()) { resultOpenSource = async { loadHomeData(list, Source.OPEN, authData) } resultOpenSource = async { loadHomeData(list, Source.OPEN) } } if (appLoungePreference.isPWASelected()) { resultPWA = async { loadHomeData(list, Source.PWA, authData) } resultPWA = async { loadHomeData(list, Source.PWA) } } resultGplay?.await()?.let { Loading @@ -98,26 +96,11 @@ class HomeApiImpl @Inject constructor( private suspend fun loadHomeData( priorList: MutableList<Home>, source: Source, authData: AuthData, source: Source ): ResultSupreme<List<Home>> { val result = when (source) { Source.GPLAY -> handleNetworkResult { fetchGPlayHome(authData, priorList) } Source.OPEN -> handleNetworkResult { handleCleanApkHomes(priorList, SearchApi.APP_TYPE_OPEN) } Source.PWA -> handleNetworkResult { handleCleanApkHomes(priorList, SearchApi.APP_TYPE_PWA) } Source.GITLAB_RELEASES -> { ResultSupreme.Error(message = "Gitlab source not allowed") } val result = handleNetworkResult { val homeDataBuilder = stores.getHomeDataBuilder()[source] homeDataBuilder?.buildHomeScreenData(priorList) } setHomeErrorMessage(result.getResultStatus(), source) Loading @@ -132,23 +115,6 @@ class HomeApiImpl @Inject constructor( return ResultSupreme.create(result.getResultStatus(), priorList) } private suspend fun handleCleanApkHomes( priorList: MutableList<Home>, appType: String ): MutableList<Home> { val homes = if (appType == SearchApi.APP_TYPE_OPEN) { appSources.cleanApkAppsRepo.getHomeScreenData() } else { appSources.cleanApkPWARepo.getHomeScreenData() } homes.forEach { (title, list) -> priorList.add(Home(title, list, appType)) } return priorList } private fun setHomeErrorMessage(apiStatus: ResultStatus, source: Source) { if (apiStatus != ResultStatus.OK) { apiStatus.message = when (source) { Loading @@ -159,15 +125,25 @@ class HomeApiImpl @Inject constructor( } } } } private suspend fun fetchGPlayHome( authData: AuthData, priorList: MutableList<Home> ): List<Home> { val list = mutableListOf<Home>() val gplayHomeData = appSources.gplayRepo.getHomeScreenData() interface HomeDataBuilder { suspend fun buildHomeScreenData(list: MutableList<Home>): List<Home> } class GooglePlayHomeDataBuilder( private val gPlayRepo: PlayStoreRepository, private val applicationDataManager: ApplicationDataManager ) : HomeDataBuilder { gplayHomeData.map { companion object { private const val THRESHOLD_LIMITED_RESULT_HOME_PAGE = 4 } override suspend fun buildHomeScreenData(list: MutableList<Home>): List<Home> { val gPlayHomeData = gPlayRepo.getHomeScreenData() gPlayHomeData.map { val fusedApps = it.value.map { app -> app.apply { applicationDataManager.updateStatus(this) Loading @@ -180,8 +156,7 @@ class HomeApiImpl @Inject constructor( handleLimitedResult(list) Timber.d("HomePageData: $list") priorList.addAll(list) return priorList return list } private fun handleLimitedResult(homeList: List<Home>) { Loading @@ -204,3 +179,33 @@ class HomeApiImpl @Inject constructor( } } } class CleanApkAppsHomeDataBuilder( private val cleanApkAppsRepository: CleanApkAppsRepository ) : HomeDataBuilder { override suspend fun buildHomeScreenData(list: MutableList<Home>): List<Home> { val homes = cleanApkAppsRepository.getHomeScreenData() homes.forEach { (title, apps) -> list.add(Home(title, apps, SearchApi.APP_TYPE_OPEN)) } return list } } class CleanApkPwaHomeDataBuilder( private val cleanApkPwaRepository: CleanApkPwaRepository ) : HomeDataBuilder { override suspend fun buildHomeScreenData(list: MutableList<Home>): List<Home> { val homes = cleanApkPwaRepository.getHomeScreenData() homes.forEach { (title, apps) -> list.add(Home(title, apps, SearchApi.APP_TYPE_PWA)) } return list } } app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepository.kt +0 −3 Original line number Diff line number Diff line Loading @@ -18,12 +18,9 @@ package foundation.e.apps.data.cleanapk.repositories import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.cleanapk.CleanApkDownloadInfoFetcher import foundation.e.apps.data.cleanapk.CleanApkRetrofit 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.search.Search Loading Loading
app/src/main/java/foundation/e/apps/data/Stores.kt 0 → 100644 +36 −0 Original line number Diff line number Diff line package foundation.e.apps.data import foundation.e.apps.data.application.ApplicationDataManager import foundation.e.apps.data.application.home.CleanApkAppsHomeDataBuilder import foundation.e.apps.data.application.home.CleanApkPwaHomeDataBuilder import foundation.e.apps.data.application.home.GooglePlayHomeDataBuilder import foundation.e.apps.data.application.home.HomeDataBuilder 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, applicationDataManager: ApplicationDataManager ) { private val mapHomeDataBuilder = mutableMapOf<Source, HomeDataBuilder>() fun getHomeDataBuilder(): Map<Source, HomeDataBuilder> { return mapHomeDataBuilder } init { mapHomeDataBuilder[Source.OPEN] = CleanApkAppsHomeDataBuilder(cleanApkAppsRepository) mapHomeDataBuilder[Source.PWA] = CleanApkPwaHomeDataBuilder(cleanApkPwaRepository) mapHomeDataBuilder[Source.GPLAY] = GooglePlayHomeDataBuilder( playStoreRepository, applicationDataManager ) } } No newline at end of file
app/src/main/java/foundation/e/apps/data/application/ApplicationRepository.kt +2 −2 Original line number Diff line number Diff line Loading @@ -52,8 +52,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
app/src/main/java/foundation/e/apps/data/application/home/HomeApi.kt +1 −3 Original line number Diff line number Diff line Loading @@ -24,7 +24,5 @@ import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.application.data.Home interface HomeApi { suspend fun fetchHomeScreenData( authData: AuthData, ): LiveData<ResultSupreme<List<Home>>> suspend fun fetchHomeScreenData(): LiveData<ResultSupreme<List<Home>>> }
app/src/main/java/foundation/e/apps/data/application/home/HomeApiImpl.kt +61 −56 Original line number Diff line number Diff line Loading @@ -23,16 +23,19 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.liveData import com.aurora.gplayapi.data.models.AuthData import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.AppSourcesContainer import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.Stores 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.cleanapk.repositories.CleanApkAppsRepository import foundation.e.apps.data.cleanapk.repositories.CleanApkPwaRepository import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.Source import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.data.login.AuthObject import foundation.e.apps.data.playstore.PlayStoreRepository import foundation.e.apps.data.preference.AppLoungePreference import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus Loading @@ -46,21 +49,16 @@ import javax.inject.Inject class HomeApiImpl @Inject constructor( @ApplicationContext private val context: Context, private val appLoungePreference: AppLoungePreference, private val appSources: AppSourcesContainer, private val applicationDataManager: ApplicationDataManager private val stores: Stores ) : HomeApi { companion object { private const val THRESHOLD_LIMITED_RESULT_HOME_PAGE = 4 } private enum class AppSourceWeight { GPLAY, OPEN_SOURCE, PWA } override suspend fun fetchHomeScreenData(authData: AuthData): LiveData<ResultSupreme<List<Home>>> { override suspend fun fetchHomeScreenData(): LiveData<ResultSupreme<List<Home>>> { val list = mutableListOf<Home>() var resultGplay: FusedHomeDeferred? = null var resultOpenSource: FusedHomeDeferred? = null Loading @@ -70,15 +68,15 @@ class HomeApiImpl @Inject constructor( coroutineScope { if (appLoungePreference.isGplaySelected()) { resultGplay = async { loadHomeData(list, Source.GPLAY, authData) } resultGplay = async { loadHomeData(list, Source.GPLAY) } } if (appLoungePreference.isOpenSourceSelected()) { resultOpenSource = async { loadHomeData(list, Source.OPEN, authData) } resultOpenSource = async { loadHomeData(list, Source.OPEN) } } if (appLoungePreference.isPWASelected()) { resultPWA = async { loadHomeData(list, Source.PWA, authData) } resultPWA = async { loadHomeData(list, Source.PWA) } } resultGplay?.await()?.let { Loading @@ -98,26 +96,11 @@ class HomeApiImpl @Inject constructor( private suspend fun loadHomeData( priorList: MutableList<Home>, source: Source, authData: AuthData, source: Source ): ResultSupreme<List<Home>> { val result = when (source) { Source.GPLAY -> handleNetworkResult { fetchGPlayHome(authData, priorList) } Source.OPEN -> handleNetworkResult { handleCleanApkHomes(priorList, SearchApi.APP_TYPE_OPEN) } Source.PWA -> handleNetworkResult { handleCleanApkHomes(priorList, SearchApi.APP_TYPE_PWA) } Source.GITLAB_RELEASES -> { ResultSupreme.Error(message = "Gitlab source not allowed") } val result = handleNetworkResult { val homeDataBuilder = stores.getHomeDataBuilder()[source] homeDataBuilder?.buildHomeScreenData(priorList) } setHomeErrorMessage(result.getResultStatus(), source) Loading @@ -132,23 +115,6 @@ class HomeApiImpl @Inject constructor( return ResultSupreme.create(result.getResultStatus(), priorList) } private suspend fun handleCleanApkHomes( priorList: MutableList<Home>, appType: String ): MutableList<Home> { val homes = if (appType == SearchApi.APP_TYPE_OPEN) { appSources.cleanApkAppsRepo.getHomeScreenData() } else { appSources.cleanApkPWARepo.getHomeScreenData() } homes.forEach { (title, list) -> priorList.add(Home(title, list, appType)) } return priorList } private fun setHomeErrorMessage(apiStatus: ResultStatus, source: Source) { if (apiStatus != ResultStatus.OK) { apiStatus.message = when (source) { Loading @@ -159,15 +125,25 @@ class HomeApiImpl @Inject constructor( } } } } private suspend fun fetchGPlayHome( authData: AuthData, priorList: MutableList<Home> ): List<Home> { val list = mutableListOf<Home>() val gplayHomeData = appSources.gplayRepo.getHomeScreenData() interface HomeDataBuilder { suspend fun buildHomeScreenData(list: MutableList<Home>): List<Home> } class GooglePlayHomeDataBuilder( private val gPlayRepo: PlayStoreRepository, private val applicationDataManager: ApplicationDataManager ) : HomeDataBuilder { gplayHomeData.map { companion object { private const val THRESHOLD_LIMITED_RESULT_HOME_PAGE = 4 } override suspend fun buildHomeScreenData(list: MutableList<Home>): List<Home> { val gPlayHomeData = gPlayRepo.getHomeScreenData() gPlayHomeData.map { val fusedApps = it.value.map { app -> app.apply { applicationDataManager.updateStatus(this) Loading @@ -180,8 +156,7 @@ class HomeApiImpl @Inject constructor( handleLimitedResult(list) Timber.d("HomePageData: $list") priorList.addAll(list) return priorList return list } private fun handleLimitedResult(homeList: List<Home>) { Loading @@ -204,3 +179,33 @@ class HomeApiImpl @Inject constructor( } } } class CleanApkAppsHomeDataBuilder( private val cleanApkAppsRepository: CleanApkAppsRepository ) : HomeDataBuilder { override suspend fun buildHomeScreenData(list: MutableList<Home>): List<Home> { val homes = cleanApkAppsRepository.getHomeScreenData() homes.forEach { (title, apps) -> list.add(Home(title, apps, SearchApi.APP_TYPE_OPEN)) } return list } } class CleanApkPwaHomeDataBuilder( private val cleanApkPwaRepository: CleanApkPwaRepository ) : HomeDataBuilder { override suspend fun buildHomeScreenData(list: MutableList<Home>): List<Home> { val homes = cleanApkPwaRepository.getHomeScreenData() homes.forEach { (title, apps) -> list.add(Home(title, apps, SearchApi.APP_TYPE_PWA)) } return list } }
app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepository.kt +0 −3 Original line number Diff line number Diff line Loading @@ -18,12 +18,9 @@ package foundation.e.apps.data.cleanapk.repositories import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.cleanapk.CleanApkDownloadInfoFetcher import foundation.e.apps.data.cleanapk.CleanApkRetrofit 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.search.Search Loading