• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.content.rollback;
18 
19 import android.annotation.FlaggedApi;
20 import android.annotation.NonNull;
21 import android.annotation.SystemApi;
22 import android.content.pm.PackageManager;
23 import android.content.pm.VersionedPackage;
24 import android.os.Parcel;
25 import android.os.Parcelable;
26 
27 import java.util.List;
28 
29 /**
30  * Information about a set of packages that can be, or already have been rolled back together.
31  *
32  * @hide
33  */
34 @SystemApi
35 public final class RollbackInfo implements Parcelable {
36 
37     /** A unique identifier for the rollback. */
38     private final int mRollbackId;
39 
40     private final List<PackageRollbackInfo> mPackages;
41 
42     private final List<VersionedPackage> mCausePackages;
43 
44     private final boolean mIsStaged;
45     private int mCommittedSessionId;
46     private int mRollbackImpactLevel;
47 
48     /** @hide */
RollbackInfo( int rollbackId, List<PackageRollbackInfo> packages, boolean isStaged, List<VersionedPackage> causePackages, int committedSessionId, @PackageManager.RollbackImpactLevel int rollbackImpactLevel)49     public RollbackInfo(
50             int rollbackId,
51             List<PackageRollbackInfo> packages,
52             boolean isStaged,
53             List<VersionedPackage> causePackages,
54             int committedSessionId,
55             @PackageManager.RollbackImpactLevel int rollbackImpactLevel) {
56         this.mRollbackId = rollbackId;
57         this.mPackages = packages;
58         this.mIsStaged = isStaged;
59         this.mCausePackages = causePackages;
60         this.mCommittedSessionId = committedSessionId;
61         this.mRollbackImpactLevel = rollbackImpactLevel;
62     }
63 
64     /** @hide */
RollbackInfo( int rollbackId, List<PackageRollbackInfo> packages, boolean isStaged, List<VersionedPackage> causePackages, int committedSessionId)65     public RollbackInfo(
66             int rollbackId,
67             List<PackageRollbackInfo> packages,
68             boolean isStaged,
69             List<VersionedPackage> causePackages,
70             int committedSessionId) {
71         // If impact level is not set default to 0
72         this(
73                 rollbackId,
74                 packages,
75                 isStaged,
76                 causePackages,
77                 committedSessionId,
78                 PackageManager.ROLLBACK_USER_IMPACT_LOW);
79     }
80 
RollbackInfo(Parcel in)81     private RollbackInfo(Parcel in) {
82         mRollbackId = in.readInt();
83         mPackages = in.createTypedArrayList(PackageRollbackInfo.CREATOR);
84         mIsStaged = in.readBoolean();
85         mCausePackages = in.createTypedArrayList(VersionedPackage.CREATOR);
86         mCommittedSessionId = in.readInt();
87         mRollbackImpactLevel = in.readInt();
88     }
89 
90     /** Returns a unique identifier for this rollback. */
getRollbackId()91     public int getRollbackId() {
92         return mRollbackId;
93     }
94 
95     /** Returns the list of package that are rolled back. */
96     @NonNull
getPackages()97     public List<PackageRollbackInfo> getPackages() {
98         return mPackages;
99     }
100 
101     /** Returns true if this rollback requires reboot to take effect after being committed. */
isStaged()102     public boolean isStaged() {
103         return mIsStaged;
104     }
105 
106     /**
107      * Returns the session ID for the committed rollback for staged rollbacks. Only applicable for
108      * rollbacks that have been committed.
109      */
getCommittedSessionId()110     public int getCommittedSessionId() {
111         return mCommittedSessionId;
112     }
113 
114     /**
115      * Sets the session ID for the committed rollback for staged rollbacks.
116      *
117      * @hide
118      */
setCommittedSessionId(int sessionId)119     public void setCommittedSessionId(int sessionId) {
120         mCommittedSessionId = sessionId;
121     }
122 
123     /**
124      * Gets the list of package versions that motivated this rollback. As provided to {@link
125      * #commitRollback} when the rollback was committed. This is only applicable for rollbacks that
126      * have been committed.
127      */
128     @NonNull
getCausePackages()129     public List<VersionedPackage> getCausePackages() {
130         return mCausePackages;
131     }
132 
133     /**
134      * Get rollback impact level. Refer {@link
135      * android.content.pm.PackageInstaller.SessionParams#setRollbackImpactLevel(int)} for more info
136      * on impact level.
137      */
138     @FlaggedApi(android.crashrecovery.flags.Flags.FLAG_ENABLE_CRASHRECOVERY)
getRollbackImpactLevel()139     public @PackageManager.RollbackImpactLevel int getRollbackImpactLevel() {
140         return mRollbackImpactLevel;
141     }
142 
143     /**
144      * Set rollback impact level. Refer {@link
145      * android.content.pm.PackageInstaller.SessionParams#setRollbackImpactLevel(int)} for more info
146      * on impact level.
147      *
148      * @hide
149      */
setRollbackImpactLevel( @ackageManager.RollbackImpactLevel int rollbackImpactLevel)150     public void setRollbackImpactLevel(
151             @PackageManager.RollbackImpactLevel int rollbackImpactLevel) {
152         mRollbackImpactLevel = rollbackImpactLevel;
153     }
154 
155     @Override
describeContents()156     public int describeContents() {
157         return 0;
158     }
159 
160     @Override
writeToParcel(Parcel out, int flags)161     public void writeToParcel(Parcel out, int flags) {
162         out.writeInt(mRollbackId);
163         out.writeTypedList(mPackages);
164         out.writeBoolean(mIsStaged);
165         out.writeTypedList(mCausePackages);
166         out.writeInt(mCommittedSessionId);
167         out.writeInt(mRollbackImpactLevel);
168     }
169 
170     public static final @android.annotation.NonNull Parcelable.Creator<RollbackInfo> CREATOR =
171             new Parcelable.Creator<RollbackInfo>() {
172                 public RollbackInfo createFromParcel(Parcel in) {
173                     return new RollbackInfo(in);
174                 }
175 
176                 public RollbackInfo[] newArray(int size) {
177                     return new RollbackInfo[size];
178                 }
179             };
180 }
181