1 /*
2  * Copyright 2022 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.credentials.ui;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.annotation.TestApi;
22 import android.os.Parcel;
23 import android.os.Parcelable;
24 
25 import com.android.internal.util.AnnotationValidations;
26 
27 import java.util.ArrayList;
28 import java.util.List;
29 
30 /**
31  * Per-provider metadata and entries for the create-credential flow.
32  *
33  * @hide
34  */
35 @TestApi
36 public final class CreateCredentialProviderData extends ProviderData implements Parcelable {
37     @NonNull
38     private final List<Entry> mSaveEntries;
39     @Nullable
40     private final Entry mRemoteEntry;
41 
CreateCredentialProviderData( @onNull String providerFlattenedComponentName, @NonNull List<Entry> saveEntries, @Nullable Entry remoteEntry)42     public CreateCredentialProviderData(
43             @NonNull String providerFlattenedComponentName, @NonNull List<Entry> saveEntries,
44             @Nullable Entry remoteEntry) {
45         super(providerFlattenedComponentName);
46         mSaveEntries = new ArrayList<>(saveEntries);
47         mRemoteEntry = remoteEntry;
48     }
49 
50     @NonNull
getSaveEntries()51     public List<Entry> getSaveEntries() {
52         return mSaveEntries;
53     }
54 
55     @Nullable
getRemoteEntry()56     public Entry getRemoteEntry() {
57         return mRemoteEntry;
58     }
59 
CreateCredentialProviderData(@onNull Parcel in)60     private CreateCredentialProviderData(@NonNull Parcel in) {
61         super(in);
62 
63         List<Entry> credentialEntries = new ArrayList<>();
64         in.readTypedList(credentialEntries, Entry.CREATOR);
65         mSaveEntries = credentialEntries;
66         AnnotationValidations.validate(NonNull.class, null, mSaveEntries);
67 
68         Entry remoteEntry = in.readTypedObject(Entry.CREATOR);
69         mRemoteEntry = remoteEntry;
70     }
71 
72     @Override
writeToParcel(@onNull Parcel dest, int flags)73     public void writeToParcel(@NonNull Parcel dest, int flags) {
74         super.writeToParcel(dest, flags);
75         dest.writeTypedList(mSaveEntries);
76         dest.writeTypedObject(mRemoteEntry, flags);
77     }
78 
79     @Override
describeContents()80     public int describeContents() {
81         return 0;
82     }
83 
84     @NonNull
85     public static final Creator<CreateCredentialProviderData> CREATOR =
86             new Creator<>() {
87                 @Override
88                 public CreateCredentialProviderData createFromParcel(@NonNull Parcel in) {
89                     return new CreateCredentialProviderData(in);
90                 }
91 
92                 @Override
93                 public CreateCredentialProviderData[] newArray(int size) {
94                     return new CreateCredentialProviderData[size];
95                 }
96             };
97 
98     /**
99      * Builder for {@link CreateCredentialProviderData}.
100      *
101      * @hide
102      */
103     @TestApi
104     public static final class Builder {
105         @NonNull private String mProviderFlattenedComponentName;
106         @NonNull private List<Entry> mSaveEntries = new ArrayList<>();
107         @Nullable private Entry mRemoteEntry = null;
108 
109         /** Constructor with required properties. */
Builder(@onNull String providerFlattenedComponentName)110         public Builder(@NonNull String providerFlattenedComponentName) {
111             mProviderFlattenedComponentName = providerFlattenedComponentName;
112         }
113 
114         /** Sets the list of save credential entries to be displayed to the user. */
115         @NonNull
setSaveEntries(@onNull List<Entry> credentialEntries)116         public Builder setSaveEntries(@NonNull List<Entry> credentialEntries) {
117             mSaveEntries = credentialEntries;
118             return this;
119         }
120 
121         /** Sets the remote entry of the provider. */
122         @NonNull
setRemoteEntry(@ullable Entry remoteEntry)123         public Builder setRemoteEntry(@Nullable Entry remoteEntry) {
124             mRemoteEntry = remoteEntry;
125             return this;
126         }
127 
128         /** Builds a {@link CreateCredentialProviderData}. */
129         @NonNull
build()130         public CreateCredentialProviderData build() {
131             return new CreateCredentialProviderData(mProviderFlattenedComponentName,
132                     mSaveEntries, mRemoteEntry);
133         }
134     }
135 }
136