Add rollback data policy (1/n)
1. Do the plumbing to pass the data policy all the way to SessionInfo. 2. SessionInfo#rollbackDataPolicy will be used by RollbackManager to determine whether to wipe user data when enabling/committing rollback. Bug: 144683152 Test: atest RollbackStoreTest RollbackUnitTest AppDataRollbackHelperTest Test: atest RollbackTest StagedRollbackTest Change-Id: Ie1e5457d0304f9cf8fc34fce17d707be75407a2b
This commit is contained in:
@@ -2042,6 +2042,7 @@ package android.content.pm {
|
||||
method public boolean getInstallAsInstantApp(boolean);
|
||||
method public boolean getInstallAsVirtualPreload();
|
||||
method public boolean getRequestDowngrade();
|
||||
method public int getRollbackDataPolicy();
|
||||
method @NonNull public java.util.Set<java.lang.String> getWhitelistedRestrictedPermissions();
|
||||
}
|
||||
|
||||
@@ -2050,6 +2051,7 @@ package android.content.pm {
|
||||
method @Deprecated public void setAllowDowngrade(boolean);
|
||||
method public void setDontKillApp(boolean);
|
||||
method public void setEnableRollback(boolean);
|
||||
method public void setEnableRollback(boolean, int);
|
||||
method @RequiresPermission(android.Manifest.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS) public void setGrantedRuntimePermissions(String[]);
|
||||
method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setIncrementalParams(@NonNull android.content.pm.DataLoaderParams);
|
||||
method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setInstallAsApex();
|
||||
|
||||
@@ -778,11 +778,13 @@ package android.content.pm {
|
||||
}
|
||||
|
||||
public static class PackageInstaller.SessionInfo implements android.os.Parcelable {
|
||||
method public int getRollbackDataPolicy();
|
||||
method @NonNull public java.util.Set<java.lang.String> getWhitelistedRestrictedPermissions();
|
||||
}
|
||||
|
||||
public static class PackageInstaller.SessionParams implements android.os.Parcelable {
|
||||
method public void setEnableRollback(boolean);
|
||||
method public void setEnableRollback(boolean, int);
|
||||
method @RequiresPermission("android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS") public void setGrantedRuntimePermissions(String[]);
|
||||
method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setInstallAsApex();
|
||||
method public void setInstallerPackageName(@Nullable String);
|
||||
|
||||
@@ -1465,6 +1465,8 @@ public class PackageInstaller {
|
||||
/** TODO(b/146080380): add a class name to make it fully compatible with ComponentName.
|
||||
* {@hide} */
|
||||
public String dataLoaderPackageName;
|
||||
/** {@hide} */
|
||||
public int rollbackDataPolicy = PackageManager.RollbackDataPolicy.RESTORE;
|
||||
|
||||
/**
|
||||
* Construct parameters for a new package install session.
|
||||
@@ -1505,6 +1507,7 @@ public class PackageInstaller {
|
||||
dataLoaderParamsParcel);
|
||||
}
|
||||
dataLoaderPackageName = source.readString();
|
||||
rollbackDataPolicy = source.readInt();
|
||||
}
|
||||
|
||||
/** {@hide} */
|
||||
@@ -1530,6 +1533,7 @@ public class PackageInstaller {
|
||||
ret.requiredInstalledVersionCode = requiredInstalledVersionCode;
|
||||
ret.incrementalParams = incrementalParams;
|
||||
ret.dataLoaderPackageName = dataLoaderPackageName;
|
||||
ret.rollbackDataPolicy = rollbackDataPolicy;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1686,12 +1690,14 @@ public class PackageInstaller {
|
||||
}
|
||||
|
||||
/**
|
||||
* Request that rollbacks be enabled or disabled for the given upgrade.
|
||||
* Request that rollbacks be enabled or disabled for the given upgrade with rollback data
|
||||
* policy set to RESTORE.
|
||||
*
|
||||
* <p>If the parent session is staged or has rollback enabled, all children sessions
|
||||
* must have the same properties.
|
||||
*
|
||||
* @param enable set to {@code true} to enable, {@code false} to disable
|
||||
* @see SessionParams#setEnableRollback(boolean, int)
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi @TestApi
|
||||
@@ -1701,8 +1707,35 @@ public class PackageInstaller {
|
||||
} else {
|
||||
installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK;
|
||||
}
|
||||
rollbackDataPolicy = PackageManager.RollbackDataPolicy.RESTORE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Request that rollbacks be enabled or disabled for the given upgrade.
|
||||
*
|
||||
* <p>If the parent session is staged or has rollback enabled, all children sessions
|
||||
* must have the same properties.
|
||||
*
|
||||
* <p> For a multi-package install, this method must be called on each child session to
|
||||
* specify rollback data policies explicitly. Note each child session is allowed to have
|
||||
* different policies.
|
||||
*
|
||||
* @param enable set to {@code true} to enable, {@code false} to disable
|
||||
* @param dataPolicy the rollback data policy for this session
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi @TestApi
|
||||
public void setEnableRollback(boolean enable,
|
||||
@PackageManager.RollbackDataPolicy int dataPolicy) {
|
||||
if (enable) {
|
||||
installFlags |= PackageManager.INSTALL_ENABLE_ROLLBACK;
|
||||
} else {
|
||||
installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK;
|
||||
}
|
||||
rollbackDataPolicy = dataPolicy;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #setRequestDowngrade(boolean)}.
|
||||
* {@hide}
|
||||
@@ -1906,6 +1939,7 @@ public class PackageInstaller {
|
||||
pw.printPair("isStaged", isStaged);
|
||||
pw.printPair("requiredInstalledVersionCode", requiredInstalledVersionCode);
|
||||
pw.printPair("dataLoaderPackageName", dataLoaderPackageName);
|
||||
pw.printPair("rollbackDataPolicy", rollbackDataPolicy);
|
||||
pw.println();
|
||||
}
|
||||
|
||||
@@ -1941,6 +1975,7 @@ public class PackageInstaller {
|
||||
dest.writeParcelable(null, flags);
|
||||
}
|
||||
dest.writeString(dataLoaderPackageName);
|
||||
dest.writeInt(rollbackDataPolicy);
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<SessionParams>
|
||||
@@ -2077,6 +2112,9 @@ public class PackageInstaller {
|
||||
/** {@hide} */
|
||||
public long updatedMillis;
|
||||
|
||||
/** {@hide} */
|
||||
public int rollbackDataPolicy;
|
||||
|
||||
/** {@hide} */
|
||||
@UnsupportedAppUsage
|
||||
public SessionInfo() {
|
||||
@@ -2120,6 +2158,7 @@ public class PackageInstaller {
|
||||
mStagedSessionErrorCode = source.readInt();
|
||||
mStagedSessionErrorMessage = source.readString();
|
||||
isCommitted = source.readBoolean();
|
||||
rollbackDataPolicy = source.readInt();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2436,6 +2475,17 @@ public class PackageInstaller {
|
||||
return isStaged;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the data policy associated with the rollback for the given upgrade.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi @TestApi
|
||||
@PackageManager.RollbackDataPolicy
|
||||
public int getRollbackDataPolicy() {
|
||||
return rollbackDataPolicy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} if this session is an active staged session.
|
||||
*
|
||||
@@ -2598,6 +2648,7 @@ public class PackageInstaller {
|
||||
dest.writeInt(mStagedSessionErrorCode);
|
||||
dest.writeString(mStagedSessionErrorMessage);
|
||||
dest.writeBoolean(isCommitted);
|
||||
dest.writeInt(rollbackDataPolicy);
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<SessionInfo>
|
||||
|
||||
@@ -709,6 +709,29 @@ public abstract class PackageManager {
|
||||
*/
|
||||
public static final int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4;
|
||||
|
||||
/** @hide */
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef(value = {
|
||||
RollbackDataPolicy.RESTORE,
|
||||
RollbackDataPolicy.WIPE,
|
||||
RollbackDataPolicy.RETAIN
|
||||
})
|
||||
public @interface RollbackDataPolicy {
|
||||
/**
|
||||
* User data will be backed up during install and restored during rollback.
|
||||
*/
|
||||
int RESTORE = 0;
|
||||
/**
|
||||
* User data won't be backed up during install but will be wiped out during rollback.
|
||||
*/
|
||||
int WIPE = 1;
|
||||
/**
|
||||
* User data won't be backed up during install and won't be restored during rollback.
|
||||
* TODO: Not implemented yet.
|
||||
*/
|
||||
int RETAIN = 2;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@IntDef(flag = true, prefix = { "INSTALL_" }, value = {
|
||||
INSTALL_REPLACE_EXISTING,
|
||||
|
||||
@@ -572,6 +572,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
info.installFlags = params.installFlags;
|
||||
info.isMultiPackage = params.isMultiPackage;
|
||||
info.isStaged = params.isStaged;
|
||||
info.rollbackDataPolicy = params.rollbackDataPolicy;
|
||||
info.parentSessionId = mParentSessionId;
|
||||
info.childSessionIds = mChildSessionIds.copyKeys();
|
||||
if (info.childSessionIds == null) {
|
||||
|
||||
Reference in New Issue
Block a user