From 1bfc8a14fbea51642f2ec6d8a77052eab035090e Mon Sep 17 00:00:00 2001 From: Oliver Ford Date: Tue, 20 Apr 2021 20:19:37 +0100 Subject: [PATCH 1/2] Add ability to download/install from intent --- .../view/ui/details/AppDetailsActivity.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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 453531c07..8a2ac97ba 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 @@ -81,6 +81,8 @@ class AppDetailsActivity : BaseDetailsActivity() { private var isNone = false private var status = Status.NONE private var isInstalled: Boolean = false + private var autoDownload: Boolean = false + private var downloadOnly: Boolean = false override fun onConnected() { @@ -97,6 +99,9 @@ class AppDetailsActivity : BaseDetailsActivity() { override fun onStart() { super.onStart() EventBus.getDefault().register(this) + if (autoDownload) { + purchase() + } } override fun onStop() { @@ -169,13 +174,20 @@ class AppDetailsActivity : BaseDetailsActivity() { if (intent.scheme != null && (intent.scheme == "market" || intent.scheme == "http" || intent.scheme == "https")) { val packageName = intent.data!!.getQueryParameter("id") + val packageVersion = intent.data!!.getQueryParameter("v") if (packageName.isNullOrEmpty()) { close() } else { isExternal = true app = App(packageName) + if (!packageVersion.isNullOrEmpty()) { + app.versionCode = packageVersion.toInt() + } fetchCompleteApp() } + + autoDownload = intent.data!!.getBooleanQueryParameter("download", false) + downloadOnly = !intent.data!!.getBooleanQueryParameter("install", false) } else { val rawApp: String? = intent.getStringExtra(Constants.STRING_EXTRA) if (rawApp != null) { @@ -263,6 +275,9 @@ class AppDetailsActivity : BaseDetailsActivity() { } private fun verifyAndInstall(files: List) { + if (downloadOnly) + return + var filesExist = true files.forEach { download -> @@ -340,6 +355,10 @@ class AppDetailsActivity : BaseDetailsActivity() { attachBottomSheet() attachFetch() attachActions() + + if (autoDownload) { + purchase() + } } } From 86c08e9eab3927ff292cb82f76b9afe7bbe201b2 Mon Sep 17 00:00:00 2001 From: Oliver Ford Date: Sun, 9 May 2021 12:56:18 +0100 Subject: [PATCH 2/2] 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() } } }