InstallActivity: Use SessionInstaller with callback to install apps
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -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 onResume() {
|
||||
super.onResume()
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user