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..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,11 +76,15 @@ 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 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 +101,9 @@ class AppDetailsActivity : BaseDetailsActivity() { override fun onStart() { super.onStart() EventBus.getDefault().register(this) + if (autoDownload) { + purchase() + } } override fun onStop() { @@ -169,13 +176,22 @@ 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() } + + 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) { @@ -263,6 +279,9 @@ class AppDetailsActivity : BaseDetailsActivity() { } private fun verifyAndInstall(files: List) { + if (downloadOnly) + return + var filesExist = true files.forEach { download -> @@ -340,6 +359,10 @@ class AppDetailsActivity : BaseDetailsActivity() { attachBottomSheet() attachFetch() attachActions() + + if (autoDownload) { + purchase() + } } } @@ -642,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() } } @@ -649,6 +683,7 @@ class AppDetailsActivity : BaseDetailsActivity() { if (groupId == app.id) { status = download.status flip(1) + FileUtils.touch(inProgressMarker) } } @@ -680,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) { @@ -692,6 +729,7 @@ class AppDetailsActivity : BaseDetailsActivity() { if (groupId == app.id) { status = download.status flip(0) + inProgressMarker.delete() } } @@ -705,6 +743,7 @@ class AppDetailsActivity : BaseDetailsActivity() { if (groupId == app.id) { status = download.status flip(0) + inProgressMarker.delete() } } }