diff --git a/app/src/main/java/com/aurora/store/data/activity/InstallActivity.kt b/app/src/main/java/com/aurora/store/data/activity/InstallActivity.kt index 62406a93b..9d95c927c 100644 --- a/app/src/main/java/com/aurora/store/data/activity/InstallActivity.kt +++ b/app/src/main/java/com/aurora/store/data/activity/InstallActivity.kt @@ -1,40 +1,54 @@ package com.aurora.store.data.activity +import android.app.Activity +import android.content.pm.PackageInstaller import android.os.Bundle import android.util.Log -import androidx.appcompat.app.AppCompatActivity import com.aurora.Constants -import com.aurora.store.data.installer.AppInstaller +import com.aurora.store.data.installer.SessionInstaller import com.aurora.store.util.PathUtil -import java.io.File -class InstallActivity : AppCompatActivity() { +class InstallActivity : Activity() { private val TAG = InstallActivity::class.java.simpleName - private lateinit var packageName: String + private lateinit var sessionInstaller: SessionInstaller override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - packageName = intent.extras?.getString(Constants.STRING_APP) ?: String() - val version = intent.extras?.getInt(Constants.STRING_VERSION) - if (packageName.isNotBlank() && version != null) { - try { - val downloadDir = File(PathUtil.getAppDownloadDir(this, packageName, version).path) - AppInstaller.getInstance(this).getPreferredInstaller() - .install( - packageName, - downloadDir.listFiles()!!.filter { it.path.endsWith(".apk") } - ) - } catch (exception: Exception) { - Log.e(TAG, "Failed to install $packageName") + val packageName = intent.extras?.getString(Constants.STRING_APP) ?: String() + val versionCode = intent.extras?.getInt(Constants.STRING_VERSION) + if (packageName.isNotBlank() && versionCode != null) { + val callback = object : PackageInstaller.SessionCallback() { + override fun onCreated(sessionId: Int) {} + + override fun onBadgingChanged(sessionId: Int) {} + + override fun onActiveChanged(sessionId: Int, active: Boolean) {} + + override fun onProgressChanged(sessionId: Int, progress: Float) {} + + override fun onFinished(sessionId: Int, success: Boolean) { + if (sessionInstaller.sessionId == sessionId) { + Log.i(TAG, "Install finished with status code: $success") + finish() + } + } } + packageManager.packageInstaller.registerSessionCallback(callback) + install(packageName, versionCode) } } - override fun onResume() { - super.onResume() - finish() + private fun install(packageName: String, versionCode: Int) { + sessionInstaller = SessionInstaller(this) + try { + val files = PathUtil.getAppDownloadDir(this, packageName, versionCode).listFiles() + sessionInstaller.install(packageName, files!!.filter { it.path.endsWith(".apk") }) + } catch (exception: Exception) { + Log.e(TAG, "Failed to install $packageName") + finish() + } } } diff --git a/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt b/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt index fcf9fd33f..78a07529b 100644 --- a/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt +++ b/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt @@ -30,10 +30,13 @@ import com.aurora.extensions.isSAndAbove import com.aurora.extensions.isTAndAbove import com.aurora.extensions.isUAndAbove import com.aurora.store.util.Log +import kotlin.properties.Delegates class SessionInstaller(context: Context) : SessionInstallerBase(context) { + var sessionId by Delegates.notNull() + override fun install(packageName: String, files: List) { if (isAlreadyQueued(packageName)) { Log.i("$packageName already queued") @@ -60,7 +63,7 @@ class SessionInstaller(context: Context) : SessionInstallerBase(context) { } } - val sessionId = packageInstaller.createSession(sessionParams) + sessionId = packageInstaller.createSession(sessionParams) val session = packageInstaller.openSession(sessionId) xInstall(sessionId, session, packageName, files)