diff --git a/app/build.gradle b/app/build.gradle index c18640e42e8ee06f65cb7f8ccbf195feffce3fd9..48673d00cb18b1e93b1e0b1d0fc14c6c57825c78 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "foundation.e.apps" minSdkVersion 21 targetSdkVersion 27 - versionCode 6 - versionName "1.1.3" + versionCode 7 + versionName "1.1.4" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { 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 8068cd3cd5b9c85c72a1fa9f136ae3d544365528..4a44216522e41c0ac54ea7da83d8887c39edf6d7 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 @@ -91,7 +91,7 @@ class Application(val packageName: String, private val applicationManager: Appli if (downloader != null) { downloader?.cancelDownload() } else { - onDownloadComplete(context, DownloadManager.STATUS_FAILED) + onDownloadComplete(context, Error.NO_ERROR) } } return @@ -128,12 +128,10 @@ class Application(val packageName: String, private val applicationManager: Appli blocker.wait() } } else { - stateManager.notifyError(Error.APK_INCOMPATIBLE) - onDownloadComplete(context, DownloadManager.STATUS_FAILED) + onDownloadComplete(context, Error.APK_INCOMPATIBLE) } } else { - stateManager.notifyError(error) - onDownloadComplete(context, DownloadManager.STATUS_FAILED) + onDownloadComplete(context, error) } } @@ -150,8 +148,8 @@ class Application(val packageName: String, private val applicationManager: Appli } } - override fun onDownloadComplete(context: Context, status: Int) { - if (status == DownloadManager.STATUS_SUCCESSFUL) { + override fun onDownloadComplete(context: Context, error: Error) { + if (error == Error.NO_ERROR) { install(context) } else { synchronized(blocker) { @@ -159,6 +157,9 @@ class Application(val packageName: String, private val applicationManager: Appli } info.getApkFile(context, basicData!!).delete() applicationManager.stopInstalling(context, this) + if (error != Error.APK_DOWNLOAD_CANCELLED) { + stateManager.notifyError(error) + } } downloader = null } diff --git a/app/src/main/java/foundation/e/apps/application/model/Downloader.kt b/app/src/main/java/foundation/e/apps/application/model/Downloader.kt index 22745a58552d6ed7a1072074b7cac04ae9f154d7..222f1f8bf2c2da28f3ebee2b6384fcc3d5179918 100644 --- a/app/src/main/java/foundation/e/apps/application/model/Downloader.kt +++ b/app/src/main/java/foundation/e/apps/application/model/Downloader.kt @@ -28,6 +28,7 @@ import android.content.Intent import android.content.BroadcastReceiver import android.content.IntentFilter import android.os.AsyncTask +import foundation.e.apps.utils.Error class Downloader(private val applicationInfo: ApplicationInfo, private val fullData: FullData, private val downloaderInterface: DownloaderInterface) : @@ -64,7 +65,7 @@ class Downloader(private val applicationInfo: ApplicationInfo, private val fullD handleDownloadUpdates() }.start() } else { - downloaderInterface.onDownloadComplete(context, DownloadManager.STATUS_FAILED) + downloaderInterface.onDownloadComplete(context, Error.APK_UNAVAILABLE) } } @@ -125,23 +126,27 @@ class Downloader(private val applicationInfo: ApplicationInfo, private val fullD override fun onReceive(context: Context, intent: Intent) { unregisterReceivers(context) val status = getDownloadStatus() - if (status != null && status == DownloadManager.STATUS_SUCCESSFUL) { - IntegrityVerificationTask( - applicationInfo, - fullData, - this@Downloader) - .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, context) + if (status != null) { + if (status == DownloadManager.STATUS_SUCCESSFUL) { + IntegrityVerificationTask( + applicationInfo, + fullData, + this@Downloader) + .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, context) + } else { + downloaderInterface.onDownloadComplete(context, Error.APK_DOWNLOAD_FAILED) + } } else { - downloaderInterface.onDownloadComplete(context, DownloadManager.STATUS_FAILED) + downloaderInterface.onDownloadComplete(context, Error.APK_DOWNLOAD_CANCELLED) } } } override fun onIntegrityVerified(context: Context, verificationSuccessful: Boolean) { if (verificationSuccessful) { - downloaderInterface.onDownloadComplete(context, DownloadManager.STATUS_SUCCESSFUL) + downloaderInterface.onDownloadComplete(context, Error.NO_ERROR) } else { - downloaderInterface.onDownloadComplete(context, DownloadManager.STATUS_FAILED) + downloaderInterface.onDownloadComplete(context, Error.APK_CORRUPT) } } diff --git a/app/src/main/java/foundation/e/apps/application/model/DownloaderInterface.kt b/app/src/main/java/foundation/e/apps/application/model/DownloaderInterface.kt index 7c2ddb12765f72afa303e2405e604d05b4cf3bda..47bf6aeeaf706d2b104d330b0b0dae2654121f80 100644 --- a/app/src/main/java/foundation/e/apps/application/model/DownloaderInterface.kt +++ b/app/src/main/java/foundation/e/apps/application/model/DownloaderInterface.kt @@ -18,7 +18,8 @@ package foundation.e.apps.application.model import android.content.Context +import foundation.e.apps.utils.Error interface DownloaderInterface { - fun onDownloadComplete(context: Context, status: Int) -} \ No newline at end of file + fun onDownloadComplete(context: Context, error: Error) +} 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 312cacc5ef8271c1504b1ccb6c3b02eb85f2abcd..201c632b0a7b79e8fe78b41c28dffdbdd8bcfcfd 100644 --- a/app/src/main/java/foundation/e/apps/utils/Error.kt +++ b/app/src/main/java/foundation/e/apps/utils/Error.kt @@ -33,7 +33,9 @@ enum class Error(val description: Int) { 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), - APK_INCOMPATIBLE(R.string.error_apk_incompatible); + APK_INCOMPATIBLE(R.string.error_apk_incompatible), + APK_DOWNLOAD_CANCELLED(R.string.error_apk_download_cancelled), + APK_DOWNLOAD_FAILED(R.string.error_apk_download_failed); 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 7218300b806bb8dde7aebfd43647f016d32d2699..4506ea74c7f67f6a06ba194a4744377e514a141a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -134,4 +134,5 @@ This app is already available or has been requested. No error. This app is incompatible with your device. + Download cancelled.