• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2020 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.car.user;
18 
19 import static com.android.car.internal.ExcludeFromCodeCoverageGeneratedReport.BOILERPLATE_CODE;
20 
21 import android.annotation.IntDef;
22 import android.annotation.NonNull;
23 import android.annotation.Nullable;
24 import android.annotation.SystemApi;
25 import android.annotation.TestApi;
26 import android.car.annotation.AddedInOrBefore;
27 import android.os.Parcelable;
28 import android.os.UserHandle;
29 import android.os.UserManager;
30 
31 import com.android.car.internal.ExcludeFromCodeCoverageGeneratedReport;
32 import com.android.car.internal.util.DataClass;
33 import com.android.car.internal.util.DebugUtils;
34 
35 import java.lang.annotation.Retention;
36 import java.lang.annotation.RetentionPolicy;
37 
38 /**
39  * User creation results.
40  *
41  * @hide
42  */
43 @DataClass(
44         genToString = true,
45         genHiddenConstructor = true,
46         genHiddenConstDefs = true)
47 @SystemApi
48 public final class UserCreationResult implements Parcelable, OperationResult {
49 
50     /**
51      * {@link Status} called when user creation is successful for both HAL and Android.
52      */
53     @Status
54     @AddedInOrBefore(majorVersion = 33)
55     public static final int STATUS_SUCCESSFUL = CommonResults.STATUS_SUCCESSFUL;
56 
57     /**
58      * {@link Status} called when user creation failed on Android - HAL is not even called in this
59      * case.
60      */
61     @Status
62     @AddedInOrBefore(majorVersion = 33)
63     public static final int STATUS_ANDROID_FAILURE = CommonResults.STATUS_ANDROID_FAILURE;
64 
65     /**
66      * {@link Status} called when user was created on Android but HAL returned a failure - the
67      * Android user is automatically removed.
68      */
69     @Status
70     @AddedInOrBefore(majorVersion = 33)
71     public static final int STATUS_HAL_FAILURE = CommonResults.STATUS_HAL_FAILURE;
72 
73     /**
74      * {@link Status} called when user creation is failed for HAL for some internal error - the
75      * Android user is not automatically removed.
76      */
77     @Status
78     @AddedInOrBefore(majorVersion = 33)
79     public static final int STATUS_HAL_INTERNAL_FAILURE = CommonResults.STATUS_HAL_INTERNAL_FAILURE;
80 
81     /**
82      * {@link Status} called when given parameters or environment states are invalid for creating
83      * user - HAL or Android user creation is not requested.
84      */
85     @Status
86     @AddedInOrBefore(majorVersion = 33)
87     public static final int STATUS_INVALID_REQUEST = CommonResults.STATUS_INVALID_REQUEST;
88 
89     /**
90      * Gets the user creation result status.
91      *
92      * @return either {@link UserCreationResult#STATUS_SUCCESSFUL},
93      *         {@link UserCreationResult#STATUS_ANDROID_FAILURE},
94      *         {@link UserCreationResult#STATUS_HAL_FAILURE},
95      *         {@link UserCreationResult#STATUS_HAL_INTERNAL_FAILURE}, or
96      *         {@link UserCreationResult#STATUS_INVALID_REQUEST}.
97      */
98     private final @Status int mStatus;
99 
100     // TODO(b/214443810): codegen generates call to writeInteger() / readInteger(), we need to
101     // manually change to writeInt() / readInt()
102     /**
103      * Gets the failure status returned by {@link UserManager} when the {@link #getStatus() status}
104      * is {@link #STATUS_ANDROID_FAILURE}.
105      *
106      * @return {@code USER_OPERATION_ERROR_} constants defined by {@link UserManager}, or
107      * {@code null} when the {@link #getStatus() status} is not {@link #STATUS_ANDROID_FAILURE}.
108      */
109     @Nullable
110     private final Integer mAndroidFailureStatus;
111 
112     /**
113      * Gets the created user.
114      */
115     @Nullable
116     private final UserHandle mUser;
117 
118     /**
119      * Gets the error message sent by HAL, if any.
120      */
121     @Nullable
122     private final String mErrorMessage;
123 
124     /**
125      * Gets the internal error message , if any.
126      */
127     @Nullable
128     private final String mInternalErrorMessage;
129 
130     @Override
131     @AddedInOrBefore(majorVersion = 33)
isSuccess()132     public boolean isSuccess() {
133         return mStatus == STATUS_SUCCESSFUL;
134     }
135 
136     /** @hide */
137     @TestApi
UserCreationResult(@tatus int status)138     public UserCreationResult(@Status int status) {
139         this(status, /* user= */ null);
140     }
141 
142     /** @hide */
UserCreationResult(@tatus int status, UserHandle user)143     public UserCreationResult(@Status int status, UserHandle user) {
144         this(status, /* androidFailureStatus= */ null, user, /* errorMessage= */ null,
145                 /* internalErrorMessage= */ null);
146     }
147 
148     // NOTE: codegen generates this method, but without @ExcludeFromCodeCoverageGeneratedReport
149     @Override
150     @ExcludeFromCodeCoverageGeneratedReport(reason = BOILERPLATE_CODE)
151     @AddedInOrBefore(majorVersion = 33)
describeContents()152     public int describeContents() {
153         return 0;
154     }
155 
156 
157 
158     // Code below generated by codegen v1.0.23.
159     //
160     // DO NOT MODIFY!
161     // CHECKSTYLE:OFF Generated code
162     //
163     // To regenerate run:
164     // $ codegen $ANDROID_BUILD_TOP/packages/services/Car/car-lib/src/android/car/user/UserCreationResult.java
165     // Added AddedInOrBefore or ApiRequirement Annotation manually
166     //
167     // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
168     //   Settings > Editor > Code Style > Formatter Control
169     //@formatter:off
170 
171 
172     /** @hide */
173     @IntDef(prefix = "STATUS_", value = {
174         STATUS_SUCCESSFUL,
175         STATUS_ANDROID_FAILURE,
176         STATUS_HAL_FAILURE,
177         STATUS_HAL_INTERNAL_FAILURE,
178         STATUS_INVALID_REQUEST
179     })
180     @Retention(RetentionPolicy.SOURCE)
181     @DataClass.Generated.Member
182     public @interface Status {}
183 
184     @DataClass.Generated.Member
185     @ExcludeFromCodeCoverageGeneratedReport(reason = BOILERPLATE_CODE)
186     @AddedInOrBefore(majorVersion = 33)
187     @NonNull
statusToString(@tatus int value)188     public static String statusToString(@Status int value) {
189         switch (value) {
190             case STATUS_SUCCESSFUL:
191                     return "STATUS_SUCCESSFUL";
192             case STATUS_ANDROID_FAILURE:
193                     return "STATUS_ANDROID_FAILURE";
194             case STATUS_HAL_FAILURE:
195                     return "STATUS_HAL_FAILURE";
196             case STATUS_HAL_INTERNAL_FAILURE:
197                     return "STATUS_HAL_INTERNAL_FAILURE";
198             case STATUS_INVALID_REQUEST:
199                     return "STATUS_INVALID_REQUEST";
200             default: return Integer.toHexString(value);
201         }
202     }
203 
204     /**
205      * Creates a new UserCreationResult.
206      *
207      * @param status
208      *   Gets the user creation result status.
209      *
210      *   @return either {@link UserCreationResult#STATUS_SUCCESSFUL},
211      *           {@link UserCreationResult#STATUS_ANDROID_FAILURE},
212      *           {@link UserCreationResult#STATUS_HAL_FAILURE},
213      *           {@link UserCreationResult#STATUS_HAL_INTERNAL_FAILURE}, or
214      *           {@link UserCreationResult#STATUS_INVALID_REQUEST}.
215      * @param androidFailureStatus
216      *   Gets the failure status returned by {@link UserManager} when the {@link #getStatus() status}
217      *   is {@link #STATUS_ANDROID_FAILURE}.
218      *
219      *   @return {@code USER_OPERATION_ERROR_} constants defined by {@link UserManager}, or
220      *   {@code null} when the {@link #getStatus() status} is not {@link #STATUS_ANDROID_FAILURE}.
221      * @param user
222      *   Gets the created user.
223      * @param errorMessage
224      *   Gets the error message sent by HAL, if any.
225      * @param internalErrorMessage
226      *   Gets the internal error message , if any.
227      * @hide
228      */
229     @DataClass.Generated.Member
UserCreationResult( @tatus int status, @Nullable Integer androidFailureStatus, @Nullable UserHandle user, @Nullable String errorMessage, @Nullable String internalErrorMessage)230     public UserCreationResult(
231             @Status int status,
232             @Nullable Integer androidFailureStatus,
233             @Nullable UserHandle user,
234             @Nullable String errorMessage,
235             @Nullable String internalErrorMessage) {
236         this.mStatus = status;
237 
238         if (!(mStatus == STATUS_SUCCESSFUL)
239                 && !(mStatus == STATUS_ANDROID_FAILURE)
240                 && !(mStatus == STATUS_HAL_FAILURE)
241                 && !(mStatus == STATUS_HAL_INTERNAL_FAILURE)
242                 && !(mStatus == STATUS_INVALID_REQUEST)) {
243             throw new java.lang.IllegalArgumentException(
244                     "status was " + mStatus + " but must be one of: "
245                             + "STATUS_SUCCESSFUL(" + STATUS_SUCCESSFUL + "), "
246                             + "STATUS_ANDROID_FAILURE(" + STATUS_ANDROID_FAILURE + "), "
247                             + "STATUS_HAL_FAILURE(" + STATUS_HAL_FAILURE + "), "
248                             + "STATUS_HAL_INTERNAL_FAILURE(" + STATUS_HAL_INTERNAL_FAILURE + "), "
249                             + "STATUS_INVALID_REQUEST(" + STATUS_INVALID_REQUEST + ")");
250         }
251 
252         this.mAndroidFailureStatus = androidFailureStatus;
253         this.mUser = user;
254         this.mErrorMessage = errorMessage;
255         this.mInternalErrorMessage = internalErrorMessage;
256 
257         // onConstructed(); // You can define this method to get a callback
258     }
259 
260     /**
261      * Gets the user creation result status.
262      *
263      * @return either {@link UserCreationResult#STATUS_SUCCESSFUL},
264      *         {@link UserCreationResult#STATUS_ANDROID_FAILURE},
265      *         {@link UserCreationResult#STATUS_HAL_FAILURE},
266      *         {@link UserCreationResult#STATUS_HAL_INTERNAL_FAILURE}, or
267      *         {@link UserCreationResult#STATUS_INVALID_REQUEST}.
268      */
269     @DataClass.Generated.Member
270     @AddedInOrBefore(majorVersion = 33)
getStatus()271     public @Status int getStatus() {
272         return mStatus;
273     }
274 
275     /**
276      * Gets the failure status returned by {@link UserManager} when the {@link #getStatus() status}
277      * is {@link #STATUS_ANDROID_FAILURE}.
278      *
279      * @return {@code USER_OPERATION_ERROR_} constants defined by {@link UserManager}, or
280      * {@code null} when the {@link #getStatus() status} is not {@link #STATUS_ANDROID_FAILURE}.
281      */
282     @DataClass.Generated.Member
283     @AddedInOrBefore(majorVersion = 33)
getAndroidFailureStatus()284     public @Nullable Integer getAndroidFailureStatus() {
285         return mAndroidFailureStatus;
286     }
287 
288     /**
289      * Gets the created user.
290      */
291     @DataClass.Generated.Member
292     @AddedInOrBefore(majorVersion = 33)
getUser()293     public @Nullable UserHandle getUser() {
294         return mUser;
295     }
296 
297     /**
298      * Gets the error message sent by HAL, if any.
299      */
300     @DataClass.Generated.Member
301     @AddedInOrBefore(majorVersion = 33)
getErrorMessage()302     public @Nullable String getErrorMessage() {
303         return mErrorMessage;
304     }
305 
306     /**
307      * Gets the internal error message , if any.
308      */
309     @DataClass.Generated.Member
310     @AddedInOrBefore(majorVersion = 33)
getInternalErrorMessage()311     public @Nullable String getInternalErrorMessage() {
312         return mInternalErrorMessage;
313     }
314 
315     @Override
316     @DataClass.Generated.Member
toString()317     public String toString() {
318         // You can override field toString logic by defining methods like:
319         // String fieldNameToString() { ... }
320 
321         return "UserCreationResult { " +
322                 "status = " + statusToString(mStatus) + ", " +
323                 "androidFailureStatus = " + mAndroidFailureStatus +
324                 (mAndroidFailureStatus != null ? " ("
325                         + DebugUtils.constantToString(UserManager.class, "USER_OPERATION_",
326                         mAndroidFailureStatus) + ")" : "") +
327                 ", user = " + mUser + ", " +
328                 "errorMessage = " + mErrorMessage + ", " +
329                 "internalErrorMessage = " + mInternalErrorMessage +
330         " }";
331     }
332 
333     @Override
334     @DataClass.Generated.Member
335     @AddedInOrBefore(majorVersion = 33)
writeToParcel(@ndroid.annotation.NonNull android.os.Parcel dest, int flags)336     public void writeToParcel(@android.annotation.NonNull android.os.Parcel dest, int flags) {
337         // You can override field parcelling by defining methods like:
338         // void parcelFieldName(Parcel dest, int flags) { ... }
339 
340         byte flg = 0;
341         if (mAndroidFailureStatus != null) flg |= 0x2;
342         if (mUser != null) flg |= 0x4;
343         if (mErrorMessage != null) flg |= 0x8;
344         if (mInternalErrorMessage != null) flg |= 0x10;
345         dest.writeByte(flg);
346         dest.writeInt(mStatus);
347         if (mAndroidFailureStatus != null) dest.writeInt(mAndroidFailureStatus);
348         if (mUser != null) dest.writeTypedObject(mUser, flags);
349         if (mErrorMessage != null) dest.writeString(mErrorMessage);
350         if (mInternalErrorMessage != null) dest.writeString(mInternalErrorMessage);
351     }
352 
353     /** @hide */
354     @SuppressWarnings({"unchecked", "RedundantCast"})
355     @DataClass.Generated.Member
UserCreationResult(@ndroid.annotation.NonNull android.os.Parcel in)356     /* package-private */ UserCreationResult(@android.annotation.NonNull android.os.Parcel in) {
357         // You can override field unparcelling by defining methods like:
358         // static FieldType unparcelFieldName(Parcel in) { ... }
359 
360         byte flg = in.readByte();
361         int status = in.readInt();
362         Integer androidFailureStatus = (flg & 0x2) == 0 ? null : (Integer) in.readInt();
363         UserHandle user = (flg & 0x4) == 0 ? null : (UserHandle) in.readTypedObject(UserHandle.CREATOR);
364         String errorMessage = (flg & 0x8) == 0 ? null : in.readString();
365         String internalErrorMessage = (flg & 0x10) == 0 ? null : in.readString();
366 
367         this.mStatus = status;
368 
369         if (!(mStatus == STATUS_SUCCESSFUL)
370                 && !(mStatus == STATUS_ANDROID_FAILURE)
371                 && !(mStatus == STATUS_HAL_FAILURE)
372                 && !(mStatus == STATUS_HAL_INTERNAL_FAILURE)
373                 && !(mStatus == STATUS_INVALID_REQUEST)) {
374             throw new java.lang.IllegalArgumentException(
375                     "status was " + mStatus + " but must be one of: "
376                             + "STATUS_SUCCESSFUL(" + STATUS_SUCCESSFUL + "), "
377                             + "STATUS_ANDROID_FAILURE(" + STATUS_ANDROID_FAILURE + "), "
378                             + "STATUS_HAL_FAILURE(" + STATUS_HAL_FAILURE + "), "
379                             + "STATUS_HAL_INTERNAL_FAILURE(" + STATUS_HAL_INTERNAL_FAILURE + "), "
380                             + "STATUS_INVALID_REQUEST(" + STATUS_INVALID_REQUEST + ")");
381         }
382 
383         this.mAndroidFailureStatus = androidFailureStatus;
384         this.mUser = user;
385         this.mErrorMessage = errorMessage;
386         this.mInternalErrorMessage = internalErrorMessage;
387 
388         // onConstructed(); // You can define this method to get a callback
389     }
390 
391     @DataClass.Generated.Member
392     @AddedInOrBefore(majorVersion = 33)
393     public static final @android.annotation.NonNull Parcelable.Creator<UserCreationResult> CREATOR
394             = new Parcelable.Creator<UserCreationResult>() {
395         @Override
396         public UserCreationResult[] newArray(int size) {
397             return new UserCreationResult[size];
398         }
399 
400         @Override
401         public UserCreationResult createFromParcel(@android.annotation.NonNull android.os.Parcel in) {
402             return new UserCreationResult(in);
403         }
404     };
405 
406     @DataClass.Generated(
407             time = 1673057364539L,
408             codegenVersion = "1.0.23",
409             sourceFile = "packages/services/Car/car-lib/src/android/car/user/UserCreationResult.java",
410             inputSignatures = "public static final @android.car.user.UserCreationResult.Status @android.car.annotation.AddedInOrBefore int STATUS_SUCCESSFUL\npublic static final @android.car.user.UserCreationResult.Status @android.car.annotation.AddedInOrBefore int STATUS_ANDROID_FAILURE\npublic static final @android.car.user.UserCreationResult.Status @android.car.annotation.AddedInOrBefore int STATUS_HAL_FAILURE\npublic static final @android.car.user.UserCreationResult.Status @android.car.annotation.AddedInOrBefore int STATUS_HAL_INTERNAL_FAILURE\npublic static final @android.car.user.UserCreationResult.Status @android.car.annotation.AddedInOrBefore int STATUS_INVALID_REQUEST\nprivate final @android.car.user.UserCreationResult.Status int mStatus\nprivate final @android.annotation.Nullable java.lang.Integer mAndroidFailureStatus\nprivate final @android.annotation.Nullable android.os.UserHandle mUser\nprivate final @android.annotation.Nullable java.lang.String mErrorMessage\nprivate final @android.annotation.Nullable java.lang.String mInternalErrorMessage\npublic @java.lang.Override @android.car.annotation.AddedInOrBefore boolean isSuccess()\npublic @java.lang.Override @com.android.car.internal.ExcludeFromCodeCoverageGeneratedReport @android.car.annotation.AddedInOrBefore int describeContents()\nclass UserCreationResult extends java.lang.Object implements [android.os.Parcelable, android.car.user.OperationResult]\n@com.android.car.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
411     @Deprecated
__metadata()412     private void __metadata() {}
413 
414 
415     //@formatter:on
416     // End of generated code
417 
418 }
419