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.