diff options
| author | 2019-01-04 10:47:00 +0000 | |
|---|---|---|
| committer | 2019-01-04 11:10:31 +0000 | |
| commit | 94c93ab7cd7db5c1eea7226a54702fad451a80d3 (patch) | |
| tree | f9a8564c7cc4e81ad0d67a217bea3d07ed4fe42f | |
| parent | 2b9930d0b74280db8bc43fd622b1e8c2ad1c45d6 (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.java | 23 |
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) { |