Loading core/api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -3860,6 +3860,7 @@ package android.content.pm { method public void setInstallAsInstantApp(boolean); method public void setInstallAsVirtualPreload(); method public void setRequestDowngrade(boolean); method @FlaggedApi("android.content.pm.rollback_lifetime") @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public void setRollbackLifetimeMillis(long); method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged(); } core/java/android/content/pm/PackageInstaller.java +39 −6 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.CurrentTimeMillisLong; import android.annotation.DurationMillisLong; import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -2370,6 +2371,8 @@ public class PackageInstaller { public DataLoaderParams dataLoaderParams; /** {@hide} */ public int rollbackDataPolicy = PackageManager.ROLLBACK_DATA_POLICY_RESTORE; /** @hide */ public long rollbackLifetimeMillis = 0; /** {@hide} */ public boolean forceQueryableOverride; /** {@hide} */ Loading Loading @@ -2424,6 +2427,7 @@ public class PackageInstaller { dataLoaderParams = new DataLoaderParams(dataLoaderParamsParcel); } rollbackDataPolicy = source.readInt(); rollbackLifetimeMillis = source.readLong(); requireUserAction = source.readInt(); packageSource = source.readInt(); applicationEnabledSettingPersistent = source.readBoolean(); Loading Loading @@ -2456,6 +2460,7 @@ public class PackageInstaller { ret.requiredInstalledVersionCode = requiredInstalledVersionCode; ret.dataLoaderParams = dataLoaderParams; ret.rollbackDataPolicy = rollbackDataPolicy; ret.rollbackLifetimeMillis = rollbackLifetimeMillis; ret.requireUserAction = requireUserAction; ret.packageSource = packageSource; ret.applicationEnabledSettingPersistent = applicationEnabledSettingPersistent; Loading Loading @@ -2737,12 +2742,7 @@ public class PackageInstaller { */ @SystemApi public void setEnableRollback(boolean enable) { if (enable) { installFlags |= PackageManager.INSTALL_ENABLE_ROLLBACK; } else { installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK; } rollbackDataPolicy = PackageManager.ROLLBACK_DATA_POLICY_RESTORE; setEnableRollback(enable, PackageManager.ROLLBACK_DATA_POLICY_RESTORE); } /** Loading @@ -2766,10 +2766,36 @@ public class PackageInstaller { installFlags |= PackageManager.INSTALL_ENABLE_ROLLBACK; } else { installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK; rollbackLifetimeMillis = 0; } rollbackDataPolicy = dataPolicy; } /** * If rollback enabled for this session (via {@link #setEnableRollback}, set time * after which rollback will no longer be possible * * <p>For multi-package installs, this value must be set on the parent session. * Child session rollback lifetime will be ignored. * * @param lifetimeMillis time after which rollback expires * @throws IllegalArgumentException if lifetimeMillis is negative or rollback is not * enabled via setEnableRollback. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) @FlaggedApi(Flags.FLAG_ROLLBACK_LIFETIME) public void setRollbackLifetimeMillis(@DurationMillisLong long lifetimeMillis) { if (lifetimeMillis < 0) { throw new IllegalArgumentException("rollbackLifetimeMillis can't be negative."); } if ((installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) == 0) { throw new IllegalArgumentException( "Can't set rollbackLifetimeMillis when rollback is not enabled"); } rollbackLifetimeMillis = lifetimeMillis; } /** * @deprecated use {@link #setRequestDowngrade(boolean)}. Loading Loading @@ -3124,6 +3150,7 @@ public class PackageInstaller { pw.printPair("requiredInstalledVersionCode", requiredInstalledVersionCode); pw.printPair("dataLoaderParams", dataLoaderParams); pw.printPair("rollbackDataPolicy", rollbackDataPolicy); pw.printPair("rollbackLifetimeMillis", rollbackLifetimeMillis); pw.printPair("applicationEnabledSettingPersistent", applicationEnabledSettingPersistent); pw.printHexPair("developmentInstallFlags", developmentInstallFlags); Loading Loading @@ -3165,6 +3192,7 @@ public class PackageInstaller { dest.writeParcelable(null, flags); } dest.writeInt(rollbackDataPolicy); dest.writeLong(rollbackLifetimeMillis); dest.writeInt(requireUserAction); dest.writeInt(packageSource); dest.writeBoolean(applicationEnabledSettingPersistent); Loading Loading @@ -3358,6 +3386,9 @@ public class PackageInstaller { /** {@hide} */ public int rollbackDataPolicy; /** @hide */ public long rollbackLifetimeMillis; /** {@hide} */ public int requireUserAction; Loading Loading @@ -3425,6 +3456,7 @@ public class PackageInstaller { isCommitted = source.readBoolean(); isPreapprovalRequested = source.readBoolean(); rollbackDataPolicy = source.readInt(); rollbackLifetimeMillis = source.readLong(); createdMillis = source.readLong(); requireUserAction = source.readInt(); installerUid = source.readInt(); Loading Loading @@ -4048,6 +4080,7 @@ public class PackageInstaller { dest.writeBoolean(isCommitted); dest.writeBoolean(isPreapprovalRequested); dest.writeInt(rollbackDataPolicy); dest.writeLong(rollbackLifetimeMillis); dest.writeLong(createdMillis); dest.writeInt(requireUserAction); dest.writeInt(installerUid); Loading core/java/android/content/pm/flags.aconfig +8 −0 Original line number Diff line number Diff line Loading @@ -6,3 +6,11 @@ flag { description: "Feature flag to enable the features that rely on new ART Service APIs that are in the VIC version of the ART module." bug: "304741685" } flag { name: "rollback_lifetime" namespace: "package_manager_service" description: "Feature flag to enable custom rollback lifetime during install." bug: "299670324" is_fixed_read_only: true } services/core/java/com/android/server/pm/PackageInstallerService.java +17 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.content.Intent; import android.content.IntentSender; import android.content.IntentSender.SendIntentException; import android.content.pm.ApplicationInfo; import android.content.pm.Flags; import android.content.pm.IPackageInstaller; import android.content.pm.IPackageInstallerCallback; import android.content.pm.IPackageInstallerSession; Loading Loading @@ -745,6 +746,22 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements params.installFlags &= ~PackageManager.INSTALL_DISABLE_VERIFICATION; } if (Flags.rollbackLifetime()) { if (params.rollbackLifetimeMillis > 0) { if ((params.installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) == 0) { throw new IllegalArgumentException( "Can't set rollbackLifetimeMillis when rollback is not enabled"); } if (mContext.checkCallingOrSelfPermission(Manifest.permission.MANAGE_ROLLBACKS) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException( "Setting rollback lifetime requires the MANAGE_ROLLBACKS permission"); } } else if (params.rollbackLifetimeMillis < 0) { throw new IllegalArgumentException("rollbackLifetimeMillis can't be negative."); } } boolean isApex = (params.installFlags & PackageManager.INSTALL_APEX) != 0; if (isApex) { if (mContext.checkCallingOrSelfPermission(Manifest.permission.INSTALL_PACKAGE_UPDATES) Loading services/core/java/com/android/server/pm/PackageInstallerSession.java +1 −0 Original line number Diff line number Diff line Loading @@ -1206,6 +1206,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { info.whitelistedRestrictedPermissions = params.whitelistedRestrictedPermissions; info.autoRevokePermissionsMode = params.autoRevokePermissionsMode; info.installFlags = params.installFlags; info.rollbackLifetimeMillis = params.rollbackLifetimeMillis; info.isMultiPackage = params.isMultiPackage; info.isStaged = params.isStaged; info.rollbackDataPolicy = params.rollbackDataPolicy; Loading Loading
core/api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -3860,6 +3860,7 @@ package android.content.pm { method public void setInstallAsInstantApp(boolean); method public void setInstallAsVirtualPreload(); method public void setRequestDowngrade(boolean); method @FlaggedApi("android.content.pm.rollback_lifetime") @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public void setRollbackLifetimeMillis(long); method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged(); }
core/java/android/content/pm/PackageInstaller.java +39 −6 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.CurrentTimeMillisLong; import android.annotation.DurationMillisLong; import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -2370,6 +2371,8 @@ public class PackageInstaller { public DataLoaderParams dataLoaderParams; /** {@hide} */ public int rollbackDataPolicy = PackageManager.ROLLBACK_DATA_POLICY_RESTORE; /** @hide */ public long rollbackLifetimeMillis = 0; /** {@hide} */ public boolean forceQueryableOverride; /** {@hide} */ Loading Loading @@ -2424,6 +2427,7 @@ public class PackageInstaller { dataLoaderParams = new DataLoaderParams(dataLoaderParamsParcel); } rollbackDataPolicy = source.readInt(); rollbackLifetimeMillis = source.readLong(); requireUserAction = source.readInt(); packageSource = source.readInt(); applicationEnabledSettingPersistent = source.readBoolean(); Loading Loading @@ -2456,6 +2460,7 @@ public class PackageInstaller { ret.requiredInstalledVersionCode = requiredInstalledVersionCode; ret.dataLoaderParams = dataLoaderParams; ret.rollbackDataPolicy = rollbackDataPolicy; ret.rollbackLifetimeMillis = rollbackLifetimeMillis; ret.requireUserAction = requireUserAction; ret.packageSource = packageSource; ret.applicationEnabledSettingPersistent = applicationEnabledSettingPersistent; Loading Loading @@ -2737,12 +2742,7 @@ public class PackageInstaller { */ @SystemApi public void setEnableRollback(boolean enable) { if (enable) { installFlags |= PackageManager.INSTALL_ENABLE_ROLLBACK; } else { installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK; } rollbackDataPolicy = PackageManager.ROLLBACK_DATA_POLICY_RESTORE; setEnableRollback(enable, PackageManager.ROLLBACK_DATA_POLICY_RESTORE); } /** Loading @@ -2766,10 +2766,36 @@ public class PackageInstaller { installFlags |= PackageManager.INSTALL_ENABLE_ROLLBACK; } else { installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK; rollbackLifetimeMillis = 0; } rollbackDataPolicy = dataPolicy; } /** * If rollback enabled for this session (via {@link #setEnableRollback}, set time * after which rollback will no longer be possible * * <p>For multi-package installs, this value must be set on the parent session. * Child session rollback lifetime will be ignored. * * @param lifetimeMillis time after which rollback expires * @throws IllegalArgumentException if lifetimeMillis is negative or rollback is not * enabled via setEnableRollback. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) @FlaggedApi(Flags.FLAG_ROLLBACK_LIFETIME) public void setRollbackLifetimeMillis(@DurationMillisLong long lifetimeMillis) { if (lifetimeMillis < 0) { throw new IllegalArgumentException("rollbackLifetimeMillis can't be negative."); } if ((installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) == 0) { throw new IllegalArgumentException( "Can't set rollbackLifetimeMillis when rollback is not enabled"); } rollbackLifetimeMillis = lifetimeMillis; } /** * @deprecated use {@link #setRequestDowngrade(boolean)}. Loading Loading @@ -3124,6 +3150,7 @@ public class PackageInstaller { pw.printPair("requiredInstalledVersionCode", requiredInstalledVersionCode); pw.printPair("dataLoaderParams", dataLoaderParams); pw.printPair("rollbackDataPolicy", rollbackDataPolicy); pw.printPair("rollbackLifetimeMillis", rollbackLifetimeMillis); pw.printPair("applicationEnabledSettingPersistent", applicationEnabledSettingPersistent); pw.printHexPair("developmentInstallFlags", developmentInstallFlags); Loading Loading @@ -3165,6 +3192,7 @@ public class PackageInstaller { dest.writeParcelable(null, flags); } dest.writeInt(rollbackDataPolicy); dest.writeLong(rollbackLifetimeMillis); dest.writeInt(requireUserAction); dest.writeInt(packageSource); dest.writeBoolean(applicationEnabledSettingPersistent); Loading Loading @@ -3358,6 +3386,9 @@ public class PackageInstaller { /** {@hide} */ public int rollbackDataPolicy; /** @hide */ public long rollbackLifetimeMillis; /** {@hide} */ public int requireUserAction; Loading Loading @@ -3425,6 +3456,7 @@ public class PackageInstaller { isCommitted = source.readBoolean(); isPreapprovalRequested = source.readBoolean(); rollbackDataPolicy = source.readInt(); rollbackLifetimeMillis = source.readLong(); createdMillis = source.readLong(); requireUserAction = source.readInt(); installerUid = source.readInt(); Loading Loading @@ -4048,6 +4080,7 @@ public class PackageInstaller { dest.writeBoolean(isCommitted); dest.writeBoolean(isPreapprovalRequested); dest.writeInt(rollbackDataPolicy); dest.writeLong(rollbackLifetimeMillis); dest.writeLong(createdMillis); dest.writeInt(requireUserAction); dest.writeInt(installerUid); Loading
core/java/android/content/pm/flags.aconfig +8 −0 Original line number Diff line number Diff line Loading @@ -6,3 +6,11 @@ flag { description: "Feature flag to enable the features that rely on new ART Service APIs that are in the VIC version of the ART module." bug: "304741685" } flag { name: "rollback_lifetime" namespace: "package_manager_service" description: "Feature flag to enable custom rollback lifetime during install." bug: "299670324" is_fixed_read_only: true }
services/core/java/com/android/server/pm/PackageInstallerService.java +17 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.content.Intent; import android.content.IntentSender; import android.content.IntentSender.SendIntentException; import android.content.pm.ApplicationInfo; import android.content.pm.Flags; import android.content.pm.IPackageInstaller; import android.content.pm.IPackageInstallerCallback; import android.content.pm.IPackageInstallerSession; Loading Loading @@ -745,6 +746,22 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements params.installFlags &= ~PackageManager.INSTALL_DISABLE_VERIFICATION; } if (Flags.rollbackLifetime()) { if (params.rollbackLifetimeMillis > 0) { if ((params.installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) == 0) { throw new IllegalArgumentException( "Can't set rollbackLifetimeMillis when rollback is not enabled"); } if (mContext.checkCallingOrSelfPermission(Manifest.permission.MANAGE_ROLLBACKS) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException( "Setting rollback lifetime requires the MANAGE_ROLLBACKS permission"); } } else if (params.rollbackLifetimeMillis < 0) { throw new IllegalArgumentException("rollbackLifetimeMillis can't be negative."); } } boolean isApex = (params.installFlags & PackageManager.INSTALL_APEX) != 0; if (isApex) { if (mContext.checkCallingOrSelfPermission(Manifest.permission.INSTALL_PACKAGE_UPDATES) Loading
services/core/java/com/android/server/pm/PackageInstallerSession.java +1 −0 Original line number Diff line number Diff line Loading @@ -1206,6 +1206,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { info.whitelistedRestrictedPermissions = params.whitelistedRestrictedPermissions; info.autoRevokePermissionsMode = params.autoRevokePermissionsMode; info.installFlags = params.installFlags; info.rollbackLifetimeMillis = params.rollbackLifetimeMillis; info.isMultiPackage = params.isMultiPackage; info.isStaged = params.isStaged; info.rollbackDataPolicy = params.rollbackDataPolicy; Loading