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