SessionInstaller: Clear enqueued installs properly
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -57,6 +57,28 @@ class SessionInstaller @Inject constructor(
|
|||||||
private val packageInstaller = context.packageManager.packageInstaller
|
private val packageInstaller = context.packageManager.packageInstaller
|
||||||
private val sessionIdMap = mutableMapOf<Int, String>()
|
private val sessionIdMap = mutableMapOf<Int, String>()
|
||||||
|
|
||||||
|
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 (sessionId in sessionIdMap.keys) {
|
||||||
|
sessionIdMap.remove(sessionId)
|
||||||
|
if (sessionIdMap.isNotEmpty() && success) {
|
||||||
|
val nextSession = sessionIdMap.keys.first()
|
||||||
|
commitInstall(sessionIdMap.getValue(nextSession), nextSession)
|
||||||
|
} else {
|
||||||
|
packageInstaller.unregisterSessionCallback(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
fun getInstallerInfo(context: Context): InstallerInfo {
|
fun getInstallerInfo(context: Context): InstallerInfo {
|
||||||
@@ -69,6 +91,10 @@ class SessionInstaller @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
runOnUiThread { packageInstaller.registerSessionCallback(callback) }
|
||||||
|
}
|
||||||
|
|
||||||
override fun install(download: Download) {
|
override fun install(download: Download) {
|
||||||
super.install(download)
|
super.install(download)
|
||||||
|
|
||||||
@@ -77,28 +103,6 @@ class SessionInstaller @Inject constructor(
|
|||||||
} else {
|
} else {
|
||||||
Log.i("Received session install request for ${download.packageName}")
|
Log.i("Received session install request for ${download.packageName}")
|
||||||
|
|
||||||
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 (sessionId in sessionIdMap.keys && success) {
|
|
||||||
sessionIdMap.remove(sessionId)
|
|
||||||
if (sessionIdMap.isNotEmpty()) {
|
|
||||||
val nextSession = sessionIdMap.keys.first()
|
|
||||||
commitInstall(sessionIdMap.getValue(nextSession), nextSession)
|
|
||||||
} else {
|
|
||||||
packageInstaller.unregisterSessionCallback(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
download.sharedLibs.forEach {
|
download.sharedLibs.forEach {
|
||||||
// Shared library packages cannot be updated
|
// Shared library packages cannot be updated
|
||||||
if (!isSharedLibraryInstalled(context, it.packageName, it.versionCode)) {
|
if (!isSharedLibraryInstalled(context, it.packageName, it.versionCode)) {
|
||||||
@@ -107,10 +111,6 @@ class SessionInstaller @Inject constructor(
|
|||||||
}
|
}
|
||||||
stageInstall(download.packageName, download.versionCode)
|
stageInstall(download.packageName, download.versionCode)
|
||||||
|
|
||||||
if (sessionIdMap.size > 1) {
|
|
||||||
runOnUiThread { packageInstaller.registerSessionCallback(callback) }
|
|
||||||
}
|
|
||||||
|
|
||||||
commitInstall(
|
commitInstall(
|
||||||
sessionIdMap.getValue(sessionIdMap.keys.first()),
|
sessionIdMap.getValue(sessionIdMap.keys.first()),
|
||||||
sessionIdMap.keys.first()
|
sessionIdMap.keys.first()
|
||||||
|
|||||||
Reference in New Issue
Block a user