From 86c08e9eab3927ff292cb82f76b9afe7bbe201b2 Mon Sep 17 00:00:00 2001 From: Oliver Ford Date: Sun, 9 May 2021 12:56:18 +0100 Subject: [PATCH] Add marker files to indicate download progress 1bfc8a14 adds the ability to download APKs via an intent, but since intents are asynchronous, and the incomplete APK appears in its final destination ~immediately while it downloads, the caller lacks a way to identify that download has completed. This commit adds two marker files in the form: sdcard/Aurora/Store/Downloads/com.pkg/.1234.download-in-progress sdcard/Aurora/Store/Downloads/com.pkg/.1234.download-complete (where `com.pkg` and `1234` are package names and version codes respectively) in order that the caller can see: 1. the version that is being downloaded; 2. when the download has finished. --- .../view/ui/details/AppDetailsActivity.kt | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt index 8a2ac97ba..b43855633 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt @@ -76,6 +76,8 @@ class AppDetailsActivity : BaseDetailsActivity() { private lateinit var downloadManager: DownloadManager private lateinit var fetch: Fetch private lateinit var fetchGroupListener: FetchGroupListener + private lateinit var completionMarker: java.io.File + private lateinit var inProgressMarker: java.io.File private var isExternal = false private var isNone = false @@ -186,8 +188,10 @@ class AppDetailsActivity : BaseDetailsActivity() { fetchCompleteApp() } - autoDownload = intent.data!!.getBooleanQueryParameter("download", false) - downloadOnly = !intent.data!!.getBooleanQueryParameter("install", false) + intent.data?.let { + autoDownload = it.getBooleanQueryParameter("download", false) + downloadOnly = it.getBooleanQueryParameter("install", false) + } } else { val rawApp: String? = intent.getStringExtra(Constants.STRING_EXTRA) if (rawApp != null) { @@ -661,6 +665,17 @@ class AppDetailsActivity : BaseDetailsActivity() { if (groupId == app.id) { status = download.status flip(1) + + val pkgDir = PathUtil.getPackageDirectory(applicationContext, app.packageName) + completionMarker = + java.io.File("$pkgDir/.${app.versionCode}.download-complete") + inProgressMarker = + java.io.File("$pkgDir/.${app.versionCode}.download-in-progress") + + if (completionMarker.exists()) + completionMarker.delete() + + inProgressMarker.createNewFile() } } @@ -668,6 +683,7 @@ class AppDetailsActivity : BaseDetailsActivity() { if (groupId == app.id) { status = download.status flip(1) + FileUtils.touch(inProgressMarker) } } @@ -699,6 +715,8 @@ class AppDetailsActivity : BaseDetailsActivity() { status = download.status flip(0) updateProgress(fetchGroup, -1, -1) + inProgressMarker.delete() + completionMarker.createNewFile() try { verifyAndInstall(fetchGroup.downloads) } catch (e: Exception) { @@ -711,6 +729,7 @@ class AppDetailsActivity : BaseDetailsActivity() { if (groupId == app.id) { status = download.status flip(0) + inProgressMarker.delete() } } @@ -724,6 +743,7 @@ class AppDetailsActivity : BaseDetailsActivity() { if (groupId == app.id) { status = download.status flip(0) + inProgressMarker.delete() } } }