diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java index 1b1e06a9a92f7..f74142f6207bd 100644 --- a/services/core/java/android/content/pm/PackageManagerInternal.java +++ b/services/core/java/android/content/pm/PackageManagerInternal.java @@ -858,6 +858,13 @@ public abstract class PackageManagerInternal { public static final String EXTRA_ENABLE_ROLLBACK_USER = "android.content.pm.extra.ENABLE_ROLLBACK_USER"; + /** + * Extra field name for the session id of a request to enable rollback + * for a package. + */ + public static final String EXTRA_ENABLE_ROLLBACK_SESSION_ID = + "android.content.pm.extra.ENABLE_ROLLBACK_SESSION_ID"; + /** * Used as the {@code enableRollbackCode} argument for * {@link PackageManagerInternal#setEnableRollbackCode} to indicate that diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 41988d6c57866..5cc5059613a8b 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -1689,8 +1689,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } mRelinquished = true; - return new PackageManagerService.ActiveInstallSession(mPackageName, stageDir, - localObserver, params, mInstallerUid, mInstallSource, user, mSigningDetails); + return new PackageManagerService.ActiveInstallSession(mPackageName, stageDir, localObserver, + sessionId, params, mInstallerUid, mInstallSource, user, mSigningDetails); } private static void maybeRenameFile(File from, File to) throws PackageManagerException { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index f714af03336f7..59e9c2e6701f9 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -1967,6 +1967,7 @@ public class PackageManagerService extends IPackageManager.Stub } case ENABLE_ROLLBACK_TIMEOUT: { final int enableRollbackToken = msg.arg1; + final int sessionId = msg.arg2; final InstallParams params = mPendingEnableRollback.get(enableRollbackToken); if (params != null) { final InstallArgs args = params.mArgs; @@ -1984,6 +1985,9 @@ public class PackageManagerService extends IPackageManager.Stub rollbackTimeoutIntent.putExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_TOKEN, enableRollbackToken); + rollbackTimeoutIntent.putExtra( + PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_SESSION_ID, + sessionId); rollbackTimeoutIntent.addFlags( Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); mContext.sendBroadcastAsUser(rollbackTimeoutIntent, UserHandle.SYSTEM, @@ -14243,6 +14247,7 @@ public class PackageManagerService extends IPackageManager.Stub final long requiredInstalledVersionCode; final boolean forceQueryableOverride; final int mDataLoaderType; + final int mSessionId; InstallParams(OriginInfo origin, MoveInfo move, IPackageInstallObserver2 observer, int installFlags, InstallSource installSource, String volumeUuid, @@ -14266,6 +14271,7 @@ public class PackageManagerService extends IPackageManager.Stub this.requiredInstalledVersionCode = requiredInstalledVersionCode; this.forceQueryableOverride = false; this.mDataLoaderType = dataLoaderType; + this.mSessionId = -1; } InstallParams(ActiveInstallSession activeInstallSession) { @@ -14301,6 +14307,7 @@ public class PackageManagerService extends IPackageManager.Stub forceQueryableOverride = sessionParams.forceQueryableOverride; mDataLoaderType = (sessionParams.dataLoaderParams != null) ? sessionParams.dataLoaderParams.getType() : DataLoaderType.NONE; + mSessionId = activeInstallSession.getSessionId(); } @Override @@ -14537,6 +14544,9 @@ public class PackageManagerService extends IPackageManager.Stub enableRollbackIntent.putExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_USER, getRollbackUser().getIdentifier()); + enableRollbackIntent.putExtra( + PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_SESSION_ID, + mSessionId); enableRollbackIntent.setDataAndType(Uri.fromFile(new File(origin.resolvedPath)), PACKAGE_MIME_TYPE); enableRollbackIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); @@ -14564,6 +14574,7 @@ public class PackageManagerService extends IPackageManager.Stub final Message msg = mHandler.obtainMessage( ENABLE_ROLLBACK_TIMEOUT); msg.arg1 = enableRollbackToken; + msg.arg2 = mSessionId; mHandler.sendMessageDelayed(msg, rollbackTimeout); } }, null, 0, null, null); @@ -24573,6 +24584,7 @@ public class PackageManagerService extends IPackageManager.Stub private final String mPackageName; private final File mStagedDir; private final IPackageInstallObserver2 mObserver; + private final int mSessionId; private final PackageInstaller.SessionParams mSessionParams; private final int mInstallerUid; @NonNull private final InstallSource mInstallSource; @@ -24580,11 +24592,12 @@ public class PackageManagerService extends IPackageManager.Stub private final SigningDetails mSigningDetails; ActiveInstallSession(String packageName, File stagedDir, IPackageInstallObserver2 observer, - PackageInstaller.SessionParams sessionParams, int installerUid, + int sessionId, PackageInstaller.SessionParams sessionParams, int installerUid, InstallSource installSource, UserHandle user, SigningDetails signingDetails) { mPackageName = packageName; mStagedDir = stagedDir; mObserver = observer; + mSessionId = sessionId; mSessionParams = sessionParams; mInstallerUid = installerUid; mInstallSource = Preconditions.checkNotNull(installSource); @@ -24604,6 +24617,10 @@ public class PackageManagerService extends IPackageManager.Stub return mObserver; } + public int getSessionId() { + return mSessionId; + } + public PackageInstaller.SessionParams getSessionParams() { return mSessionParams; }