diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml
index 21ad79f516a33adfd9001d3d42594fe136bff908..b01b024b653fe45ad950743ee0d5bbf287232c40 100644
--- a/app/detekt-baseline.xml
+++ b/app/detekt-baseline.xml
@@ -12,9 +12,7 @@
ImplicitDefaultLocale:UpdatesFragment.kt$UpdatesFragment$String.format("%d%%", progress)
InstanceOfCheckForException:GPlayHttpClient.kt$GPlayHttpClient$e is SocketTimeoutException
InvalidPackageDeclaration:Trackers.kt$package foundation.e.apps.data.exodus
- LargeClass:ApplicationApiImpl.kt$ApplicationApiImpl : ApplicationApi
LargeClass:ApplicationFragment.kt$ApplicationFragment : TimeoutFragment
- LongParameterList:ApplicationApiImpl.kt$ApplicationApiImpl$( private val pkgManagerModule: PkgManagerModule, private val pwaManagerModule: PWAManagerModule, private val preferenceManagerModule: PreferenceManagerModule, @Named("gplayRepository") private val gplayRepository: PlayStoreRepository, @Named("cleanApkAppsRepository") private val cleanApkAppsRepository: CleanApkRepository, @Named("cleanApkPWARepository") private val cleanApkPWARepository: CleanApkRepository, @ApplicationContext private val context: Context )
LongParameterList:ApplicationDialogFragment.kt$ApplicationDialogFragment$( drawable: Int = -1, title: String, message: String, positiveButtonText: String = "", positiveButtonAction: (() -> Unit)? = null, cancelButtonText: String = "", cancelButtonAction: (() -> Unit)? = null, cancellable: Boolean = true, onDismissListener: (() -> Unit)? = null, )
LongParameterList:ApplicationListRVAdapter.kt$ApplicationListRVAdapter$( private val applicationInstaller: ApplicationInstaller, private val privacyInfoViewModel: PrivacyInfoViewModel, private val appInfoFetchViewModel: AppInfoFetchViewModel, private val mainActivityViewModel: MainActivityViewModel, private val currentDestinationId: Int, private var lifecycleOwner: LifecycleOwner?, private var paidAppHandler: ((Application) -> Unit)? = null )
LongParameterList:ApplicationViewModel.kt$ApplicationViewModel$( id: String, packageName: String, origin: Origin, isFdroidLink: Boolean, authObjectList: List<AuthObject>, retryBlock: (failedObjects: List<AuthObject>) -> Boolean, )
@@ -71,8 +69,6 @@
MaxLineLength:AppInstallProcessor.kt$AppInstallProcessor$"Enqueuing App install work is failed for ${fusedDownload.packageName} exception: ${e.localizedMessage}"
MaxLineLength:AppInstallProcessor.kt$AppInstallProcessor$fusedDownload.areFilesDownloaded() && (!fusedManagerRepository.isFusedDownloadInstalled(fusedDownload) || fusedDownload.status == Status.INSTALLING)
MaxLineLength:AppPrivacyInfo.kt$AppPrivacyInfo
- MaxLineLength:ApplicationApi.kt$ApplicationApi$suspend fun getGplayAppsByCategory(authData: AuthData, category: String, pageUrl: String?): ResultSupreme<Pair<List<Application>, String>>
- MaxLineLength:ApplicationApiImpl.kt$ApplicationApiImpl$(cleanApkAppsRepository.getAppDetails(result.apps[0]._id) as Response<CleanApkApplication>).body()?.app
MaxLineLength:ApplicationFragment.kt$ApplicationFragment.Companion$"https://gitlab.e.foundation/e/os/apps/-/blob/main/app/src/main/java/foundation/e/apps/data/exodus/repositories/PrivacyScoreRepositoryImpl.kt"
MaxLineLength:CommonUtilsModule.kt$CommonUtilsModule$*
MaxLineLength:DownloadManager.kt$DownloadManager$Timber.e("Download Issue: $downloadId : DownloadManager returns status: $status but the failed because: reason: $reason")
@@ -113,7 +109,6 @@
ReturnCount:AppInstallProcessor.kt$AppInstallProcessor$suspend fun enqueueFusedDownload( fusedDownload: FusedDownload, isAnUpdate: Boolean = false )
ReturnCount:AppPrivacyInfoRepositoryImpl.kt$AppPrivacyInfoRepositoryImpl$override suspend fun getAppPrivacyInfo( application: Application, appHandle: String ): Result<AppPrivacyInfo>
ReturnCount:AppPrivacyInfoRepositoryImpl.kt$AppPrivacyInfoRepositoryImpl$private fun getAppPrivacyInfo( application: Application, appTrackerData: List<Report>, ): AppPrivacyInfo
- ReturnCount:ApplicationApiImpl.kt$ApplicationApiImpl$override fun isAnyFusedAppUpdated( newApplications: List<Application>, oldApplications: List<Application> ): Boolean
ReturnCount:DownloadManager.kt$DownloadManager$fun getSizeRequired(downloadId: Long): Long
ReturnCount:DownloadManager.kt$DownloadManager$private fun sanitizeStatus(downloadId: Long, status: Int, reason: Int): Int
ReturnCount:Extensions.kt$fun Context.isNetworkAvailable(): Boolean
@@ -141,7 +136,6 @@
TooGenericExceptionCaught:ApkSignatureManager.kt$ApkSignatureManager$e: Exception
TooGenericExceptionCaught:AppInfoFetchViewModel.kt$AppInfoFetchViewModel$e: Exception
TooGenericExceptionCaught:AppInstallProcessor.kt$AppInstallProcessor$e: Exception
- TooGenericExceptionCaught:ApplicationApiImpl.kt$ApplicationApiImpl$e: Exception
TooGenericExceptionCaught:ApplicationViewModel.kt$ApplicationViewModel$e: Exception
TooGenericExceptionCaught:BlockedAppRepository.kt$BlockedAppRepository$exception: Exception
TooGenericExceptionCaught:CommonUtilsModule.kt$CommonUtilsModule$e: Exception
@@ -169,15 +163,12 @@
TooGenericExceptionThrown:AnonymousLoginManager.kt$AnonymousLoginManager$throw Exception( "Error fetching Anonymous credentials\n" + "Network code: ${response.code}\n" + "Success: ${response.isSuccessful}" + response.errorString.run { if (isNotBlank()) "\nError message: $this" else "" } )
TooGenericExceptionThrown:PlayStoreLoginWrapper.kt$PlayStoreLoginWrapper$throw Exception("Validation network code: ${response.code}")
TooGenericExceptionThrown:PlayStoreLoginWrapper.kt$PlayStoreLoginWrapper$throw Exception(error)
- TooManyFunctions:ApplicationApi.kt$ApplicationApi
- TooManyFunctions:ApplicationApiImpl.kt$ApplicationApiImpl : ApplicationApi
TooManyFunctions:ApplicationListFragment.kt$ApplicationListFragment : TimeoutFragmentApplicationInstaller
TooManyFunctions:ApplicationRepository.kt$ApplicationRepository
TooManyFunctions:FusedManagerImpl.kt$FusedManagerImpl : IFusedManager
TooManyFunctions:FusedManagerRepository.kt$FusedManagerRepository
TooManyFunctions:HomeFragment.kt$HomeFragment : TimeoutFragmentApplicationInstaller
TooManyFunctions:IFusedManager.kt$IFusedManager
- TooManyFunctions:LoginData.kt$LoginData
TooManyFunctions:MainActivityViewModel.kt$MainActivityViewModel : ViewModel
TooManyFunctions:PkgManagerModule.kt$PkgManagerModule
TooManyFunctions:SearchFragment.kt$SearchFragment : TimeoutFragmentOnQueryTextListenerOnSuggestionListenerApplicationInstaller
diff --git a/app/src/main/java/foundation/e/apps/data/application/ApplicationRepository.kt b/app/src/main/java/foundation/e/apps/data/application/ApplicationRepository.kt
index 24f2ac55a78b9ecda5b147263b3faf209922f531..5808dda5929e96a236d8ef98de230ec8bc596e3c 100644
--- a/app/src/main/java/foundation/e/apps/data/application/ApplicationRepository.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/ApplicationRepository.kt
@@ -23,6 +23,8 @@ import com.aurora.gplayapi.SearchSuggestEntry
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.SearchBundle
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
@@ -31,6 +33,10 @@ import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.application.data.Category
import foundation.e.apps.data.application.data.Home
+import foundation.e.apps.data.application.downloadInfo.DownloadInfoApi
+import foundation.e.apps.data.application.home.HomeApi
+import foundation.e.apps.data.application.search.GplaySearchResult
+import foundation.e.apps.data.application.search.SearchApi
import foundation.e.apps.data.application.utils.CategoryType
import foundation.e.apps.data.fusedDownload.models.FusedDownload
import javax.inject.Inject
@@ -38,18 +44,19 @@ import javax.inject.Singleton
@Singleton
class ApplicationRepository @Inject constructor(
- private val applicationAPIImpl: ApplicationApi,
+ private val searchAPIImpl: SearchApi,
private val homeApi: HomeApi,
private val categoryApi: CategoryApi,
private val appsApi: AppsApi,
+ private val downloadInfoApi: DownloadInfoApi
) {
suspend fun getHomeScreenData(authData: AuthData): LiveData>> {
return homeApi.fetchHomeScreenData(authData)
}
- fun getApplicationCategoryPreference(): List {
- return applicationAPIImpl.getApplicationCategoryPreference()
+ fun getSelectedAppTypes(): List {
+ return searchAPIImpl.getSelectedAppTypes()
}
suspend fun getApplicationDetails(
@@ -81,14 +88,14 @@ class ApplicationRepository @Inject constructor(
origin: Origin,
fusedDownload: FusedDownload
) {
- applicationAPIImpl.updateFusedDownloadWithDownloadingInfo(
+ downloadInfoApi.updateFusedDownloadWithDownloadingInfo(
origin,
fusedDownload
)
}
suspend fun getOSSDownloadInfo(id: String, version: String? = null) =
- applicationAPIImpl.getOSSDownloadInfo(id, version)
+ downloadInfoApi.getOSSDownloadInfo(id, version)
suspend fun getOnDemandModule(
packageName: String,
@@ -96,7 +103,7 @@ class ApplicationRepository @Inject constructor(
versionCode: Int,
offerType: Int
): String? {
- return applicationAPIImpl.getOnDemandModule(packageName, moduleName, versionCode, offerType)
+ return downloadInfoApi.getOnDemandModule(packageName, moduleName, versionCode, offerType)
}
suspend fun getCategoriesList(
@@ -106,21 +113,21 @@ class ApplicationRepository @Inject constructor(
}
suspend fun getSearchSuggestions(query: String): List {
- return applicationAPIImpl.getSearchSuggestions(query)
+ return searchAPIImpl.getSearchSuggestions(query)
}
suspend fun getCleanApkSearchResults(
query: String,
authData: AuthData
): ResultSupreme, Boolean>> {
- return applicationAPIImpl.getCleanApkSearchResults(query, authData)
+ return searchAPIImpl.getCleanApkSearchResults(query, authData)
}
suspend fun getGplaySearchResults(
query: String,
nextPageSubBundle: Set?
): GplaySearchResult {
- return applicationAPIImpl.getGplaySearchResult(query, nextPageSubBundle)
+ return searchAPIImpl.getGplaySearchResult(query, nextPageSubBundle)
}
suspend fun getAppsListBasedOnCategory(
diff --git a/app/src/main/java/foundation/e/apps/data/application/AppsApi.kt b/app/src/main/java/foundation/e/apps/data/application/apps/AppsApi.kt
similarity index 97%
rename from app/src/main/java/foundation/e/apps/data/application/AppsApi.kt
rename to app/src/main/java/foundation/e/apps/data/application/apps/AppsApi.kt
index 8e3f0491dc30ef4fba674ef84a12d5d411a659d5..1a5ebfa3675379bf67592d751151238581a56db5 100644
--- a/app/src/main/java/foundation/e/apps/data/application/AppsApi.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/apps/AppsApi.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.data.application
+package foundation.e.apps.data.application.apps
import com.aurora.gplayapi.data.models.AuthData
import foundation.e.apps.data.application.data.Application
diff --git a/app/src/main/java/foundation/e/apps/data/application/AppsApiImpl.kt b/app/src/main/java/foundation/e/apps/data/application/apps/AppsApiImpl.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/data/application/AppsApiImpl.kt
rename to app/src/main/java/foundation/e/apps/data/application/apps/AppsApiImpl.kt
index ea2b781ef88a01d4810a1e0092101e8468ef16b6..e1f00df2f791402b1e88e0f9ce0f2d269929b0fb 100644
--- a/app/src/main/java/foundation/e/apps/data/application/AppsApiImpl.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/apps/AppsApiImpl.kt
@@ -16,12 +16,13 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.data.application
+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 dagger.hilt.android.qualifiers.ApplicationContext
+import foundation.e.apps.data.application.ApplicationDataManager
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.cleanapk.data.app.Application as CleanApkApplication
import foundation.e.apps.data.application.utils.toApplication
diff --git a/app/src/main/java/foundation/e/apps/data/application/CategoryApi.kt b/app/src/main/java/foundation/e/apps/data/application/category/CategoryApi.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/data/application/CategoryApi.kt
rename to app/src/main/java/foundation/e/apps/data/application/category/CategoryApi.kt
index f6afb796ced8c4a0698a7e5de84b1a5c41d32532..3349428eb2787ce28cfea61248b3949238bbc265 100644
--- a/app/src/main/java/foundation/e/apps/data/application/CategoryApi.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/category/CategoryApi.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.data.application
+package foundation.e.apps.data.application.category
import com.aurora.gplayapi.data.models.AuthData
import foundation.e.apps.data.ResultSupreme
diff --git a/app/src/main/java/foundation/e/apps/data/application/CategoryApiImpl.kt b/app/src/main/java/foundation/e/apps/data/application/category/CategoryApiImpl.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/data/application/CategoryApiImpl.kt
rename to app/src/main/java/foundation/e/apps/data/application/category/CategoryApiImpl.kt
index e222d724208b86548498a3374c3809bca461690b..b705204954621d705022e73104b99c16ce6632a2 100644
--- a/app/src/main/java/foundation/e/apps/data/application/CategoryApiImpl.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/category/CategoryApiImpl.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.data.application
+package foundation.e.apps.data.application.category
import android.content.Context
import com.aurora.gplayapi.data.models.App
@@ -25,6 +25,7 @@ import com.aurora.gplayapi.data.models.StreamCluster
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.R
import foundation.e.apps.data.ResultSupreme
+import foundation.e.apps.data.application.ApplicationDataManager
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.application.data.Category
import foundation.e.apps.data.application.utils.CategoryType
diff --git a/app/src/main/java/foundation/e/apps/data/application/downloadInfo/DownloadInfoApi.kt b/app/src/main/java/foundation/e/apps/data/application/downloadInfo/DownloadInfoApi.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3384ea816c5dfc9dbb44326a31e2b2e2b762190a
--- /dev/null
+++ b/app/src/main/java/foundation/e/apps/data/application/downloadInfo/DownloadInfoApi.kt
@@ -0,0 +1,41 @@
+/*
+ * Copyright MURENA SAS 2023
+ * Apps Quickly and easily install Android apps onto your device!
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package foundation.e.apps.data.application.downloadInfo
+
+import foundation.e.apps.data.cleanapk.data.download.Download
+import foundation.e.apps.data.enums.Origin
+import foundation.e.apps.data.fusedDownload.models.FusedDownload
+import retrofit2.Response
+
+interface DownloadInfoApi {
+
+ suspend fun getOnDemandModule(
+ packageName: String,
+ moduleName: String,
+ versionCode: Int,
+ offerType: Int
+ ): String?
+
+ suspend fun updateFusedDownloadWithDownloadingInfo(
+ origin: Origin,
+ fusedDownload: FusedDownload
+ )
+
+ suspend fun getOSSDownloadInfo(id: String, version: String?): Response
+}
diff --git a/app/src/main/java/foundation/e/apps/data/application/downloadInfo/DownloadInfoApiImpl.kt b/app/src/main/java/foundation/e/apps/data/application/downloadInfo/DownloadInfoApiImpl.kt
new file mode 100644
index 0000000000000000000000000000000000000000..06126cc3007ff9b932768b36508b722738c29ae2
--- /dev/null
+++ b/app/src/main/java/foundation/e/apps/data/application/downloadInfo/DownloadInfoApiImpl.kt
@@ -0,0 +1,102 @@
+/*
+ * Copyright MURENA SAS 2023
+ * Apps Quickly and easily install Android apps onto your device!
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package foundation.e.apps.data.application.downloadInfo
+
+import foundation.e.apps.data.cleanapk.CleanApkDownloadInfoFetcher
+import foundation.e.apps.data.cleanapk.repositories.CleanApkRepository
+import foundation.e.apps.data.enums.Origin
+import foundation.e.apps.data.fusedDownload.models.FusedDownload
+import foundation.e.apps.data.playstore.PlayStoreRepository
+import javax.inject.Inject
+import javax.inject.Named
+
+class DownloadInfoApiImpl @Inject constructor(
+ @Named("gplayRepository") private val gplayRepository: PlayStoreRepository,
+ @Named("cleanApkAppsRepository") private val cleanApkAppsRepository: CleanApkRepository
+) : DownloadInfoApi {
+
+ override suspend fun getOnDemandModule(
+ packageName: String,
+ moduleName: String,
+ versionCode: Int,
+ offerType: Int
+ ): String? {
+ val list = gplayRepository.getOnDemandModule(
+ packageName,
+ moduleName,
+ versionCode,
+ offerType,
+ )
+
+ for (element in list) {
+ if (element.name == "$moduleName.apk") {
+ return element.url
+ }
+ }
+
+ return null
+ }
+
+ override suspend fun updateFusedDownloadWithDownloadingInfo(
+ origin: Origin,
+ fusedDownload: FusedDownload
+ ) {
+ val list = mutableListOf()
+ when (origin) {
+ Origin.CLEANAPK -> {
+ updateDownloadInfoFromCleanApk(fusedDownload, list)
+ }
+
+ Origin.GPLAY -> {
+ updateDownloadInfoFromGplay(fusedDownload, list)
+ }
+ }
+
+ fusedDownload.downloadURLList = list
+ }
+
+ private suspend fun updateDownloadInfoFromGplay(
+ fusedDownload: FusedDownload,
+ list: MutableList
+ ) {
+ val downloadList =
+ gplayRepository.getDownloadInfo(
+ fusedDownload.packageName,
+ fusedDownload.versionCode,
+ fusedDownload.offerType
+ )
+ fusedDownload.files = downloadList
+ list.addAll(downloadList.map { it.url })
+ }
+
+ private suspend fun updateDownloadInfoFromCleanApk(
+ fusedDownload: FusedDownload,
+ list: MutableList
+ ) {
+ val downloadInfo =
+ (cleanApkAppsRepository as CleanApkDownloadInfoFetcher).getDownloadInfo(
+ fusedDownload.id
+ ).body()
+ downloadInfo?.download_data?.download_link?.let { list.add(it) }
+ fusedDownload.signature = downloadInfo?.download_data?.signature ?: ""
+ }
+
+ override suspend fun getOSSDownloadInfo(id: String, version: String?) =
+ (cleanApkAppsRepository as CleanApkDownloadInfoFetcher).getDownloadInfo(id, version)
+}
diff --git a/app/src/main/java/foundation/e/apps/data/application/HomeApi.kt b/app/src/main/java/foundation/e/apps/data/application/home/HomeApi.kt
similarity index 95%
rename from app/src/main/java/foundation/e/apps/data/application/HomeApi.kt
rename to app/src/main/java/foundation/e/apps/data/application/home/HomeApi.kt
index 7e677be457146de4c67dafb31cf277a797433a8e..27508ed84bdb576a423947cc0fad8a489dad7b33 100644
--- a/app/src/main/java/foundation/e/apps/data/application/HomeApi.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/home/HomeApi.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.data.application
+package foundation.e.apps.data.application.home
import androidx.lifecycle.LiveData
import com.aurora.gplayapi.data.models.AuthData
diff --git a/app/src/main/java/foundation/e/apps/data/application/HomeApiImpl.kt b/app/src/main/java/foundation/e/apps/data/application/home/HomeApiImpl.kt
similarity index 93%
rename from app/src/main/java/foundation/e/apps/data/application/HomeApiImpl.kt
rename to app/src/main/java/foundation/e/apps/data/application/home/HomeApiImpl.kt
index 9bc92f99da8e3a404fe2cf002736c2d0e286166c..946ac4dfc577e70aec4bd1ea194cda20dd08720d 100644
--- a/app/src/main/java/foundation/e/apps/data/application/HomeApiImpl.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/home/HomeApiImpl.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.data.application
+package foundation.e.apps.data.application.home
import android.content.Context
import androidx.lifecycle.LiveData
@@ -26,7 +26,10 @@ import com.aurora.gplayapi.data.models.AuthData
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.R
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.cleanapk.repositories.CleanApkRepository
@@ -115,19 +118,19 @@ class HomeApiImpl @Inject constructor(
}
Source.OPEN -> handleNetworkResult {
- handleCleanApkHomes(priorList, ApplicationApi.APP_TYPE_OPEN)
+ handleCleanApkHomes(priorList, SearchApi.APP_TYPE_OPEN)
}
Source.PWA -> handleNetworkResult {
- handleCleanApkHomes(priorList, ApplicationApi.APP_TYPE_PWA)
+ handleCleanApkHomes(priorList, SearchApi.APP_TYPE_PWA)
}
}
setHomeErrorMessage(result.getResultStatus(), source)
priorList.sortBy {
when (it.source) {
- ApplicationApi.APP_TYPE_OPEN -> AppSourceWeight.OPEN_SOURCE.ordinal
- ApplicationApi.APP_TYPE_PWA -> AppSourceWeight.PWA.ordinal
+ SearchApi.APP_TYPE_OPEN -> AppSourceWeight.OPEN_SOURCE.ordinal
+ SearchApi.APP_TYPE_PWA -> AppSourceWeight.PWA.ordinal
else -> AppSourceWeight.GPLAY.ordinal
}
}
@@ -139,7 +142,7 @@ class HomeApiImpl @Inject constructor(
priorList: MutableList,
appType: String
): MutableList {
- val response = if (appType == ApplicationApi.APP_TYPE_OPEN) {
+ val response = if (appType == SearchApi.APP_TYPE_OPEN) {
(cleanApkAppsRepository.getHomeScreenData() as Response).body()
} else {
(cleanApkPWARepository.getHomeScreenData() as Response).body()
@@ -154,7 +157,7 @@ class HomeApiImpl @Inject constructor(
private suspend fun generateCleanAPKHome(home: CleanApkHome, appType: String): List {
val list = mutableListOf()
- val headings = if (appType == ApplicationApi.APP_TYPE_OPEN) {
+ val headings = if (appType == SearchApi.APP_TYPE_OPEN) {
getOpenSourceHomeCategories()
} else {
getPWAHomeCategories()
diff --git a/app/src/main/java/foundation/e/apps/data/application/ApplicationApi.kt b/app/src/main/java/foundation/e/apps/data/application/search/SearchApi.kt
similarity index 52%
rename from app/src/main/java/foundation/e/apps/data/application/ApplicationApi.kt
rename to app/src/main/java/foundation/e/apps/data/application/search/SearchApi.kt
index e6434f15782ccbff117210a2bb341ffece272e18..f539f613cb34cd46bee944f2b8212409d4c4538a 100644
--- a/app/src/main/java/foundation/e/apps/data/application/ApplicationApi.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/search/SearchApi.kt
@@ -1,33 +1,39 @@
-package foundation.e.apps.data.application
+/*
+ * Copyright MURENA SAS 2023
+ * Apps Quickly and easily install Android apps onto your device!
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package foundation.e.apps.data.application.search
-import androidx.lifecycle.LiveData
import com.aurora.gplayapi.SearchSuggestEntry
-import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.SearchBundle
import foundation.e.apps.data.ResultSupreme
-import foundation.e.apps.data.cleanapk.data.download.Download
-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.Status
import foundation.e.apps.data.application.data.Application
-import foundation.e.apps.data.application.data.Category
-import foundation.e.apps.data.application.data.Home
-import foundation.e.apps.data.application.utils.CategoryType
-import foundation.e.apps.data.fusedDownload.models.FusedDownload
-import retrofit2.Response
typealias GplaySearchResult = ResultSupreme, Set>>
-interface ApplicationApi {
+interface SearchApi {
companion object {
const val APP_TYPE_ANY = "any"
const val APP_TYPE_OPEN = "open"
const val APP_TYPE_PWA = "pwa"
}
- fun getApplicationCategoryPreference(): List
+ fun getSelectedAppTypes(): List
/**
* Fetches search results from cleanAPK and GPlay servers and returns them
@@ -47,19 +53,4 @@ interface ApplicationApi {
): GplaySearchResult
suspend fun getSearchSuggestions(query: String): List
-
- suspend fun getOnDemandModule(
- packageName: String,
- moduleName: String,
- versionCode: Int,
- offerType: Int
- ): String?
-
- suspend fun updateFusedDownloadWithDownloadingInfo(
- origin: Origin,
- fusedDownload: FusedDownload
- )
-
- suspend fun getOSSDownloadInfo(id: String, version: String?): Response
-
}
diff --git a/app/src/main/java/foundation/e/apps/data/application/ApplicationApiImpl.kt b/app/src/main/java/foundation/e/apps/data/application/search/SearchApiImpl.kt
similarity index 68%
rename from app/src/main/java/foundation/e/apps/data/application/ApplicationApiImpl.kt
rename to app/src/main/java/foundation/e/apps/data/application/search/SearchApiImpl.kt
index fdd6ab9284d1e45748013aa550bdbe70d5c4c6db..a012c82ce6a38a6c70b29bfa71dcf18bd3ffc08e 100644
--- a/app/src/main/java/foundation/e/apps/data/application/ApplicationApiImpl.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/search/SearchApiImpl.kt
@@ -1,6 +1,6 @@
/*
+ * Copyright MURENA SAS 2023
* Apps Quickly and easily install Android apps onto your device!
- * Copyright (C) 2021 E FOUNDATION
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.data.application
+package foundation.e.apps.data.application.search
import android.content.Context
import com.aurora.gplayapi.SearchSuggestEntry
@@ -25,17 +25,17 @@ import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.SearchBundle
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.data.ResultSupreme
-import foundation.e.apps.data.application.ApplicationApi.Companion.APP_TYPE_ANY
-import foundation.e.apps.data.application.ApplicationApi.Companion.APP_TYPE_OPEN
-import foundation.e.apps.data.application.ApplicationApi.Companion.APP_TYPE_PWA
+import foundation.e.apps.data.application.ApplicationDataManager
+import foundation.e.apps.data.application.apps.AppsApi
+import foundation.e.apps.data.application.search.SearchApi.Companion.APP_TYPE_ANY
+import foundation.e.apps.data.application.search.SearchApi.Companion.APP_TYPE_OPEN
+import foundation.e.apps.data.application.search.SearchApi.Companion.APP_TYPE_PWA
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.application.data.Home
import foundation.e.apps.data.application.utils.toApplication
-import foundation.e.apps.data.cleanapk.CleanApkDownloadInfoFetcher
import foundation.e.apps.data.cleanapk.repositories.CleanApkRepository
import foundation.e.apps.data.enums.Origin
import foundation.e.apps.data.enums.ResultStatus
-import foundation.e.apps.data.fusedDownload.models.FusedDownload
import foundation.e.apps.data.handleNetworkResult
import foundation.e.apps.data.login.AuthObject
import foundation.e.apps.data.playstore.PlayStoreRepository
@@ -53,53 +53,52 @@ import javax.inject.Singleton
typealias FusedHomeDeferred = Deferred>>
@Singleton
-class ApplicationApiImpl @Inject constructor(
+class SearchApiImpl @Inject constructor(
private val appsApi: AppsApi,
private val preferenceManagerModule: PreferenceManagerModule,
@Named("gplayRepository") private val gplayRepository: PlayStoreRepository,
@Named("cleanApkAppsRepository") private val cleanApkAppsRepository: CleanApkRepository,
@Named("cleanApkPWARepository") private val cleanApkPWARepository: CleanApkRepository,
private val applicationDataManager: ApplicationDataManager
-) : ApplicationApi {
+) : SearchApi {
@Inject
- @ApplicationContext lateinit var context: Context
+ @ApplicationContext
+ lateinit var context: Context
companion object {
private const val KEYWORD_TEST_SEARCH = "facebook"
}
- override fun getApplicationCategoryPreference(): List {
- val prefs = mutableListOf()
- if (preferenceManagerModule.isGplaySelected()) prefs.add(APP_TYPE_ANY)
- if (preferenceManagerModule.isOpenSourceSelected()) prefs.add(APP_TYPE_OPEN)
- if (preferenceManagerModule.isPWASelected()) prefs.add(APP_TYPE_PWA)
- return prefs
+ override fun getSelectedAppTypes(): List {
+ val selectedAppTypes = mutableListOf()
+ if (preferenceManagerModule.isGplaySelected()) selectedAppTypes.add(APP_TYPE_ANY)
+ if (preferenceManagerModule.isOpenSourceSelected()) selectedAppTypes.add(APP_TYPE_OPEN)
+ if (preferenceManagerModule.isPWASelected()) selectedAppTypes.add(APP_TYPE_PWA)
+
+ return selectedAppTypes
}
/**
- * Fetches search results from cleanAPK and GPlay servers and returns them
+ * Fetches search results from cleanAPK and returns them
* @param query Query
* @param authData [AuthData]
- * @return A livedata Pair of list of non-nullable [Application] and
+ * @return A ResultSupreme with Pair of list of non-nullable [Application] and
* a Boolean signifying if more search results are being loaded.
- * Observe this livedata to display new apps as they are fetched from the network.
*/
override suspend fun getCleanApkSearchResults(
query: String,
authData: AuthData
): ResultSupreme, Boolean>> {
- val packageSpecificResults = ArrayList()
- var finalSearchResult: ResultSupreme, Boolean>> = ResultSupreme.Error()
+ var finalSearchResult: ResultSupreme, Boolean>> =
+ ResultSupreme.Error()
- fetchPackageSpecificResult(authData, query, packageSpecificResults)
+ val packageSpecificResults =
+ fetchPackageSpecificResult(authData, query).data?.first ?: emptyList()
val searchResult = mutableListOf()
- val cleanApkResults = mutableListOf()
-
if (preferenceManagerModule.isOpenSourceSelected()) {
finalSearchResult = fetchOpenSourceSearchResult(
- cleanApkResults,
query,
searchResult,
packageSpecificResults
@@ -113,13 +112,14 @@ class ApplicationApiImpl @Inject constructor(
packageSpecificResults
)
}
+
return finalSearchResult
}
private suspend fun fetchPWASearchResult(
query: String,
searchResult: MutableList,
- packageSpecificResults: ArrayList
+ packageSpecificResults: List
): ResultSupreme, Boolean>> {
val pwaApps: MutableList = mutableListOf()
val result = handleNetworkResult {
@@ -151,11 +151,12 @@ class ApplicationApiImpl @Inject constructor(
}
private suspend fun fetchOpenSourceSearchResult(
- cleanApkResults: MutableList,
query: String,
searchResult: MutableList,
- packageSpecificResults: ArrayList
+ packageSpecificResults: List
): ResultSupreme, Boolean>> {
+ val cleanApkResults = mutableListOf()
+
val result = handleNetworkResult {
cleanApkResults.addAll(getCleanAPKSearchResults(query))
cleanApkResults
@@ -181,8 +182,8 @@ class ApplicationApiImpl @Inject constructor(
private suspend fun fetchPackageSpecificResult(
authData: AuthData,
query: String,
- packageSpecificResults: MutableList
): ResultSupreme, Boolean>> {
+ val packageSpecificResults: MutableList = mutableListOf()
var gplayPackageResult: Application? = null
var cleanapkPackageResult: Application? = null
@@ -198,8 +199,6 @@ class ApplicationApiImpl @Inject constructor(
/*
* Currently only show open source package result if exists in both fdroid and gplay.
- * This is temporary.
- * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5783
*/
cleanapkPackageResult?.let { packageSpecificResults.add(it) } ?: run {
gplayPackageResult?.let { packageSpecificResults.add(it) }
@@ -209,27 +208,24 @@ class ApplicationApiImpl @Inject constructor(
packageSpecificResults.add(Application(isPlaceHolder = true))
}
- /*
- * If there was a timeout, return it and don't try to fetch anything else.
- * Also send true in the pair to signal more results being loaded.
- */
if (result.getResultStatus() != ResultStatus.OK) {
return ResultSupreme.create(
result.getResultStatus(),
Pair(packageSpecificResults, false)
)
}
+
return ResultSupreme.create(result.getResultStatus(), Pair(packageSpecificResults, true))
}
/*
- * The list packageSpecificResults may contain apps with duplicate package names.
- * Example, "org.telegram.messenger" will result in "Telegram" app from Play Store
- * and "Telegram FOSS" from F-droid. We show both of them at the top.
- *
- * But for the other keyword related search results, we do not allow duplicate package names.
- * We also filter out apps which are already present in packageSpecificResults list.
- */
+ * The list packageSpecificResults may contain apps with duplicate package names.
+ * Example, "org.telegram.messenger" will result in "Telegram" app from Play Store
+ * and "Telegram FOSS" from F-droid. We show both of them at the top.
+ *
+ * But for the other keyword related search results, we do not allow duplicate package names.
+ * We also filter out apps which are already present in packageSpecificResults list.
+ */
private fun filterWithKeywordSearch(
list: List,
packageSpecificResults: List,
@@ -250,11 +246,12 @@ class ApplicationApiImpl @Inject constructor(
private suspend fun getCleanApkPackageResult(
query: String,
): Application? {
- getCleanapkSearchResult(query).let {
+ getCleanApkSearchResult(query).let {
if (it.isSuccess() && it.data!!.package_name.isNotBlank()) {
return it.data!!
}
}
+
return null
}
@@ -262,15 +259,12 @@ class ApplicationApiImpl @Inject constructor(
query: String,
authData: AuthData,
): Application? {
- try {
- appsApi.getApplicationDetails(query, query, authData, Origin.GPLAY).let {
- if (it.second == ResultStatus.OK && it.first.package_name.isNotEmpty()) {
- return it.first
- }
+ appsApi.getApplicationDetails(query, query, authData, Origin.GPLAY).let {
+ if (it.second == ResultStatus.OK && it.first.package_name.isNotEmpty()) {
+ return it.first
}
- } catch (e: Exception) {
- Timber.e(e)
}
+
return null
}
@@ -280,9 +274,8 @@ class ApplicationApiImpl @Inject constructor(
* DO NOT use this to show info on ApplicationFragment as it will not have all the required
* information to show for an app.
*
- * Issue: https://gitlab.e.foundation/e/backlog/-/issues/2629
*/
- private suspend fun getCleanapkSearchResult(packageName: String): ResultSupreme {
+ private suspend fun getCleanApkSearchResult(packageName: String): ResultSupreme {
var application = Application()
val result = handleNetworkResult {
val result = cleanApkAppsRepository.getSearchResult(
@@ -294,6 +287,7 @@ class ApplicationApiImpl @Inject constructor(
application = result.apps[0]
}
}
+
return ResultSupreme.create(result.getResultStatus(), application)
}
@@ -306,63 +300,6 @@ class ApplicationApiImpl @Inject constructor(
return searchSuggesions
}
- override suspend fun getOnDemandModule(
- packageName: String,
- moduleName: String,
- versionCode: Int,
- offerType: Int
- ): String? {
- val list = gplayRepository.getOnDemandModule(
- packageName,
- moduleName,
- versionCode,
- offerType,
- )
- for (element in list) {
- if (element.name == "$moduleName.apk") {
- return element.url
- }
- }
- return null
- }
-
- override suspend fun updateFusedDownloadWithDownloadingInfo(
- origin: Origin,
- fusedDownload: FusedDownload
- ) {
- val list = mutableListOf()
- when (origin) {
- Origin.CLEANAPK -> {
- val downloadInfo =
- (cleanApkAppsRepository as CleanApkDownloadInfoFetcher).getDownloadInfo(
- fusedDownload.id
- )
- .body()
- downloadInfo?.download_data?.download_link?.let { list.add(it) }
- fusedDownload.signature = downloadInfo?.download_data?.signature ?: ""
- }
-
- Origin.GPLAY -> {
- val downloadList =
- gplayRepository.getDownloadInfo(
- fusedDownload.packageName,
- fusedDownload.versionCode,
- fusedDownload.offerType
- )
- fusedDownload.files = downloadList
- list.addAll(downloadList.map { it.url })
- }
- }
- fusedDownload.downloadURLList = list
- }
-
- override suspend fun getOSSDownloadInfo(id: String, version: String?) =
- (cleanApkAppsRepository as CleanApkDownloadInfoFetcher).getDownloadInfo(id, version)
-
- /*
- * Search-related internal functions
- */
-
private suspend fun getCleanAPKSearchResults(
keyword: String
): List {
@@ -376,6 +313,7 @@ class ApplicationApiImpl @Inject constructor(
it.updateSource(context)
list.add(it)
}
+
return list
}
@@ -388,7 +326,10 @@ class ApplicationApiImpl @Inject constructor(
gplayRepository.getSearchResult(query, nextPageSubBundle?.toMutableSet())
if (!preferenceManagerModule.isGplaySelected()) {
- return@handleNetworkResult Pair(listOf(), setOf())
+ return@handleNetworkResult Pair(
+ listOf(),
+ setOf()
+ )
}
val fusedAppList =
@@ -417,9 +358,9 @@ class ApplicationApiImpl @Inject constructor(
}
/*
- * This function will replace a GPlay app with F-Droid app if exists,
- * else will show the GPlay app itself.
- */
+ * This function will replace a GPlay app with F-Droid app if exists,
+ * else will show the GPlay app itself.
+ */
private suspend fun replaceWithFDroid(gPlayApp: App): Application {
val gPlayFusedApp = gPlayApp.toApplication(context)
val response = cleanApkAppsRepository.getAppDetails(gPlayApp.packageName)
@@ -428,6 +369,7 @@ class ApplicationApiImpl @Inject constructor(
this.updateSource(context)
isGplayReplaced = true
}
+
return fdroidApp ?: gPlayFusedApp
}
diff --git a/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt b/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt
index 5367ffe3d7b7e7c9fc0fea9f16c36f01a891b8b7..5b0b9df12a53d56c924a3abb786d21dda350ff21 100644
--- a/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt
+++ b/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt
@@ -31,7 +31,7 @@ import foundation.e.apps.data.enums.isUnFiltered
import foundation.e.apps.data.faultyApps.FaultyAppRepository
import foundation.e.apps.data.fdroid.FdroidRepository
import foundation.e.apps.data.application.ApplicationRepository
-import foundation.e.apps.data.application.ApplicationApi.Companion.APP_TYPE_ANY
+import foundation.e.apps.data.application.search.SearchApi.Companion.APP_TYPE_ANY
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.preference.PreferenceManagerModule
import foundation.e.apps.install.pkg.PkgManagerModule
@@ -377,6 +377,6 @@ class UpdatesManagerImpl @Inject constructor(
}
fun getApplicationCategoryPreference(): List {
- return applicationRepository.getApplicationCategoryPreference()
+ return applicationRepository.getSelectedAppTypes()
}
}
diff --git a/app/src/main/java/foundation/e/apps/di/DataModule.kt b/app/src/main/java/foundation/e/apps/di/DataModule.kt
index 0d51d6e5796e898ff418234d026a0cdfe38558cf..1863fcadc850d3f1b344f1deced8cc593e5a6692 100644
--- a/app/src/main/java/foundation/e/apps/di/DataModule.kt
+++ b/app/src/main/java/foundation/e/apps/di/DataModule.kt
@@ -22,12 +22,16 @@ import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
-import foundation.e.apps.data.application.AppsApi
-import foundation.e.apps.data.application.AppsApiImpl
-import foundation.e.apps.data.application.CategoryApi
-import foundation.e.apps.data.application.CategoryApiImpl
-import foundation.e.apps.data.application.HomeApi
-import foundation.e.apps.data.application.HomeApiImpl
+import foundation.e.apps.data.application.apps.AppsApi
+import foundation.e.apps.data.application.apps.AppsApiImpl
+import foundation.e.apps.data.application.category.CategoryApi
+import foundation.e.apps.data.application.category.CategoryApiImpl
+import foundation.e.apps.data.application.downloadInfo.DownloadInfoApi
+import foundation.e.apps.data.application.downloadInfo.DownloadInfoApiImpl
+import foundation.e.apps.data.application.home.HomeApi
+import foundation.e.apps.data.application.home.HomeApiImpl
+import foundation.e.apps.data.application.search.SearchApi
+import foundation.e.apps.data.application.search.SearchApiImpl
import javax.inject.Singleton
@Module
@@ -45,4 +49,12 @@ interface DataModule {
@Singleton
@Binds
fun getAppsApi(appsApiImpl: AppsApiImpl): AppsApi
+
+ @Singleton
+ @Binds
+ fun getSearchApi(searchApi: SearchApiImpl): SearchApi
+
+ @Singleton
+ @Binds
+ fun getDownloadInfoApi(downloadInfoApi: DownloadInfoApiImpl): DownloadInfoApi
}
diff --git a/app/src/main/java/foundation/e/apps/di/RepositoryModule.kt b/app/src/main/java/foundation/e/apps/di/RepositoryModule.kt
index a09e75eedf0f3450ba33ef97ff552893911bec88..204767a8ffc96b6f0d58ffeec6ad754c6b4b0a99 100644
--- a/app/src/main/java/foundation/e/apps/di/RepositoryModule.kt
+++ b/app/src/main/java/foundation/e/apps/di/RepositoryModule.kt
@@ -10,8 +10,6 @@ import foundation.e.apps.data.exodus.repositories.PrivacyScoreRepository
import foundation.e.apps.data.exodus.repositories.PrivacyScoreRepositoryImpl
import foundation.e.apps.data.fdroid.FdroidRepository
import foundation.e.apps.data.fdroid.IFdroidRepository
-import foundation.e.apps.data.application.ApplicationApi
-import foundation.e.apps.data.application.ApplicationApiImpl
import foundation.e.apps.data.fusedDownload.FusedManagerImpl
import foundation.e.apps.data.fusedDownload.IFusedManager
import javax.inject.Singleton
@@ -31,10 +29,6 @@ interface RepositoryModule {
@Binds
fun getFdroidRepository(fusedManagerImpl: FdroidRepository): IFdroidRepository
- @Singleton
- @Binds
- fun getFusedApi(fusedApiImpl: ApplicationApiImpl): ApplicationApi
-
@Singleton
@Binds
fun getPrivacyScoreRepository(privacyScoreRepositoryImpl: PrivacyScoreRepositoryImpl): PrivacyScoreRepository
diff --git a/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt b/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt
index fd0a3a74973723433389721c2d20aa91fbd264f7..839aa2d9e737bdda2ce22ae207c7b836cd1cb941 100644
--- a/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt
+++ b/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt
@@ -34,7 +34,7 @@ import foundation.e.apps.OpenForTesting
import foundation.e.apps.data.enums.Origin
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.enums.Type
-import foundation.e.apps.data.application.ApplicationApi
+import foundation.e.apps.data.application.search.SearchApi
import foundation.e.apps.data.fusedDownload.models.FusedDownload
import kotlinx.coroutines.DelicateCoroutinesApi
import timber.log.Timber
@@ -92,7 +92,7 @@ class PkgManagerModule @Inject constructor(
* This method should be only used for native apps!
* If you are using for any FusedApp, please consider that it can be a PWA!
*
- * Recommended to use: [ApplicationApi.getFusedAppInstallationStatus].
+ * Recommended to use: [SearchApi.getFusedAppInstallationStatus].
*/
fun getPackageStatus(packageName: String, versionCode: Int): Status {
return if (isInstalled(packageName)) {
diff --git a/app/src/main/java/foundation/e/apps/ui/search/SearchViewModel.kt b/app/src/main/java/foundation/e/apps/ui/search/SearchViewModel.kt
index 23186b5b722d61e1365196c2e525fa00e991e2a9..c46fa48472ac16231d804fa0649d3302982eead5 100644
--- a/app/src/main/java/foundation/e/apps/ui/search/SearchViewModel.kt
+++ b/app/src/main/java/foundation/e/apps/ui/search/SearchViewModel.kt
@@ -27,7 +27,7 @@ import com.aurora.gplayapi.data.models.SearchBundle
import dagger.hilt.android.lifecycle.HiltViewModel
import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.application.ApplicationRepository
-import foundation.e.apps.data.application.GplaySearchResult
+import foundation.e.apps.data.application.search.GplaySearchResult
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.login.AuthObject
import foundation.e.apps.data.login.exceptions.CleanApkException
diff --git a/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt b/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt
index d028feafea5f7838a3e27563cb85b72dacd60b8c..0bf50502f4402c09db7135cfd2d01d706f81db6e 100644
--- a/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt
+++ b/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt
@@ -28,7 +28,7 @@ import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.faultyApps.FaultyAppRepository
import foundation.e.apps.data.fdroid.FdroidRepository
import foundation.e.apps.data.application.ApplicationRepository
-import foundation.e.apps.data.application.ApplicationApi
+import foundation.e.apps.data.application.search.SearchApi
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.updates.UpdatesManagerImpl
import foundation.e.apps.util.MainCoroutineRule
@@ -318,9 +318,9 @@ class UpdateManagerImptTest {
openSourceUpdates: Pair, ResultStatus>,
gplayUpdates: Pair, ResultStatus>,
selectedApplicationSources: List = mutableListOf(
- ApplicationApi.APP_TYPE_ANY,
- ApplicationApi.APP_TYPE_OPEN,
- ApplicationApi.APP_TYPE_PWA
+ SearchApi.APP_TYPE_ANY,
+ SearchApi.APP_TYPE_OPEN,
+ SearchApi.APP_TYPE_PWA
)
) {
Mockito.`when`(
@@ -331,7 +331,7 @@ class UpdateManagerImptTest {
)
).thenReturn(openSourceUpdates)
- Mockito.`when`(applicationRepository.getApplicationCategoryPreference())
+ Mockito.`when`(applicationRepository.getSelectedAppTypes())
.thenReturn(selectedApplicationSources)
if (gplayUpdates.first.isNotEmpty()) {
diff --git a/app/src/test/java/foundation/e/apps/apps/AppsApiTest.kt b/app/src/test/java/foundation/e/apps/apps/AppsApiTest.kt
index ff72d8c191201a194f6d70bb20a2b44875eceea1..533a55a9aeb56cdcf3dc184e733094d32bd3f971 100644
--- a/app/src/test/java/foundation/e/apps/apps/AppsApiTest.kt
+++ b/app/src/test/java/foundation/e/apps/apps/AppsApiTest.kt
@@ -30,8 +30,8 @@ import foundation.e.apps.data.enums.FilterLevel
import foundation.e.apps.data.enums.Origin
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.application.ApplicationDataManager
-import foundation.e.apps.data.application.AppsApi
-import foundation.e.apps.data.application.AppsApiImpl
+import foundation.e.apps.data.application.apps.AppsApi
+import foundation.e.apps.data.application.apps.AppsApiImpl
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.playstore.PlayStoreRepository
import foundation.e.apps.install.pkg.PWAManagerModule
diff --git a/app/src/test/java/foundation/e/apps/category/CategoryApiTest.kt b/app/src/test/java/foundation/e/apps/category/CategoryApiTest.kt
index 179afb6d4adede4a232da2fe71ca497fccf58239..57c9d1428a51dd06e64b1e705f7579820ef35419 100644
--- a/app/src/test/java/foundation/e/apps/category/CategoryApiTest.kt
+++ b/app/src/test/java/foundation/e/apps/category/CategoryApiTest.kt
@@ -24,8 +24,8 @@ import com.aurora.gplayapi.data.models.Category
import foundation.e.apps.FakePreferenceModule
import foundation.e.apps.R
import foundation.e.apps.data.application.ApplicationDataManager
-import foundation.e.apps.data.application.CategoryApi
-import foundation.e.apps.data.application.CategoryApiImpl
+import foundation.e.apps.data.application.category.CategoryApi
+import foundation.e.apps.data.application.category.CategoryApiImpl
import foundation.e.apps.data.application.utils.CategoryType
import foundation.e.apps.data.cleanapk.data.categories.Categories
import foundation.e.apps.data.cleanapk.repositories.CleanApkRepository
diff --git a/app/src/test/java/foundation/e/apps/fused/ApplicationApiImplTest.kt b/app/src/test/java/foundation/e/apps/fused/SearchApiImplTest.kt
similarity index 93%
rename from app/src/test/java/foundation/e/apps/fused/ApplicationApiImplTest.kt
rename to app/src/test/java/foundation/e/apps/fused/SearchApiImplTest.kt
index b29ece50a07ea52340507dbc5c7c1ae11dd0510b..ce265ed98b08f94eabbcc578f4303371fea26e85 100644
--- a/app/src/test/java/foundation/e/apps/fused/ApplicationApiImplTest.kt
+++ b/app/src/test/java/foundation/e/apps/fused/SearchApiImplTest.kt
@@ -20,31 +20,23 @@ package foundation.e.apps.fused
import android.content.Context
import android.text.format.Formatter
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
-import com.aurora.gplayapi.Constants
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData
-import com.aurora.gplayapi.data.models.Category
import com.aurora.gplayapi.data.models.SearchBundle
import foundation.e.apps.FakePreferenceModule
-import foundation.e.apps.R
-import foundation.e.apps.data.cleanapk.data.categories.Categories
import foundation.e.apps.data.cleanapk.data.search.Search
import foundation.e.apps.data.cleanapk.repositories.CleanApkRepository
-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.Status
-import foundation.e.apps.data.application.ApplicationApiImpl
+import foundation.e.apps.data.application.search.SearchApiImpl
import foundation.e.apps.data.application.ApplicationDataManager
-import foundation.e.apps.data.application.AppsApi
-import foundation.e.apps.data.application.AppsApiImpl
+import foundation.e.apps.data.application.apps.AppsApi
+import foundation.e.apps.data.application.apps.AppsApiImpl
import foundation.e.apps.data.application.data.Application
-import foundation.e.apps.data.application.utils.CategoryType
import foundation.e.apps.data.playstore.PlayStoreRepository
import foundation.e.apps.install.pkg.PWAManagerModule
import foundation.e.apps.install.pkg.PkgManagerModule
import foundation.e.apps.util.MainCoroutineRule
-import foundation.e.apps.util.getOrAwaitValue
import foundation.e.apps.utils.eventBus.EventBus
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
@@ -54,8 +46,6 @@ import okhttp3.ResponseBody
import okhttp3.ResponseBody.Companion.toResponseBody
import org.junit.After
import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Ignore
import org.junit.Rule
@@ -70,7 +60,7 @@ import org.mockito.kotlin.eq
import retrofit2.Response
@OptIn(ExperimentalCoroutinesApi::class)
-class ApplicationApiImplTest {
+class SearchApiImplTest {
// Run tasks synchronously
@Rule
@@ -82,7 +72,7 @@ class ApplicationApiImplTest {
@get:Rule
var mainCoroutineRule = MainCoroutineRule()
- private lateinit var fusedAPIImpl: ApplicationApiImpl
+ private lateinit var fusedAPIImpl: SearchApiImpl
@Mock
private lateinit var pwaManagerModule: PWAManagerModule
@@ -130,7 +120,7 @@ class ApplicationApiImplTest {
applicationDataManager,
)
- fusedAPIImpl = ApplicationApiImpl(
+ fusedAPIImpl = SearchApiImpl(
appsApi,
preferenceManagerModule,
gPlayAPIRepository,
diff --git a/app/src/test/java/foundation/e/apps/fused/ApplicationApiRepositoryTest.kt b/app/src/test/java/foundation/e/apps/fused/SearchApiRepositoryTest.kt
similarity index 76%
rename from app/src/test/java/foundation/e/apps/fused/ApplicationApiRepositoryTest.kt
rename to app/src/test/java/foundation/e/apps/fused/SearchApiRepositoryTest.kt
index 3d59ee61d1d5155c81f6e115493a1b23a63af9a8..37cbfbf468afa186b951397bbdebb4226b93206b 100644
--- a/app/src/test/java/foundation/e/apps/fused/ApplicationApiRepositoryTest.kt
+++ b/app/src/test/java/foundation/e/apps/fused/SearchApiRepositoryTest.kt
@@ -18,10 +18,11 @@
package foundation.e.apps.fused
import foundation.e.apps.data.application.ApplicationRepository
-import foundation.e.apps.data.application.ApplicationApiImpl
-import foundation.e.apps.data.application.AppsApi
-import foundation.e.apps.data.application.CategoryApi
-import foundation.e.apps.data.application.HomeApi
+import foundation.e.apps.data.application.apps.AppsApi
+import foundation.e.apps.data.application.category.CategoryApi
+import foundation.e.apps.data.application.downloadInfo.DownloadInfoApi
+import foundation.e.apps.data.application.home.HomeApi
+import foundation.e.apps.data.application.search.SearchApi
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
@@ -30,10 +31,11 @@ import org.mockito.Mockito
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.any
-class ApplicationApiRepositoryTest {
+class SearchApiRepositoryTest {
private lateinit var applicationRepository: ApplicationRepository
+
@Mock
- private lateinit var fusedAPIImpl: ApplicationApiImpl
+ private lateinit var fusedAPIImpl: SearchApi
@Mock
private lateinit var homeApi: HomeApi
@@ -44,10 +46,14 @@ class ApplicationApiRepositoryTest {
@Mock
private lateinit var appsApi: AppsApi
+ @Mock
+ private lateinit var downloadInfoApi: DownloadInfoApi
+
@Before
fun setup() {
MockitoAnnotations.openMocks(this)
- applicationRepository = ApplicationRepository(fusedAPIImpl, homeApi, categoryApi, appsApi)
+ applicationRepository =
+ ApplicationRepository(fusedAPIImpl, homeApi, categoryApi, appsApi, downloadInfoApi)
}
@Test
diff --git a/app/src/test/java/foundation/e/apps/home/HomeApiTest.kt b/app/src/test/java/foundation/e/apps/home/HomeApiTest.kt
index b32e0f941d00d2d49d76b93ebb2241dac84bf6ad..2ed361abdf185f93f3a0f7a58a2f9d21a7cedb77 100644
--- a/app/src/test/java/foundation/e/apps/home/HomeApiTest.kt
+++ b/app/src/test/java/foundation/e/apps/home/HomeApiTest.kt
@@ -25,8 +25,8 @@ import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData
import foundation.e.apps.FakePreferenceModule
import foundation.e.apps.data.application.ApplicationDataManager
-import foundation.e.apps.data.application.HomeApi
-import foundation.e.apps.data.application.HomeApiImpl
+import foundation.e.apps.data.application.home.HomeApi
+import foundation.e.apps.data.application.home.HomeApiImpl
import foundation.e.apps.data.cleanapk.repositories.CleanApkRepository
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.playstore.PlayStoreRepository