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 package com.aurora.store.data.activity
import android.app.Activity
import android.content.pm.PackageInstaller
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.aurora.Constants 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 com.aurora.store.util.PathUtil
import java.io.File
class InstallActivity : AppCompatActivity() { class InstallActivity : Activity() {
private val TAG = InstallActivity::class.java.simpleName private val TAG = InstallActivity::class.java.simpleName
private lateinit var packageName: String private lateinit var sessionInstaller: SessionInstaller
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
packageName = intent.extras?.getString(Constants.STRING_APP) ?: String() val packageName = intent.extras?.getString(Constants.STRING_APP) ?: String()
val version = intent.extras?.getInt(Constants.STRING_VERSION) val versionCode = intent.extras?.getInt(Constants.STRING_VERSION)
if (packageName.isNotBlank() && version != null) { if (packageName.isNotBlank() && versionCode != null) {
try { val callback = object : PackageInstaller.SessionCallback() {
val downloadDir = File(PathUtil.getAppDownloadDir(this, packageName, version).path) override fun onCreated(sessionId: Int) {}
AppInstaller.getInstance(this).getPreferredInstaller()
.install( override fun onBadgingChanged(sessionId: Int) {}
packageName,
downloadDir.listFiles()!!.filter { it.path.endsWith(".apk") } override fun onActiveChanged(sessionId: Int, active: Boolean) {}
)
} catch (exception: Exception) { override fun onProgressChanged(sessionId: Int, progress: Float) {}
Log.e(TAG, "Failed to install $packageName")
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() { private fun install(packageName: String, versionCode: Int) {
super.onResume() sessionInstaller = SessionInstaller(this)
finish() 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.isTAndAbove
import com.aurora.extensions.isUAndAbove import com.aurora.extensions.isUAndAbove
import com.aurora.store.util.Log import com.aurora.store.util.Log
import kotlin.properties.Delegates
class SessionInstaller(context: Context) : SessionInstallerBase(context) { class SessionInstaller(context: Context) : SessionInstallerBase(context) {
var sessionId by Delegates.notNull<Int>()
override fun install(packageName: String, files: List<Any>) { override fun install(packageName: String, files: List<Any>) {
if (isAlreadyQueued(packageName)) { if (isAlreadyQueued(packageName)) {
Log.i("$packageName already queued") 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) val session = packageInstaller.openSession(sessionId)
xInstall(sessionId, session, packageName, files) xInstall(sessionId, session, packageName, files)