diff --git a/core/java/android/content/rollback/RollbackInfo.java b/core/java/android/content/rollback/RollbackInfo.java index 3fd247670a9d3..0cde6ba38099a 100644 --- a/core/java/android/content/rollback/RollbackInfo.java +++ b/core/java/android/content/rollback/RollbackInfo.java @@ -22,6 +22,7 @@ import android.content.pm.VersionedPackage; import android.os.Parcel; import android.os.Parcelable; +import java.util.Collections; import java.util.List; /** @@ -42,18 +43,31 @@ public final class RollbackInfo implements Parcelable { private final List mCausePackages; + private final boolean mIsStaged; + private final int mCommittedSessionId; + /** @hide */ - public RollbackInfo(int rollbackId, List packages, - List causePackages) { + public RollbackInfo(int rollbackId, List packages, boolean isStaged) { + this(rollbackId, packages, isStaged, Collections.emptyList(), + PackageInstaller.SessionInfo.INVALID_ID); + } + + /** @hide */ + public RollbackInfo(int rollbackId, List packages, boolean isStaged, + List causePackages, int committedSessionId) { this.mRollbackId = rollbackId; this.mPackages = packages; + this.mIsStaged = isStaged; this.mCausePackages = causePackages; + this.mCommittedSessionId = committedSessionId; } private RollbackInfo(Parcel in) { mRollbackId = in.readInt(); mPackages = in.createTypedArrayList(PackageRollbackInfo.CREATOR); + mIsStaged = in.readBoolean(); mCausePackages = in.createTypedArrayList(VersionedPackage.CREATOR); + mCommittedSessionId = in.readInt(); } /** @@ -75,8 +89,7 @@ public final class RollbackInfo implements Parcelable { * being committed. */ public boolean isStaged() { - // TODO: Support rollback of staged installs. - return false; + return mIsStaged; } /** @@ -84,8 +97,7 @@ public final class RollbackInfo implements Parcelable { * Only applicable for rollbacks that have been committed. */ public int getCommittedSessionId() { - // TODO: Support rollback of staged installs. - return PackageInstaller.SessionInfo.INVALID_ID; + return mCommittedSessionId; } /** @@ -106,7 +118,9 @@ public final class RollbackInfo implements Parcelable { public void writeToParcel(Parcel out, int flags) { out.writeInt(mRollbackId); out.writeTypedList(mPackages); + out.writeBoolean(mIsStaged); out.writeTypedList(mCausePackages); + out.writeInt(mCommittedSessionId); } public static final Parcelable.Creator CREATOR = diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index 99c14c9376341..f5b37b4bc4b5a 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -54,7 +54,6 @@ import java.security.SecureRandom; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -210,8 +209,9 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { List rollbacks = new ArrayList<>(); for (int i = 0; i < mAvailableRollbacks.size(); ++i) { RollbackData data = mAvailableRollbacks.get(i); - rollbacks.add(new RollbackInfo(data.rollbackId, data.packages, - Collections.emptyList())); + // TODO: Pass the correct value for isStaged instead of + // assuming always false. + rollbacks.add(new RollbackInfo(data.rollbackId, data.packages, false)); } return new ParceledListSlice<>(rollbacks); } @@ -364,8 +364,11 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { return; } + // TODO: Set the correct values for isStaged and + // committedSessionId. addRecentlyExecutedRollback(new RollbackInfo( - data.rollbackId, data.packages, causePackages)); + data.rollbackId, data.packages, false, causePackages, + PackageInstaller.SessionInfo.INVALID_ID)); sendSuccess(statusReceiver); Intent broadcast = new Intent(Intent.ACTION_ROLLBACK_COMMITTED); diff --git a/services/core/java/com/android/server/rollback/RollbackStore.java b/services/core/java/com/android/server/rollback/RollbackStore.java index d8e1f6203956a..1069530660ff0 100644 --- a/services/core/java/com/android/server/rollback/RollbackStore.java +++ b/services/core/java/com/android/server/rollback/RollbackStore.java @@ -178,9 +178,12 @@ class RollbackStore { int rollbackId = element.getInt("rollbackId"); List packages = packageRollbackInfosFromJson( element.getJSONArray("packages")); + boolean isStaged = element.getBoolean("isStaged"); List causePackages = versionedPackagesFromJson( element.getJSONArray("causePackages")); - RollbackInfo rollback = new RollbackInfo(rollbackId, packages, causePackages); + int committedSessionId = element.getInt("committedSessionId"); + RollbackInfo rollback = new RollbackInfo(rollbackId, packages, isStaged, + causePackages, committedSessionId); recentlyExecutedRollbacks.add(rollback); } } catch (IOException | JSONException e) { @@ -270,7 +273,9 @@ class RollbackStore { JSONObject element = new JSONObject(); element.put("rollbackId", rollback.getRollbackId()); element.put("packages", toJson(rollback.getPackages())); + element.put("isStaged", rollback.isStaged()); element.put("causePackages", versionedPackagesToJson(rollback.getCausePackages())); + element.put("committedSessionId", rollback.getCommittedSessionId()); array.put(element); }