122 lines
4.7 KiB
Java
122 lines
4.7 KiB
Java
![]() |
/*
|
||
|
* Copyright (C) 2022 The Android Open Source Project
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
package android.service.credentials;
|
||
|
|
||
|
import android.annotation.NonNull;
|
||
|
import android.credentials.CredentialOption;
|
||
|
import android.os.Parcel;
|
||
|
import android.os.Parcelable;
|
||
|
|
||
|
import com.android.internal.util.AnnotationValidations;
|
||
|
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.List;
|
||
|
import java.util.Objects;
|
||
|
|
||
|
/**
|
||
|
* Request for getting user's credential from a given credential provider.
|
||
|
*
|
||
|
* <p>A credential provider will receive this request once the user selects a
|
||
|
* given {@link CredentialEntry}, or {@link RemoteEntry} on the selector, that was sourced
|
||
|
* from provider's initial response to {@link CredentialProviderService#onBeginGetCredential}.
|
||
|
*/
|
||
|
public final class GetCredentialRequest implements Parcelable {
|
||
|
/** Calling package of the app requesting for credentials. */
|
||
|
@NonNull
|
||
|
private final CallingAppInfo mCallingAppInfo;
|
||
|
|
||
|
/**
|
||
|
* Holds a list of options (parameters) to be used for retrieving a specific type of credential.
|
||
|
*/
|
||
|
@NonNull
|
||
|
private final List<CredentialOption> mCredentialOptions;
|
||
|
|
||
|
public GetCredentialRequest(@NonNull CallingAppInfo callingAppInfo,
|
||
|
@NonNull List<CredentialOption> credentialOptions) {
|
||
|
this.mCallingAppInfo = Objects.requireNonNull(callingAppInfo,
|
||
|
"callingAppInfo must not be null");
|
||
|
this.mCredentialOptions = Objects.requireNonNull(credentialOptions,
|
||
|
"credentialOptions must not be null");
|
||
|
}
|
||
|
|
||
|
private GetCredentialRequest(@NonNull Parcel in) {
|
||
|
mCallingAppInfo = in.readTypedObject(CallingAppInfo.CREATOR);
|
||
|
AnnotationValidations.validate(NonNull.class, null, mCallingAppInfo);
|
||
|
|
||
|
List<CredentialOption> credentialOptions = new ArrayList<>();
|
||
|
in.readTypedList(credentialOptions, CredentialOption.CREATOR);
|
||
|
mCredentialOptions = credentialOptions;
|
||
|
AnnotationValidations.validate(NonNull.class, null, mCredentialOptions);
|
||
|
}
|
||
|
|
||
|
@NonNull public static final Creator<GetCredentialRequest> CREATOR =
|
||
|
new Creator<>() {
|
||
|
@Override
|
||
|
public GetCredentialRequest createFromParcel(Parcel in) {
|
||
|
return new GetCredentialRequest(in);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public GetCredentialRequest[] newArray(int size) {
|
||
|
return new GetCredentialRequest[size];
|
||
|
}
|
||
|
};
|
||
|
|
||
|
@Override
|
||
|
public int describeContents() {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||
|
dest.writeTypedObject(mCallingAppInfo, flags);
|
||
|
dest.writeTypedList(mCredentialOptions, flags);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns info pertaining to the app requesting credentials.
|
||
|
*/
|
||
|
@NonNull
|
||
|
public CallingAppInfo getCallingAppInfo() {
|
||
|
return mCallingAppInfo;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns a list of options containing parameters needed to return a given type of credential.
|
||
|
* This is part of the request that the credential provider receives after the user has
|
||
|
* selected an entry on a selector UI.
|
||
|
*
|
||
|
* When the user selects a {@link CredentialEntry} and the credential provider receives a
|
||
|
* {@link GetCredentialRequest}, this list is expected to contain a single
|
||
|
* {@link CredentialOption} only. A {@link CredentialEntry} is always created for a given
|
||
|
* {@link BeginGetCredentialOption}, and hence when the user selects it, the provider
|
||
|
* receives a corresponding {@link CredentialOption} that contains all the required parameters
|
||
|
* to actually retrieve the credential.
|
||
|
*
|
||
|
* When the user selects a {@link RemoteEntry} and the credential provider receives a
|
||
|
* {@link GetCredentialRequest}, this list may contain greater than a single
|
||
|
* {@link CredentialOption}, representing the number of options specified by the developer
|
||
|
* in the original {@link android.credentials.GetCredentialRequest}. This is because a
|
||
|
* {@link RemoteEntry} indicates that the entire request will be processed on a different
|
||
|
* device and is not tied to a particular option.
|
||
|
*/
|
||
|
@NonNull
|
||
|
public List<CredentialOption> getCredentialOptions() {
|
||
|
return mCredentialOptions;
|
||
|
}
|
||
|
}
|