diff --git a/app/build.gradle b/app/build.gradle index 2f0568da077e40ee591154d347756a347bc0e3aa..0ede59d7015230598c4485f52e2de3f56c880805 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,13 +14,12 @@ def versionMajor = 2 def versionMinor = 13 def versionPatch = 11 -def getGitHash = { -> - def stdOut = new ByteArrayOutputStream() - exec { - commandLine 'git', 'log', '--pretty=format:%h', '-n', '1' - standardOutput = stdOut - } - return stdOut.toString().trim() +def getGitHashProvider = providers.exec { + commandLine 'git', 'log', '--pretty=format:%h', '-n', '1' +} + +def getGitHash = { + return getGitHashProvider.standardOutput.asText.get().trim() } def getDate = { -> 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 ba8966be71c627b6ceaa4ccabc357bcba507849a..39988d87b5a70c8afcdbcb2a1925ec6cf7d8755a 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 @@ -101,7 +101,7 @@ class ApplicationRepository @Inject constructor( suspend fun getOnDemandModule( packageName: String, moduleName: String, - versionCode: Int, + versionCode: Long, offerType: Int ): String? { return downloadInfoApi.getOnDemandModule(packageName, moduleName, versionCode, offerType) diff --git a/app/src/main/java/foundation/e/apps/data/application/data/Application.kt b/app/src/main/java/foundation/e/apps/data/application/data/Application.kt index b332490207cd6a2f3cd12c9439e9e12822d34f29..0ac131503fee56ba9aad38a7e1be9ce8d21e0db9 100644 --- a/app/src/main/java/foundation/e/apps/data/application/data/Application.kt +++ b/app/src/main/java/foundation/e/apps/data/application/data/Application.kt @@ -38,7 +38,7 @@ data class Application( var reportId: Long = -1L, val icon_image_path: String = String(), val last_modified: String = String(), - var latest_version_code: Int = -1, + var latest_version_code: Long = -1, val latest_version_number: String = String(), val latest_downloaded_version: String = String(), val licence: String = String(), 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 index fe8bb50b226ba5ab78a433b597e55e39ede0787a..b29dbb5f42bb82ec363fc2260781b382de59a510 100644 --- 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 @@ -28,7 +28,7 @@ interface DownloadInfoApi { suspend fun getOnDemandModule( packageName: String, moduleName: String, - versionCode: Int, + versionCode: Long, offerType: Int ): String? 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 index 8e6ca6d84b71ecfa13fa96d3bad6ebac7eff973d..1c36aac865d47ffbced95167d958515ef4ffeae1 100644 --- 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 @@ -32,7 +32,7 @@ class DownloadInfoApiImpl @Inject constructor( override suspend fun getOnDemandModule( packageName: String, moduleName: String, - versionCode: Int, + versionCode: Long, offerType: Int ): String? { val result = handleNetworkResult { diff --git a/app/src/main/java/foundation/e/apps/data/application/utils/GplayApiExtensions.kt b/app/src/main/java/foundation/e/apps/data/application/utils/GplayApiExtensions.kt index 0ddc34c77cffa5e1d96e8f7422e843b687be6a58..3263a4ffe99afec90c0b8962aa43f7191222fdb1 100644 --- a/app/src/main/java/foundation/e/apps/data/application/utils/GplayApiExtensions.kt +++ b/app/src/main/java/foundation/e/apps/data/application/utils/GplayApiExtensions.kt @@ -38,7 +38,7 @@ fun App.toApplication(context: Context): Application { latest_version_code = this.versionCode, latest_version_number = this.versionName, name = this.displayName, - other_images_path = this.screenshots.toList(), + other_images_path = this.screenshots.toList().map { it.url }, package_name = this.packageName, ratings = Ratings( usageQualityScore = diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/ApplicationDeserializer.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/ApplicationDeserializer.kt index 9c0f2928c7947d8dcf3b1bdea1b5e5042dcb7ff4..bfeb26698b2e5a2bd19208cf8f7cfdbf22dce734 100644 --- a/app/src/main/java/foundation/e/apps/data/cleanapk/ApplicationDeserializer.kt +++ b/app/src/main/java/foundation/e/apps/data/cleanapk/ApplicationDeserializer.kt @@ -38,7 +38,7 @@ class ApplicationDeserializer : JsonDeserializer { val lastUpdatedOn = lastUpdateJson ?.asJsonObject?.get("update_on")?.asString ?: "" cleanApkApplication.app.updatedOn = lastUpdatedOn - cleanApkApplication.app.latest_version_code = lastUpdateJson?.get("version_code")?.asInt ?: -1 + cleanApkApplication.app.latest_version_code = lastUpdateJson?.get("version_code")?.asLong ?: -1 val appSizeInBinary = (json?.asJsonObject?.get("app")?.asJsonObject?.get(lastUpdate)?.asJsonObject?.get("apk_file_size")?.asString ?: "") diff --git a/app/src/main/java/foundation/e/apps/data/database/install/AppInstallConverter.kt b/app/src/main/java/foundation/e/apps/data/database/install/AppInstallConverter.kt index ab0ec0f29832866d2f2ba84a86bf29aa9df4d250..70b0f890e033816ffe6c1705941dc57873c0e386 100644 --- a/app/src/main/java/foundation/e/apps/data/database/install/AppInstallConverter.kt +++ b/app/src/main/java/foundation/e/apps/data/database/install/AppInstallConverter.kt @@ -2,7 +2,7 @@ package foundation.e.apps.data.database.install import androidx.room.TypeConverter import com.aurora.gplayapi.data.models.ContentRating -import com.aurora.gplayapi.data.models.File +import com.aurora.gplayapi.data.models.PlayFile import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -25,11 +25,11 @@ class AppInstallConverter { gson.fromJson(value, object : TypeToken>() {}.type) @TypeConverter - fun filesToJsonString(value: List): String = gson.toJson(value) + fun filesToJsonString(value: List): String = gson.toJson(value) @TypeConverter fun jsonStringToFiles(value: String) = - gson.fromJson(value, Array::class.java).toMutableList() + gson.fromJson(value, Array::class.java).toMutableList() @TypeConverter fun fromContentRating(contentRating: ContentRating): String { diff --git a/app/src/main/java/foundation/e/apps/data/gitlab/models/SystemAppInfo.kt b/app/src/main/java/foundation/e/apps/data/gitlab/models/SystemAppInfo.kt index a80aad3125fda9019e511a055de38a02d1dae78a..2008c8bd3f0f57ca839dfca0622d5bf903562c71 100644 --- a/app/src/main/java/foundation/e/apps/data/gitlab/models/SystemAppInfo.kt +++ b/app/src/main/java/foundation/e/apps/data/gitlab/models/SystemAppInfo.kt @@ -29,7 +29,7 @@ import java.util.UUID data class SystemAppInfo( val name: String, @Json(name = "package_name") val packageName: String, - @Json(name = "version_code") val versionCode: Int, + @Json(name = "version_code") val versionCode: Long, @Json(name = "min_sdk") val minSdk: Int, @Json(name = "version_name") val versionName: String, @Json(name = "url") val downloadUrl: String, diff --git a/app/src/main/java/foundation/e/apps/data/install/AppManagerImpl.kt b/app/src/main/java/foundation/e/apps/data/install/AppManagerImpl.kt index 183a65d08c344cc32f8f3c35d95b40782ec2ca3b..3f05ff0bb6fc3a25a70a2399b6d8384fe0f1ab90 100644 --- a/app/src/main/java/foundation/e/apps/data/install/AppManagerImpl.kt +++ b/app/src/main/java/foundation/e/apps/data/install/AppManagerImpl.kt @@ -45,7 +45,7 @@ import java.io.File import javax.inject.Inject import javax.inject.Named import javax.inject.Singleton -import com.aurora.gplayapi.data.models.File as AuroraFile +import com.aurora.gplayapi.data.models.PlayFile as AuroraFile @Singleton class AppManagerImpl @Inject constructor( @@ -240,7 +240,7 @@ class AppManagerImpl @Inject constructor( count: Int ): File { val downloadingFile = appInstall.files[appInstall.downloadURLList.indexOf(it)] - return if (downloadingFile.type == AuroraFile.FileType.BASE || downloadingFile.type == AuroraFile.FileType.SPLIT) { + return if (downloadingFile.type == AuroraFile.Type.BASE || downloadingFile.type == AuroraFile.Type.SPLIT) { File(parentPath, "${appInstall.packageName}_$count.apk") } else { createObbFileForDownload(appInstall, it) diff --git a/app/src/main/java/foundation/e/apps/data/install/models/AppInstall.kt b/app/src/main/java/foundation/e/apps/data/install/models/AppInstall.kt index af28c92a894705bd619cb10a3db32003f9808f4f..a8b48a9ec1503d4f9d9e4e173a4a9e8d9a3b3bd8 100644 --- a/app/src/main/java/foundation/e/apps/data/install/models/AppInstall.kt +++ b/app/src/main/java/foundation/e/apps/data/install/models/AppInstall.kt @@ -4,7 +4,7 @@ import androidx.room.Entity import androidx.room.Ignore import androidx.room.PrimaryKey import com.aurora.gplayapi.data.models.ContentRating -import com.aurora.gplayapi.data.models.File +import com.aurora.gplayapi.data.models.PlayFile import foundation.e.apps.data.cleanapk.CleanApkRetrofit import foundation.e.apps.data.enums.Source import foundation.e.apps.data.enums.Status @@ -22,11 +22,11 @@ data class AppInstall( val orgStatus: Status = Status.UNAVAILABLE, val type: Type = Type.NATIVE, val iconImageUrl: String = String(), - val versionCode: Int = 1, + val versionCode: Long = 1, val offerType: Int = -1, val isFree: Boolean = true, var appSize: Long = 0, - var files: List = mutableListOf(), + var files: List = mutableListOf(), var signature: String = String(), var contentRating: ContentRating = ContentRating() ) { diff --git a/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt b/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt index 6e9e640580329c513339912308203d80e1e54caa..132eef9d6bf73c6c0e2b210cce33251685aa5ba9 100644 --- a/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt @@ -21,7 +21,7 @@ package foundation.e.apps.data.playstore import android.content.Context import com.aurora.gplayapi.data.models.Category import com.aurora.gplayapi.data.models.ContentRating -import com.aurora.gplayapi.data.models.File +import com.aurora.gplayapi.data.models.PlayFile import com.aurora.gplayapi.data.models.StreamCluster import com.aurora.gplayapi.helpers.AppDetailsHelper import com.aurora.gplayapi.helpers.ContentRatingHelper @@ -159,7 +159,7 @@ class PlayStoreRepository @Inject constructor( var appDetails: GplayApp appDetails = getAppDetailsHelper().getAppByPackageName(packageName) - if (!isEmulator() && appDetails.versionCode == 0 + if (!isEmulator() && appDetails.versionCode == 0L && authenticatorRepository.getGPlayAuthOrThrow().isAnonymous) { // Google Play returns limited result ( i.e. version code being 0) with a stale token, // so we need to refresh authentication to get a new token. @@ -169,7 +169,7 @@ class PlayStoreRepository @Inject constructor( appDetails = getAppDetailsHelper().getAppByPackageName(packageName) - if (appDetails.versionCode == 0) { + if (appDetails.versionCode == 0L) { Timber.w("After refreshing auth, version code is still 0. Giving up installation.") throw IllegalStateException("App version code cannot be 0") } @@ -233,19 +233,19 @@ class PlayStoreRepository @Inject constructor( suspend fun getDownloadInfo( idOrPackageName: String, - versionCode: Int, + versionCode: Long, offerType: Int - ): List = withContext(Dispatchers.IO) { + ): List = withContext(Dispatchers.IO) { var version = versionCode var offer = offerType - if (version == 0) { + if (version == 0L) { val appDetailsHelper = getAppDetails(idOrPackageName) version = appDetailsHelper.latest_version_code offer = appDetailsHelper.offer_type } - if (version == 0) { + if (version == 0L) { throw IllegalStateException("Could not get download details for $idOrPackageName") } @@ -260,10 +260,10 @@ class PlayStoreRepository @Inject constructor( suspend fun getOnDemandModule( packageName: String, moduleName: String, - versionCode: Int, + versionCode: Long, offerType: Int - ): List { - val downloadData = mutableListOf() + ): List { + val downloadData = mutableListOf() val authData = authenticatorRepository.getGPlayAuthOrThrow() withContext(Dispatchers.IO) { diff --git a/app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt b/app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt index d3570cdc377f42323675ac12540a519cb67fd623..235e9ab52a58b156ea88c2e8f6b1d7ca1f6c0066 100644 --- a/app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt @@ -196,45 +196,47 @@ class GPlayHttpClient @Inject constructor( } private fun buildPlayResponse(response: Response): PlayResponse { - return PlayResponse().apply { - isSuccessful = response.isSuccessful - code = response.code - val url = response.request.url - - when (code) { - STATUS_CODE_UNAUTHORIZED -> MainScope().launch { - EventBus.invokeEvent( - AppEvent.InvalidAuthEvent(AuthObject.GPlayAuth::class.java.simpleName) - ) - } - - STATUS_CODE_TOO_MANY_REQUESTS -> MainScope().launch { - if (url.toString().contains(SEARCH_SUGGEST)) { - return@launch - } + val url = response.request.url + val code = response.code + val isSuccessful = response.isSuccessful + val errorMessage = if (!isSuccessful) response.message else null + val responseBytes = response.body?.bytes() ?: byteArrayOf() + + when (code) { + STATUS_CODE_UNAUTHORIZED -> MainScope().launch { + EventBus.invokeEvent( + AppEvent.InvalidAuthEvent(AuthObject.GPlayAuth::class.java.simpleName) + ) + } - EventBus.invokeEvent( - AppEvent.TooManyRequests() - ) + STATUS_CODE_TOO_MANY_REQUESTS -> MainScope().launch { + if (url.toString().contains(SEARCH_SUGGEST)) { + return@launch } - } - if (!url.toString().contains(URL_SUBSTRING_PURCHASE) && code !in listOf( - STATUS_CODE_OK, - STATUS_CODE_UNAUTHORIZED + EventBus.invokeEvent( + AppEvent.TooManyRequests() ) - ) { - throw GplayHttpRequestException(code, response.message) } + } - if (response.body != null) { - responseBytes = response.body!!.bytes() - } + if (!url.toString().contains(URL_SUBSTRING_PURCHASE) && code !in listOf( + STATUS_CODE_OK, + STATUS_CODE_UNAUTHORIZED + ) + ) { + throw GplayHttpRequestException(code, response.message) + } - if (!isSuccessful) { - errorString = response.message - } + fun PlayResponse.withErrorString(error: String?): PlayResponse { + return if (error == null) return this else copy(errorString = error) + } + return PlayResponse( + isSuccessful = isSuccessful, + code = code, + responseBytes = responseBytes, + ).withErrorString(errorMessage).apply { _responseCode.value = response.code } } diff --git a/app/src/main/java/foundation/e/apps/data/playstore/utils/NativeGsfVersionProvider.kt b/app/src/main/java/foundation/e/apps/data/playstore/utils/NativeGsfVersionProvider.kt index f94e261c87dd174ccab8dc59a6ba81ef0b48d38d..9207c00699452201b2ec947cb1573b3320451cdc 100644 --- a/app/src/main/java/foundation/e/apps/data/playstore/utils/NativeGsfVersionProvider.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/utils/NativeGsfVersionProvider.kt @@ -24,26 +24,26 @@ import android.content.pm.PackageManager import androidx.core.content.pm.PackageInfoCompat class NativeGsfVersionProvider(context: Context) { - private var gsfVersionCode = 0 + private var gsfVersionCode = 0L private val packageManager = context.packageManager init { try { val gsfPkgInfo = packageManager.getPackageInfo(GOOGLE_SERVICES_PACKAGE_ID, 0) - gsfVersionCode = PackageInfoCompat.getLongVersionCode(gsfPkgInfo).toInt() + gsfVersionCode = PackageInfoCompat.getLongVersionCode(gsfPkgInfo) } catch (e: PackageManager.NameNotFoundException) { // com.google.android.gms not found } } - fun getGsfVersionCode(defaultIfNotFound: Boolean): Int { + fun getGsfVersionCode(defaultIfNotFound: Boolean): Long { return if (defaultIfNotFound && gsfVersionCode < GOOGLE_SERVICES_VERSION_CODE) GOOGLE_SERVICES_VERSION_CODE else gsfVersionCode } - fun getVendingVersionCode(): Int { + fun getVendingVersionCode(): Long { return GOOGLE_VENDING_VERSION_CODE } @@ -53,8 +53,8 @@ class NativeGsfVersionProvider(context: Context) { companion object { private const val GOOGLE_SERVICES_PACKAGE_ID = "com.google.android.gms" - private const val GOOGLE_SERVICES_VERSION_CODE = 203019037 - private const val GOOGLE_VENDING_VERSION_CODE = 82151710 + private const val GOOGLE_SERVICES_VERSION_CODE = 203019037L + private const val GOOGLE_VENDING_VERSION_CODE = 82151710L private const val GOOGLE_VENDING_VERSION_STRING = "21.5.17-21 [0] [PR] 326734551" } } diff --git a/app/src/main/java/foundation/e/apps/di/CommonUtilsModule.kt b/app/src/main/java/foundation/e/apps/di/CommonUtilsModule.kt index 312ed053788c3aedbcf3b5d9e54990ec97be03c2..4524af7a61867379cb09a4645e36e0911ca471bb 100644 --- a/app/src/main/java/foundation/e/apps/di/CommonUtilsModule.kt +++ b/app/src/main/java/foundation/e/apps/di/CommonUtilsModule.kt @@ -34,6 +34,7 @@ import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import foundation.e.apps.BuildConfig +import foundation.e.apps.utils.ProtobufExclusionStrategy import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -105,6 +106,7 @@ object CommonUtilsModule { fun provideGsonInstance(): Gson { return GsonBuilder() .excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.STATIC) + .addDeserializationExclusionStrategy(ProtobufExclusionStrategy) .create() } diff --git a/app/src/main/java/foundation/e/apps/install/pkg/AppLoungePackageManager.kt b/app/src/main/java/foundation/e/apps/install/pkg/AppLoungePackageManager.kt index f7b1ea3f522927cf916c5b4eadad612d9ac6e75d..d2a6b25636e4d0ba75fccabd50983dc466d2461f 100644 --- a/app/src/main/java/foundation/e/apps/install/pkg/AppLoungePackageManager.kt +++ b/app/src/main/java/foundation/e/apps/install/pkg/AppLoungePackageManager.kt @@ -71,10 +71,10 @@ class AppLoungePackageManager @Inject constructor( } } - private fun isUpdatable(packageName: String, versionCode: Int): Boolean { + private fun isUpdatable(packageName: String, versionCode: Long): Boolean { val packageInfo = getPackageInfo(packageName) ?: return false val installedVersionNumber = PackageInfoCompat.getLongVersionCode(packageInfo) - return versionCode.toLong() > installedVersionNumber + return versionCode > installedVersionNumber } fun getLaunchIntent(packageName: String): Intent? { @@ -96,7 +96,7 @@ class AppLoungePackageManager @Inject constructor( */ fun getPackageStatus( packageName: String, - versionCode: Int, + versionCode: Long, ): Status { return if (isInstalled(packageName)) { if (isUpdatable(packageName, versionCode)) { diff --git a/app/src/main/java/foundation/e/apps/utils/ProtobufExclusionStrategy.kt b/app/src/main/java/foundation/e/apps/utils/ProtobufExclusionStrategy.kt new file mode 100644 index 0000000000000000000000000000000000000000..f6465c37ab1fa9d7f8040afd4defffe8d67a022e --- /dev/null +++ b/app/src/main/java/foundation/e/apps/utils/ProtobufExclusionStrategy.kt @@ -0,0 +1,17 @@ +package foundation.e.apps.utils + +import com.google.gson.ExclusionStrategy +import com.google.gson.FieldAttributes + +object ProtobufExclusionStrategy : ExclusionStrategy { + + override fun shouldSkipField(field: FieldAttributes?): Boolean { + if (field == null) return false + val protobufClass = "com.google.protobuf" + + return field.declaredType.typeName.startsWith(protobufClass) || + field.declaringClass.typeName.startsWith(protobufClass) + } + + override fun shouldSkipClass(clazz: Class<*>?): Boolean = false +} diff --git a/app/src/test/java/foundation/e/apps/FakeAppLoungePreference.kt b/app/src/test/java/foundation/e/apps/FakeAppLoungePreference.kt index 240f9b7441ba7c3d7d71c61fa9e020de3cf617a1..7c7adda218901468009ba0f9046a565ca792829e 100644 --- a/app/src/test/java/foundation/e/apps/FakeAppLoungePreference.kt +++ b/app/src/test/java/foundation/e/apps/FakeAppLoungePreference.kt @@ -19,20 +19,14 @@ package foundation.e.apps import android.content.Context -import foundation.e.apps.data.enums.User import foundation.e.apps.data.preference.AppLoungeDataStore import foundation.e.apps.data.preference.AppLoungePreference -import io.mockk.every -import io.mockk.mockk -class FakeAppLoungePreference(private val context: Context) : AppLoungePreference(context, createMockDataStore()) { - companion object { - private fun createMockDataStore(): AppLoungeDataStore { - val mockDataStore = mockk(relaxed = true) - every { mockDataStore.getUserType() } returns User.ANONYMOUS - return mockDataStore - } - } +class FakeAppLoungePreference( + private val context: Context, + appLoungeDataStore: AppLoungeDataStore, +) : AppLoungePreference(context, appLoungeDataStore) { + var isPWASelectedFake = false var isOpenSourceelectedFake = false var isGplaySelectedFake = false diff --git a/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt b/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt index 971bcdd41693e844025328419d9a6322f54fcc34..003e516c7ef6064931f1028870c8f24f77e8f189 100644 --- a/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt +++ b/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt @@ -20,17 +20,17 @@ package foundation.e.apps import android.content.Context import androidx.arch.core.executor.testing.InstantTaskExecutorRule import com.aurora.gplayapi.data.models.AuthData +import foundation.e.apps.data.application.ApplicationRepository +import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.FilterLevel import foundation.e.apps.data.enums.ResultStatus +import foundation.e.apps.data.enums.Source 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.search.SearchRepository -import foundation.e.apps.data.application.data.Application -import foundation.e.apps.data.enums.Source import foundation.e.apps.data.gitlab.SystemAppsUpdatesRepository +import foundation.e.apps.data.preference.AppLoungeDataStore import foundation.e.apps.data.updates.UpdatesManagerImpl import foundation.e.apps.util.MainCoroutineRule import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -82,13 +82,16 @@ class UpdateManagerImptTest { @Mock private lateinit var systemAppsUpdatesRepository: SystemAppsUpdatesRepository + @Mock + private lateinit var appLoungeDataStore: AppLoungeDataStore + val authData = AuthData("e@e.email", "AtadyMsIAtadyM") @Before fun setup() { MockitoAnnotations.openMocks(this) faultyAppRepository = FaultyAppRepository(FakeFaultyAppDao()) - preferenceModule = FakeAppLoungePreference(context) + preferenceModule = FakeAppLoungePreference(context, appLoungeDataStore) pkgManagerModule = FakeAppLoungePackageManager(context, getGplayApps()) updatesManagerImpl = UpdatesManagerImpl( context, diff --git a/app/src/test/java/foundation/e/apps/fused/SearchRepositoryImplTest.kt b/app/src/test/java/foundation/e/apps/fused/SearchRepositoryImplTest.kt index 978e9c7378fe0d4afc1851bf04c8f5d90fd50a28..d44f47bdbc92bd64cb7833094856cff76de2a178 100644 --- a/app/src/test/java/foundation/e/apps/fused/SearchRepositoryImplTest.kt +++ b/app/src/test/java/foundation/e/apps/fused/SearchRepositoryImplTest.kt @@ -37,6 +37,7 @@ import foundation.e.apps.data.cleanapk.repositories.CleanApkPwaRepository 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.data.preference.AppLoungeDataStore import foundation.e.apps.install.pkg.AppLoungePackageManager import foundation.e.apps.install.pkg.PwaManager import foundation.e.apps.util.MainCoroutineRule @@ -95,6 +96,9 @@ class SearchRepositoryImplTest { @Mock private lateinit var visibilityFetcher: AppVisibilityResolver + @Mock + private lateinit var appLoungeDataStore: AppLoungeDataStore + private lateinit var appsApi: AppsApi private lateinit var applicationDataManager: ApplicationDataManager @@ -107,7 +111,7 @@ class SearchRepositoryImplTest { fun setup() { MockitoAnnotations.openMocks(this) formatterMocked = Mockito.mockStatic(Formatter::class.java) - preferenceManagerModule = FakeAppLoungePreference(context) + preferenceManagerModule = FakeAppLoungePreference(context, appLoungeDataStore) applicationDataManager = ApplicationDataManager(appLoungePackageManager, pwaManager, visibilityFetcher) val appSourcesContainer = diff --git a/app/src/test/java/foundation/e/apps/install/pkg/AppLoungePackageManagerTest.kt b/app/src/test/java/foundation/e/apps/install/pkg/AppLoungePackageManagerTest.kt index 023009b368c9d98f2532c17d6880c15f935db4c0..4e0bd6c5c43f411e4cd8ce45b0ba804401a25607 100644 --- a/app/src/test/java/foundation/e/apps/install/pkg/AppLoungePackageManagerTest.kt +++ b/app/src/test/java/foundation/e/apps/install/pkg/AppLoungePackageManagerTest.kt @@ -105,7 +105,7 @@ class AppLoungePackageManagerTest { fun givenPackageInfoIsAbsent_whenCheckIsUpdatable_thenReturnStatusUNAVAILABLE() { mockPackageAbsence() - val newVersionCode = 40903000 + val newVersionCode = 40903000L assertEquals( Status.UNAVAILABLE, appLoungePackageManager.getPackageStatus( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d6390a2e49cdead9cca293f89d0552b1875babca..e64952dc9c924646550bc9ae7a572dff1ea2e413 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ hiltCompiler = "1.2.0" hiltWork = "1.2.0" lifecycleExtensions = "1.1.1" fragmentKtx = "1.8.5" -gplayapi = "3.4.5-0" +gplayapi = "3bfc73bc" gson = "2.11.0" jacksonDataformatYaml = "2.17.0" jsoup = "1.17.2"