diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index dfdf115e20b3d..0c4eaec32ba52 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -88,7 +88,6 @@ import java.util.List; import java.util.Set; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.Supplier; @@ -189,7 +188,6 @@ public class StagingManager { * Validates the signature used to sign the container of the new apex package * * @param newApexPkg The new apex package that is being installed - * @throws PackageManagerException */ private void validateApexSignature(PackageInfo newApexPkg) throws PackageManagerException { @@ -725,12 +723,9 @@ public class StagingManager { return ret; } - @NonNull private PackageInstallerSession createAndWriteApkSession( - @NonNull PackageInstallerSession originalSession, boolean preReboot) - throws PackageManagerException { - final int errorCode = preReboot ? SessionInfo.STAGED_SESSION_VERIFICATION_FAILED - : SessionInfo.STAGED_SESSION_ACTIVATION_FAILED; + PackageInstallerSession originalSession) throws PackageManagerException { + final int errorCode = SessionInfo.STAGED_SESSION_ACTIVATION_FAILED; if (originalSession.stageDir == null) { Slog.wtf(TAG, "Attempting to install a staged APK session with no staging dir"); throw new PackageManagerException(errorCode, @@ -746,12 +741,7 @@ public class StagingManager { PackageInstaller.SessionParams params = originalSession.params.copy(); params.isStaged = false; params.installFlags |= PackageManager.INSTALL_STAGED; - if (preReboot) { - params.installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK; - params.installFlags |= PackageManager.INSTALL_DRY_RUN; - } else { - params.installFlags |= PackageManager.INSTALL_DISABLE_VERIFICATION; - } + params.installFlags |= PackageManager.INSTALL_DISABLE_VERIFICATION; try { int apkSessionId = mPi.createSession( params, originalSession.getInstallerPackageName(), @@ -783,12 +773,10 @@ public class StagingManager { * apks in the given session. Only parent session is returned for multi-package session. */ @Nullable - private PackageInstallerSession extractApksInSession(PackageInstallerSession session, - boolean preReboot) throws PackageManagerException { - final int errorCode = preReboot ? SessionInfo.STAGED_SESSION_VERIFICATION_FAILED - : SessionInfo.STAGED_SESSION_ACTIVATION_FAILED; + private PackageInstallerSession extractApksInSession(PackageInstallerSession session) + throws PackageManagerException { if (!session.isMultiPackage() && !isApexSession(session)) { - return createAndWriteApkSession(session, preReboot); + return createAndWriteApkSession(session); } else if (session.isMultiPackage()) { // For multi-package staged sessions containing APKs, we identify which child sessions // contain an APK, and with those then create a new multi-package group of sessions, @@ -810,10 +798,6 @@ public class StagingManager { } final PackageInstaller.SessionParams params = session.params.copy(); params.isStaged = false; - if (preReboot) { - params.installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK; - params.installFlags |= PackageManager.INSTALL_DRY_RUN; - } final int apkParentSessionId = mPi.createSession( params, session.getInstallerPackageName(), session.getInstallerAttributionTag(), session.userId); @@ -823,18 +807,18 @@ public class StagingManager { } catch (IOException e) { Slog.e(TAG, "Unable to prepare multi-package session for staged session " + session.sessionId); - throw new PackageManagerException(errorCode, + throw new PackageManagerException(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED, "Unable to prepare multi-package session for staged session"); } for (int i = 0, size = childSessions.size(); i < size; i++) { final PackageInstallerSession apkChildSession = createAndWriteApkSession( - childSessions.get(i), preReboot); + childSessions.get(i)); try { apkParentSession.addChildSessionId(apkChildSession.sessionId); } catch (IllegalStateException e) { Slog.e(TAG, "Failed to add a child session for installing the APK files", e); - throw new PackageManagerException(errorCode, + throw new PackageManagerException(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED, "Failed to add a child session " + apkChildSession.sessionId); } } @@ -877,11 +861,9 @@ public class StagingManager { } } - private void installApksInSession(@NonNull PackageInstallerSession session) + private void installApksInSession(PackageInstallerSession session) throws PackageManagerException { - - final PackageInstallerSession apksToInstall = extractApksInSession( - session, /* preReboot */ false); + final PackageInstallerSession apksToInstall = extractApksInSession(session); if (apksToInstall == null) { return; } @@ -1047,7 +1029,7 @@ public class StagingManager { /** *
Abort committed staged session * - *
This method must be called while holding {@link PackageInstallerSession.mLock}. + *
This method must be called while holding {@link PackageInstallerSession#mLock}. * *
The method returns {@code false} to indicate it is not safe to clean up the session from
* system yet. When it is safe, the method returns {@code true}.
@@ -1218,7 +1200,7 @@ public class StagingManager {
}
}
- void markStagedSessionsAsSuccessful() {
+ private void markStagedSessionsAsSuccessful() {
synchronized (mSuccessfulStagedSessionIds) {
for (int i = 0; i < mSuccessfulStagedSessionIds.size(); i++) {
mApexManager.markStagedSessionSuccessful(mSuccessfulStagedSessionIds.get(i));
@@ -1242,30 +1224,10 @@ public class StagingManager {
mFailureReasonFile.delete();
}
- private static class LocalIntentReceiverAsync {
- final Consumer