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 get-credential flow. 32 * 33 * @hide 34 */ 35 @TestApi 36 public final class GetCredentialProviderData extends ProviderData implements Parcelable { 37 @NonNull 38 private final List<Entry> mCredentialEntries; 39 @NonNull 40 private final List<Entry> mActionChips; 41 @NonNull 42 private final List<AuthenticationEntry> mAuthenticationEntries; 43 @Nullable 44 private final Entry mRemoteEntry; 45 GetCredentialProviderData( @onNull String providerFlattenedComponentName, @NonNull List<Entry> credentialEntries, @NonNull List<Entry> actionChips, @NonNull List<AuthenticationEntry> authenticationEntries, @Nullable Entry remoteEntry)46 public GetCredentialProviderData( 47 @NonNull String providerFlattenedComponentName, @NonNull List<Entry> credentialEntries, 48 @NonNull List<Entry> actionChips, 49 @NonNull List<AuthenticationEntry> authenticationEntries, 50 @Nullable Entry remoteEntry) { 51 super(providerFlattenedComponentName); 52 mCredentialEntries = new ArrayList<>(credentialEntries); 53 mActionChips = new ArrayList<>(actionChips); 54 mAuthenticationEntries = new ArrayList<>(authenticationEntries); 55 mRemoteEntry = remoteEntry; 56 } 57 58 @NonNull getCredentialEntries()59 public List<Entry> getCredentialEntries() { 60 return mCredentialEntries; 61 } 62 63 @NonNull getActionChips()64 public List<Entry> getActionChips() { 65 return mActionChips; 66 } 67 68 @NonNull getAuthenticationEntries()69 public List<AuthenticationEntry> getAuthenticationEntries() { 70 return mAuthenticationEntries; 71 } 72 73 @Nullable getRemoteEntry()74 public Entry getRemoteEntry() { 75 return mRemoteEntry; 76 } 77 GetCredentialProviderData(@onNull Parcel in)78 private GetCredentialProviderData(@NonNull Parcel in) { 79 super(in); 80 81 List<Entry> credentialEntries = new ArrayList<>(); 82 in.readTypedList(credentialEntries, Entry.CREATOR); 83 mCredentialEntries = credentialEntries; 84 AnnotationValidations.validate(NonNull.class, null, mCredentialEntries); 85 86 List<Entry> actionChips = new ArrayList<>(); 87 in.readTypedList(actionChips, Entry.CREATOR); 88 mActionChips = actionChips; 89 AnnotationValidations.validate(NonNull.class, null, mActionChips); 90 91 List<AuthenticationEntry> authenticationEntries = new ArrayList<>(); 92 in.readTypedList(authenticationEntries, AuthenticationEntry.CREATOR); 93 mAuthenticationEntries = authenticationEntries; 94 AnnotationValidations.validate(NonNull.class, null, mAuthenticationEntries); 95 96 Entry remoteEntry = in.readTypedObject(Entry.CREATOR); 97 mRemoteEntry = remoteEntry; 98 } 99 100 @Override writeToParcel(@onNull Parcel dest, int flags)101 public void writeToParcel(@NonNull Parcel dest, int flags) { 102 super.writeToParcel(dest, flags); 103 dest.writeTypedList(mCredentialEntries); 104 dest.writeTypedList(mActionChips); 105 dest.writeTypedList(mAuthenticationEntries); 106 dest.writeTypedObject(mRemoteEntry, flags); 107 } 108 109 @Override describeContents()110 public int describeContents() { 111 return 0; 112 } 113 114 public static final @NonNull Creator<GetCredentialProviderData> CREATOR = 115 new Creator<GetCredentialProviderData>() { 116 @Override 117 public GetCredentialProviderData createFromParcel(@NonNull Parcel in) { 118 return new GetCredentialProviderData(in); 119 } 120 121 @Override 122 public GetCredentialProviderData[] newArray(int size) { 123 return new GetCredentialProviderData[size]; 124 } 125 }; 126 127 /** 128 * Builder for {@link GetCredentialProviderData}. 129 * 130 * @hide 131 */ 132 @TestApi 133 public static final class Builder { 134 @NonNull private String mProviderFlattenedComponentName; 135 @NonNull private List<Entry> mCredentialEntries = new ArrayList<>(); 136 @NonNull private List<Entry> mActionChips = new ArrayList<>(); 137 @NonNull private List<AuthenticationEntry> mAuthenticationEntries = new ArrayList<>(); 138 @Nullable private Entry mRemoteEntry = null; 139 140 /** Constructor with required properties. */ Builder(@onNull String providerFlattenedComponentName)141 public Builder(@NonNull String providerFlattenedComponentName) { 142 mProviderFlattenedComponentName = providerFlattenedComponentName; 143 } 144 145 /** Sets the list of save / get credential entries to be displayed to the user. */ 146 @NonNull setCredentialEntries(@onNull List<Entry> credentialEntries)147 public Builder setCredentialEntries(@NonNull List<Entry> credentialEntries) { 148 mCredentialEntries = credentialEntries; 149 return this; 150 } 151 152 /** Sets the list of action chips to be displayed to the user. */ 153 @NonNull setActionChips(@onNull List<Entry> actionChips)154 public Builder setActionChips(@NonNull List<Entry> actionChips) { 155 mActionChips = actionChips; 156 return this; 157 } 158 159 /** Sets the authentication entry to be displayed to the user. */ 160 @NonNull setAuthenticationEntries( @onNull List<AuthenticationEntry> authenticationEntry)161 public Builder setAuthenticationEntries( 162 @NonNull List<AuthenticationEntry> authenticationEntry) { 163 mAuthenticationEntries = authenticationEntry; 164 return this; 165 } 166 167 /** Sets the remote entry to be displayed to the user. */ 168 @NonNull setRemoteEntry(@ullable Entry remoteEntry)169 public Builder setRemoteEntry(@Nullable Entry remoteEntry) { 170 mRemoteEntry = remoteEntry; 171 return this; 172 } 173 174 /** Builds a {@link GetCredentialProviderData}. */ 175 @NonNull build()176 public GetCredentialProviderData build() { 177 return new GetCredentialProviderData(mProviderFlattenedComponentName, 178 mCredentialEntries, mActionChips, mAuthenticationEntries, mRemoteEntry); 179 } 180 } 181 } 182