diff --git a/app/build.gradle b/app/build.gradle index e20d10fb35f7db9f3840fcdc3a382888ae4959a0..1d663b14158e999a2d2ee8defaef56625e714afe 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 { 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 54a1959b1da7d070df8b623aec44dfe6a412da1f..cf756059a1241b0a9f6a399fc5963b1aa06f470c 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) + } } } 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 71a899f931bdf8d7bf51242d40d0799d3a0df9dd..3f3c5c21a47c97af39cc54456961d603c507a529 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 9aee363dc77a85c6af681aae694f6bca098af221..50e163cdd6f5e7e8a6882b537d9859610f1f290b 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 9ec13d37ef64ff6ebdc4c6622103d47d1ea4c86a..1a2e8de00a86b3f2250cd2b94676d7f305693428 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 ee2fa8d0b759e480e013ca1215aa1e86e8888185..312cacc5ef8271c1504b1ccb6c3b02eb85f2abcd 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 14cde85cbb9e6fb2b79266474170300244774860..7218300b806bb8dde7aebfd43647f016d32d2699 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.