SessionInstaller: minor improvements

-- also fixes https://gitlab.com/AuroraOSS/AuroraStore/-/issues/1151
This commit is contained in:
Rahul Patel
2025-02-25 23:09:07 +05:30
parent 49d6c95405
commit 76b6551247

View File

@@ -93,23 +93,31 @@ class SessionInstaller @Inject constructor(
} }
override fun onFinished(sessionId: Int, success: Boolean) { override fun onFinished(sessionId: Int, success: Boolean) {
enqueuedSessions.find { set -> set.any { it.sessionId == sessionId } } val sessionSet =
?.let { sessionSet -> enqueuedSessions.find { it.any { session -> session.sessionId == sessionId } }
sessionSet.remove(sessionSet.first { it.sessionId == sessionId }) ?: return
// If this was a shared lib, proceed installing other libs or actual package // Find session safely, if not found return
if (sessionSet.isNotEmpty() && success) { val sessionToRemove = sessionSet.firstOrNull { it.sessionId == sessionId } ?: return
commitInstall(sessionSet.first()); return
} else {
enqueuedSessions.remove(sessionSet)
}
}
if (enqueuedSessions.isNotEmpty()) { // Remove the session safely
enqueuedSessions.firstOrNull()?.let { sessionSet -> sessionSet.remove(sessionToRemove)
commitInstall(sessionSet.first())
if (success && sessionSet.isNotEmpty()) {
commitInstall(sessionSet.first()) // Proceed with next session (shared lib), if any
return
}
// Manually remove empty sets using iterator (for API 21 support)
val iterator = enqueuedSessions.iterator()
while (iterator.hasNext()) {
if (iterator.next().isEmpty()) {
iterator.remove()
} }
} }
// Proceed with the next available session
enqueuedSessions.firstOrNull()?.firstOrNull()?.let(::commitInstall)
} }
} }
@@ -233,9 +241,25 @@ class SessionInstaller @Inject constructor(
private fun commitInstall(sessionInfo: SessionInfo) { private fun commitInstall(sessionInfo: SessionInfo) {
Log.i(TAG, "Starting install session for ${sessionInfo.packageName}") Log.i(TAG, "Starting install session for ${sessionInfo.packageName}")
val session = packageInstaller.openSession(sessionInfo.sessionId)
session.commit(getCallBackIntent(sessionInfo)!!.intentSender) val sessionId = sessionInfo.sessionId
session.close() packageInstaller.getSessionInfo(sessionId) ?: run {
Log.e(TAG, "Session $sessionId is no longer valid, skipping commit.")
removeFromInstallQueue(sessionInfo.packageName)
return
}
try {
val session = packageInstaller.openSession(sessionId)
session.commit(getCallBackIntent(sessionInfo)!!.intentSender)
session.close()
} catch (e: SecurityException) {
Log.e(TAG, "Failed to commit session $sessionId: ${e.message}")
removeFromInstallQueue(sessionInfo.packageName)
} catch (e: Exception) {
Log.e(TAG, "Unexpected error in commitInstall for session $sessionId", e)
removeFromInstallQueue(sessionInfo.packageName)
}
} }
private fun getCallBackIntent(sessionInfo: SessionInfo): PendingIntent? { private fun getCallBackIntent(sessionInfo: SessionInfo): PendingIntent? {