InstallActivity: Use SessionInstaller with callback to install apps

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-12-28 13:41:39 +05:30
parent 494c86c200
commit 48b61f1bad
2 changed files with 38 additions and 21 deletions

View File

@@ -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()
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()
}
}
}

View File

@@ -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<Int>()
override fun install(packageName: String, files: List<Any>) {
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)