From d469f55b9693dae73d37715d9689990d1a0e2ca2 Mon Sep 17 00:00:00 2001 From: Nihar Thakkar Date: Thu, 6 Jun 2019 14:53:06 +0530 Subject: [PATCH 1/3] Don't install an APK if its architecture is incompatible with the device --- .../e/apps/application/model/Application.kt | 28 +++++++++++++++---- .../e/apps/application/model/Version.kt | 3 +- .../e/apps/application/model/data/FullData.kt | 3 +- .../java/foundation/e/apps/utils/Error.kt | 3 +- app/src/main/res/values/strings.xml | 1 + 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/application/model/Application.kt b/app/src/main/java/foundation/e/apps/application/model/Application.kt index 71a899f93..3f3c5c21a 100644 --- a/app/src/main/java/foundation/e/apps/application/model/Application.kt +++ b/app/src/main/java/foundation/e/apps/application/model/Application.kt @@ -120,11 +120,16 @@ class Application(val packageName: String, private val applicationManager: Appli fun download(context: Context) { val error = assertFullData(context) if (error == null) { - downloader = Downloader(info, fullData!!, this) - stateManager.notifyDownloading(downloader!!) - downloader!!.download(context) - synchronized(blocker) { - blocker.wait() + if (isAPKArchCompatible()) { + downloader = Downloader(info, fullData!!, this) + stateManager.notifyDownloading(downloader!!) + downloader!!.download(context) + synchronized(blocker) { + blocker.wait() + } + } else { + stateManager.notifyError(Error.APK_INCOMPATIBLE) + onDownloadComplete(context, DownloadManager.STATUS_FAILED) } } else { stateManager.notifyError(error) @@ -132,6 +137,19 @@ class Application(val packageName: String, private val applicationManager: Appli } } + private fun isAPKArchCompatible(): Boolean { + val apkArchitecture: String? = fullData!!.getLastVersion()?.apkArchitecture + return if (apkArchitecture != null) { + if (apkArchitecture == "universal") { + true + } else { + android.os.Build.SUPPORTED_ABIS.toList().contains(apkArchitecture) + } + } else { + false + } + } + override fun onDownloadComplete(context: Context, status: Int) { if (status == DownloadManager.STATUS_SUCCESSFUL) { install(context) diff --git a/app/src/main/java/foundation/e/apps/application/model/Version.kt b/app/src/main/java/foundation/e/apps/application/model/Version.kt index 9aee363dc..50e163cdd 100644 --- a/app/src/main/java/foundation/e/apps/application/model/Version.kt +++ b/app/src/main/java/foundation/e/apps/application/model/Version.kt @@ -31,4 +31,5 @@ class Version(val downloadFlag: String?, val updateName: String, val privacyRating: Int?, val exodusPermissions: ArrayList?, - val exodusTrackers: ArrayList?) \ No newline at end of file + val exodusTrackers: ArrayList?, + val apkArchitecture: String) \ No newline at end of file diff --git a/app/src/main/java/foundation/e/apps/application/model/data/FullData.kt b/app/src/main/java/foundation/e/apps/application/model/data/FullData.kt index 9ec13d37e..1a2e8de00 100644 --- a/app/src/main/java/foundation/e/apps/application/model/data/FullData.kt +++ b/app/src/main/java/foundation/e/apps/application/model/data/FullData.kt @@ -91,7 +91,8 @@ constructor( name, result["exodus_score"] as Int?, getPermissions(result["exodus_perms"] as ArrayList?), - getTrackers(result["exodus_trackers"] as ArrayList>?)) + getTrackers(result["exodus_trackers"] as ArrayList>?), + result["architecture"] as String) } } diff --git a/app/src/main/java/foundation/e/apps/utils/Error.kt b/app/src/main/java/foundation/e/apps/utils/Error.kt index ee2fa8d0b..312cacc5e 100644 --- a/app/src/main/java/foundation/e/apps/utils/Error.kt +++ b/app/src/main/java/foundation/e/apps/utils/Error.kt @@ -32,7 +32,8 @@ enum class Error(val description: Int) { INSTALL_FAILED(R.string.error_install_failed), INVALID_PACKAGE_NAME(R.string.error_invalid_package_name), PACKAGE_ALREADY_EXISTS(R.string.error_package_already_exists), - NO_ERROR(R.string.error_no_error); + NO_ERROR(R.string.error_no_error), + APK_INCOMPATIBLE(R.string.error_apk_incompatible); companion object { fun findError(e: Exception): Error { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 14cde85cb..7218300b8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -133,4 +133,5 @@ Unable to submit request. Please enter a valid package name. This app is already available or has been requested. No error. + This app is incompatible with your device. -- GitLab From 6ef428e263531584ed84eaeae55d7f1eb69acb03 Mon Sep 17 00:00:00 2001 From: Nihar Thakkar Date: Thu, 6 Jun 2019 14:54:13 +0530 Subject: [PATCH 2/3] Increment version number and version code --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e20d10fb3..1d663b141 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "foundation.e.apps" minSdkVersion 21 targetSdkVersion 27 - versionCode 3 - versionName "1.1.0" + versionCode 4 + versionName "1.1.1" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { -- GitLab From 3e27fb316a4149ff74b14c9ccb159dcbeab51aa6 Mon Sep 17 00:00:00 2001 From: Nihar Thakkar Date: Thu, 6 Jun 2019 18:26:08 +0530 Subject: [PATCH 3/3] Remove listener when activity is destroyed --- .../foundation/e/apps/application/ApplicationActivity.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt b/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt index 54a1959b1..cf756059a 100644 --- a/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt +++ b/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt @@ -602,7 +602,10 @@ class ApplicationActivity : override fun onDestroy() { super.onDestroy() - application.decrementUses() - applicationManagerServiceConnection.unbindService(this) + if (::application.isInitialized) { + application.removeListener(this) + application.decrementUses() + applicationManagerServiceConnection.unbindService(this) + } } } -- GitLab