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
|
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(
|
|
||||||
packageName,
|
|
||||||
downloadDir.listFiles()!!.filter { it.path.endsWith(".apk") }
|
|
||||||
)
|
|
||||||
} catch (exception: Exception) {
|
|
||||||
Log.e(TAG, "Failed to install $packageName")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onBadgingChanged(sessionId: Int) {}
|
||||||
super.onResume()
|
|
||||||
|
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()
|
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.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)
|
||||||
|
|||||||
Reference in New Issue
Block a user