summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Narayan Kamath <narayan@google.com> 2019-01-04 10:47:00 +0000
committer Narayan Kamath <narayan@google.com> 2019-01-04 11:10:31 +0000
commit94c93ab7cd7db5c1eea7226a54702fad451a80d3 (patch)
treef9a8564c7cc4e81ad0d67a217bea3d07ed4fe42f
parent2b9930d0b74280db8bc43fd622b1e8c2ad1c45d6 (diff)
StagingManager: Make commitSession async.
Post to the system servers shared B/G handler. Test: m, atest apex_e2e_tests Change-Id: I9e087f57a0f194951b6993403ad81c5b60018d8e
-rw-r--r--services/core/java/com/android/server/pm/StagingManager.java23
1 files changed, 15 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java
index 223f99e5c3f0..3beda6a3f92b 100644
--- a/services/core/java/com/android/server/pm/StagingManager.java
+++ b/services/core/java/com/android/server/pm/StagingManager.java
@@ -19,9 +19,11 @@ package com.android.server.pm;
import android.annotation.NonNull;
import android.content.pm.PackageInstaller;
import android.content.pm.ParceledListSlice;
+import android.os.Handler;
import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.os.BackgroundThread;
import java.util.ArrayList;
import java.util.List;
@@ -35,6 +37,7 @@ public class StagingManager {
private static final String TAG = "StagingManager";
private final PackageManagerService mPm;
+ private final Handler mBgHandler;
// STOPSHIP: This is a temporary mock implementation of staged sessions. This variable
// shouldn't be needed at all.
@@ -44,16 +47,17 @@ public class StagingManager {
StagingManager(PackageManagerService pm) {
mPm = pm;
+ mBgHandler = BackgroundThread.getHandler();
}
private void updateStoredSession(@NonNull PackageInstallerSession sessionInfo) {
synchronized (mStagedSessions) {
PackageInstallerSession storedSession = mStagedSessions.get(sessionInfo.sessionId);
- if (storedSession == null) {
- throw new IllegalStateException("Attempting to change state of a session not "
- + "known to StagingManager");
+ // storedSession might be null if a call to abortSession was made before the session
+ // is updated.
+ if (storedSession != null) {
+ mStagedSessions.put(sessionInfo.sessionId, sessionInfo);
}
- mStagedSessions.put(sessionInfo.sessionId, sessionInfo);
}
}
@@ -69,10 +73,13 @@ public class StagingManager {
void commitSession(@NonNull PackageInstallerSession sessionInfo) {
updateStoredSession(sessionInfo);
- // TODO(b/118865310): Dispatch the session to apexd/PackageManager for verification. For
- // now we directly mark it as ready.
- sessionInfo.setStagedSessionReady();
- mPm.sendSessionUpdatedBroadcast(sessionInfo.generateInfo(), sessionInfo.userId);
+
+ mBgHandler.post(() -> {
+ // TODO(b/118865310): Dispatch the session to apexd/PackageManager for verification. For
+ // now we directly mark it as ready.
+ sessionInfo.setStagedSessionReady();
+ mPm.sendSessionUpdatedBroadcast(sessionInfo.generateInfo(), sessionInfo.userId);
+ });
}
void createSession(@NonNull PackageInstallerSession sessionInfo) {