diff --git a/core/api/current.txt b/core/api/current.txt index 338d10c815004..f2ca78fc8d8d5 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -13509,6 +13509,18 @@ package android.credentials { method public void unregisterCredentialDescription(@NonNull android.credentials.UnregisterCredentialDescriptionRequest); } + public final class CredentialOption implements android.os.Parcelable { + ctor public CredentialOption(@NonNull String, @NonNull android.os.Bundle, @NonNull android.os.Bundle, boolean); + method public int describeContents(); + method @NonNull public android.os.Bundle getCandidateQueryData(); + method @NonNull public android.os.Bundle getCredentialRetrievalData(); + method @NonNull public String getType(); + method public boolean isSystemProviderRequired(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + field public static final String FLATTENED_REQUEST = "android.credentials.GetCredentialOption.FLATTENED_REQUEST_STRING"; + } + public class GetCredentialException extends java.lang.Exception { ctor public GetCredentialException(@NonNull String, @Nullable String); ctor public GetCredentialException(@NonNull String, @Nullable String, @Nullable Throwable); @@ -13521,31 +13533,19 @@ package android.credentials { field @NonNull public static final String TYPE_USER_CANCELED = "android.credentials.GetCredentialException.TYPE_USER_CANCELED"; } - public final class GetCredentialOption implements android.os.Parcelable { - ctor public GetCredentialOption(@NonNull String, @NonNull android.os.Bundle, @NonNull android.os.Bundle, boolean); - method public int describeContents(); - method @NonNull public android.os.Bundle getCandidateQueryData(); - method @NonNull public android.os.Bundle getCredentialRetrievalData(); - method @NonNull public String getType(); - method public boolean isSystemProviderRequired(); - method public void writeToParcel(@NonNull android.os.Parcel, int); - field @NonNull public static final android.os.Parcelable.Creator CREATOR; - field public static final String FLATTENED_REQUEST = "android.credentials.GetCredentialOption.FLATTENED_REQUEST_STRING"; - } - public final class GetCredentialRequest implements android.os.Parcelable { method public int describeContents(); + method @NonNull public java.util.List getCredentialOptions(); method @NonNull public android.os.Bundle getData(); - method @NonNull public java.util.List getGetCredentialOptions(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class GetCredentialRequest.Builder { ctor public GetCredentialRequest.Builder(@NonNull android.os.Bundle); - method @NonNull public android.credentials.GetCredentialRequest.Builder addGetCredentialOption(@NonNull android.credentials.GetCredentialOption); + method @NonNull public android.credentials.GetCredentialRequest.Builder addCredentialOption(@NonNull android.credentials.CredentialOption); method @NonNull public android.credentials.GetCredentialRequest build(); - method @NonNull public android.credentials.GetCredentialRequest.Builder setGetCredentialOptions(@NonNull java.util.List); + method @NonNull public android.credentials.GetCredentialRequest.Builder setCredentialOptions(@NonNull java.util.List); } public final class GetCredentialResponse implements android.os.Parcelable { @@ -40295,10 +40295,10 @@ package android.service.credentials { } public final class GetCredentialRequest implements android.os.Parcelable { - ctor public GetCredentialRequest(@NonNull android.service.credentials.CallingAppInfo, @NonNull android.credentials.GetCredentialOption); + ctor public GetCredentialRequest(@NonNull android.service.credentials.CallingAppInfo, @NonNull android.credentials.CredentialOption); method public int describeContents(); method @NonNull public android.service.credentials.CallingAppInfo getCallingAppInfo(); - method @NonNull public android.credentials.GetCredentialOption getGetCredentialOption(); + method @NonNull public android.credentials.CredentialOption getGetCredentialOption(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; } diff --git a/core/java/android/credentials/GetCredentialOption.java b/core/java/android/credentials/CredentialOption.java similarity index 79% rename from core/java/android/credentials/GetCredentialOption.java rename to core/java/android/credentials/CredentialOption.java index f2895c721e939..9a3b46dad2e7a 100644 --- a/core/java/android/credentials/GetCredentialOption.java +++ b/core/java/android/credentials/CredentialOption.java @@ -27,9 +27,11 @@ import com.android.internal.util.AnnotationValidations; import com.android.internal.util.Preconditions; /** - * A specific type of credential request. + * Information about a specific type of credential to be requested during a {@link + * CredentialManager#getCredential(GetCredentialRequest, Activity, CancellationSignal, Executor, + * OutcomeReceiver)} operation. */ -public final class GetCredentialOption implements Parcelable { +public final class CredentialOption implements Parcelable { /** * Bundle key to the flattened version of the JSON request string. Framework will use this key @@ -118,7 +120,7 @@ public final class GetCredentialOption implements Parcelable { @Override public String toString() { - return "GetCredentialOption {" + return "CredentialOption {" + "type=" + mType + ", requestData=" + mCredentialRetrievalData + ", candidateQueryData=" + mCandidateQueryData @@ -127,17 +129,17 @@ public final class GetCredentialOption implements Parcelable { } /** - * Constructs a {@link GetCredentialOption}. + * Constructs a {@link CredentialOption}. * - * @param type the requested credential type - * @param credentialRetrievalData the request data - * @param candidateQueryData the partial request data that will be sent to the provider - * during the initial credential candidate query stage - * @param isSystemProviderRequired whether the request must only be fulfilled by a system - * provider + * @param type the requested credential type + * @param credentialRetrievalData the request data + * @param candidateQueryData the partial request data that will be sent to the provider + * during the initial credential candidate query stage + * @param isSystemProviderRequired whether the request must only be fulfilled by a system + * provider * @throws IllegalArgumentException If type is empty. */ - public GetCredentialOption( + public CredentialOption( @NonNull String type, @NonNull Bundle credentialRetrievalData, @NonNull Bundle candidateQueryData, @@ -150,7 +152,7 @@ public final class GetCredentialOption implements Parcelable { mIsSystemProviderRequired = isSystemProviderRequired; } - private GetCredentialOption(@NonNull Parcel in) { + private CredentialOption(@NonNull Parcel in) { String type = in.readString8(); Bundle data = in.readBundle(); Bundle candidateQueryData = in.readBundle(); @@ -165,16 +167,16 @@ public final class GetCredentialOption implements Parcelable { mIsSystemProviderRequired = isSystemProviderRequired; } - public static final @NonNull Parcelable.Creator CREATOR = - new Parcelable.Creator() { - @Override - public GetCredentialOption[] newArray(int size) { - return new GetCredentialOption[size]; - } + @NonNull + public static final Parcelable.Creator CREATOR = new Parcelable.Creator<>() { + @Override + public CredentialOption[] newArray(int size) { + return new CredentialOption[size]; + } - @Override - public GetCredentialOption createFromParcel(@NonNull Parcel in) { - return new GetCredentialOption(in); - } - }; + @Override + public CredentialOption createFromParcel(@NonNull Parcel in) { + return new CredentialOption(in); + } + }; } diff --git a/core/java/android/credentials/GetCredentialRequest.java b/core/java/android/credentials/GetCredentialRequest.java index 85b44688eed06..a869c5b489061 100644 --- a/core/java/android/credentials/GetCredentialRequest.java +++ b/core/java/android/credentials/GetCredentialRequest.java @@ -39,7 +39,7 @@ public final class GetCredentialRequest implements Parcelable { * The list of credential requests. */ @NonNull - private final List mGetCredentialOptions; + private final List mCredentialOptions; /** * The top request level data. @@ -51,8 +51,8 @@ public final class GetCredentialRequest implements Parcelable { * Returns the list of credential options to be requested. */ @NonNull - public List getGetCredentialOptions() { - return mGetCredentialOptions; + public List getCredentialOptions() { + return mCredentialOptions; } /** @@ -65,7 +65,7 @@ public final class GetCredentialRequest implements Parcelable { @Override public void writeToParcel(@NonNull Parcel dest, int flags) { - dest.writeTypedList(mGetCredentialOptions, flags); + dest.writeTypedList(mCredentialOptions, flags); dest.writeBundle(mData); } @@ -76,29 +76,29 @@ public final class GetCredentialRequest implements Parcelable { @Override public String toString() { - return "GetCredentialRequest {getCredentialOption=" + mGetCredentialOptions + return "GetCredentialRequest {credentialOption=" + mCredentialOptions + ", data=" + mData + "}"; } - private GetCredentialRequest(@NonNull List getCredentialOptions, + private GetCredentialRequest(@NonNull List credentialOptions, @NonNull Bundle data) { Preconditions.checkCollectionNotEmpty( - getCredentialOptions, - /*valueName=*/ "getCredentialOptions"); + credentialOptions, + /*valueName=*/ "credentialOptions"); Preconditions.checkCollectionElementsNotNull( - getCredentialOptions, - /*valueName=*/ "getCredentialOptions"); - mGetCredentialOptions = getCredentialOptions; + credentialOptions, + /*valueName=*/ "credentialOptions"); + mCredentialOptions = credentialOptions; mData = requireNonNull(data, "data must not be null"); } private GetCredentialRequest(@NonNull Parcel in) { - List getCredentialOptions = new ArrayList(); - in.readTypedList(getCredentialOptions, GetCredentialOption.CREATOR); - mGetCredentialOptions = getCredentialOptions; - AnnotationValidations.validate(NonNull.class, null, mGetCredentialOptions); + List credentialOptions = new ArrayList(); + in.readTypedList(credentialOptions, CredentialOption.CREATOR); + mCredentialOptions = credentialOptions; + AnnotationValidations.validate(NonNull.class, null, mCredentialOptions); Bundle data = in.readBundle(); @@ -106,8 +106,8 @@ public final class GetCredentialRequest implements Parcelable { AnnotationValidations.validate(NonNull.class, null, mData); } - public static final @NonNull Parcelable.Creator CREATOR = - new Parcelable.Creator() { + @NonNull public static final Parcelable.Creator CREATOR = + new Parcelable.Creator<>() { @Override public GetCredentialRequest[] newArray(int size) { return new GetCredentialRequest[size]; @@ -123,7 +123,7 @@ public final class GetCredentialRequest implements Parcelable { public static final class Builder { @NonNull - private List mGetCredentialOptions = new ArrayList<>(); + private List mCredentialOptions = new ArrayList<>(); @NonNull private final Bundle mData; @@ -136,43 +136,42 @@ public final class GetCredentialRequest implements Parcelable { } /** - * Adds a specific type of {@link GetCredentialOption}. + * Adds a specific type of {@link CredentialOption}. */ @NonNull - public Builder addGetCredentialOption( - @NonNull GetCredentialOption getCredentialOption) { - mGetCredentialOptions.add(requireNonNull( - getCredentialOption, "getCredentialOption must not be null")); + public Builder addCredentialOption(@NonNull CredentialOption credentialOption) { + mCredentialOptions.add(requireNonNull( + credentialOption, "credentialOption must not be null")); return this; } /** - * Sets the list of {@link GetCredentialOption}. + * Sets the list of {@link CredentialOption}. */ @NonNull - public Builder setGetCredentialOptions( - @NonNull List getCredentialOptions) { + public Builder setCredentialOptions( + @NonNull List credentialOptions) { Preconditions.checkCollectionElementsNotNull( - getCredentialOptions, - /*valueName=*/ "getCredentialOptions"); - mGetCredentialOptions = new ArrayList<>(getCredentialOptions); + credentialOptions, + /*valueName=*/ "credentialOptions"); + mCredentialOptions = new ArrayList<>(credentialOptions); return this; } /** * Builds a {@link GetCredentialRequest}. * - * @throws IllegalArgumentException If getCredentialOptions is empty. + * @throws IllegalArgumentException If credentialOptions is empty. */ @NonNull public GetCredentialRequest build() { Preconditions.checkCollectionNotEmpty( - mGetCredentialOptions, - /*valueName=*/ "getCredentialOptions"); + mCredentialOptions, + /*valueName=*/ "credentialOptions"); Preconditions.checkCollectionElementsNotNull( - mGetCredentialOptions, - /*valueName=*/ "getCredentialOptions"); - return new GetCredentialRequest(mGetCredentialOptions, mData); + mCredentialOptions, + /*valueName=*/ "credentialOptions"); + return new GetCredentialRequest(mCredentialOptions, mData); } } } diff --git a/core/java/android/service/credentials/BeginGetCredentialRequest.java b/core/java/android/service/credentials/BeginGetCredentialRequest.java index e375cdd56b082..5d040dbc92400 100644 --- a/core/java/android/service/credentials/BeginGetCredentialRequest.java +++ b/core/java/android/service/credentials/BeginGetCredentialRequest.java @@ -19,7 +19,6 @@ package android.service.credentials; import android.annotation.NonNull; import android.app.PendingIntent; import android.content.Intent; -import android.credentials.GetCredentialOption; import android.os.Parcel; import android.os.Parcelable; @@ -33,7 +32,7 @@ import java.util.Objects; /** * Query stage request for getting user's credentials from a given credential provider. * - *

This request contains a list of {@link GetCredentialOption} that have parameters + *

This request contains a list of {@link BeginGetCredentialOption} that have parameters * to be used to query credentials, and return a list of {@link CredentialEntry} to be set * on the {@link BeginGetCredentialResponse}. This list is then shown to the user on a selector. * diff --git a/core/java/android/service/credentials/CredentialProviderService.java b/core/java/android/service/credentials/CredentialProviderService.java index ee386c31a9847..f92fd3a4e3285 100644 --- a/core/java/android/service/credentials/CredentialProviderService.java +++ b/core/java/android/service/credentials/CredentialProviderService.java @@ -308,7 +308,7 @@ public abstract class CredentialProviderService extends Service { * *

This API denotes a query stage request for getting user's credentials from a given * credential provider. The request contains a list of - * {@link android.credentials.GetCredentialOption} that have parameters to be used for + * {@link BeginGetCredentialOption} that have parameters to be used for * populating candidate credentials, as a list of {@link CredentialEntry} to be set * on the {@link BeginGetCredentialResponse}. This list is then shown to the user on a * selector. diff --git a/core/java/android/service/credentials/GetCredentialRequest.java b/core/java/android/service/credentials/GetCredentialRequest.java index 4b946f016197e..e808ace96a13d 100644 --- a/core/java/android/service/credentials/GetCredentialRequest.java +++ b/core/java/android/service/credentials/GetCredentialRequest.java @@ -17,7 +17,7 @@ package android.service.credentials; import android.annotation.NonNull; -import android.credentials.GetCredentialOption; +import android.credentials.CredentialOption; import android.os.Parcel; import android.os.Parcelable; @@ -32,28 +32,30 @@ import com.android.internal.util.AnnotationValidations; */ public final class GetCredentialRequest implements Parcelable { /** Calling package of the app requesting for credentials. */ - private final @NonNull CallingAppInfo mCallingAppInfo; + @NonNull + private final CallingAppInfo mCallingAppInfo; /** * Holds parameters to be used for retrieving a specific type of credential. */ - private final @NonNull GetCredentialOption mGetCredentialOption; + @NonNull + private final CredentialOption mCredentialOption; public GetCredentialRequest(@NonNull CallingAppInfo callingAppInfo, - @NonNull GetCredentialOption getCredentialOption) { + @NonNull CredentialOption credentialOption) { this.mCallingAppInfo = callingAppInfo; - this.mGetCredentialOption = getCredentialOption; + this.mCredentialOption = credentialOption; } private GetCredentialRequest(@NonNull Parcel in) { mCallingAppInfo = in.readTypedObject(CallingAppInfo.CREATOR); AnnotationValidations.validate(NonNull.class, null, mCallingAppInfo); - mGetCredentialOption = in.readTypedObject(GetCredentialOption.CREATOR); - AnnotationValidations.validate(NonNull.class, null, mGetCredentialOption); + mCredentialOption = in.readTypedObject(CredentialOption.CREATOR); + AnnotationValidations.validate(NonNull.class, null, mCredentialOption); } - public static final @NonNull Creator CREATOR = - new Creator() { + @NonNull public static final Creator CREATOR = + new Creator<>() { @Override public GetCredentialRequest createFromParcel(Parcel in) { return new GetCredentialRequest(in); @@ -73,20 +75,22 @@ public final class GetCredentialRequest implements Parcelable { @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeTypedObject(mCallingAppInfo, flags); - dest.writeTypedObject(mGetCredentialOption, flags); + dest.writeTypedObject(mCredentialOption, flags); } /** * Returns info pertaining to the app requesting credentials. */ - public @NonNull CallingAppInfo getCallingAppInfo() { + @NonNull + public CallingAppInfo getCallingAppInfo() { return mCallingAppInfo; } /** * Returns the parameters needed to return a given type of credential. */ - public @NonNull GetCredentialOption getGetCredentialOption() { - return mGetCredentialOption; + @NonNull + public CredentialOption getGetCredentialOption() { + return mCredentialOption; } } diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt index a48cd2b164516..7b53e26caefbd 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt @@ -24,7 +24,7 @@ import android.content.Intent import android.content.pm.SigningInfo import android.credentials.CreateCredentialRequest import android.credentials.Credential.TYPE_PASSWORD_CREDENTIAL -import android.credentials.GetCredentialOption +import android.credentials.CredentialOption import android.credentials.GetCredentialRequest import android.credentials.ui.Constants import android.credentials.ui.Entry @@ -496,8 +496,8 @@ class CredentialManagerRepo( GetCredentialRequest.Builder( Bundle() ) - .addGetCredentialOption( - GetCredentialOption( + .addCredentialOption( + CredentialOption( TYPE_PUBLIC_KEY_CREDENTIAL, Bundle(), Bundle(), /*isSystemProviderRequired=*/ diff --git a/packages/CredentialManager/src/com/android/credentialmanager/jetpack/developer/GetCredentialRequest.kt b/packages/CredentialManager/src/com/android/credentialmanager/jetpack/developer/GetCredentialRequest.kt index 5cb8d3b7bdde9..fdd57ffe82a02 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/jetpack/developer/GetCredentialRequest.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/jetpack/developer/GetCredentialRequest.kt @@ -61,7 +61,7 @@ class GetCredentialRequest constructor( @JvmStatic fun createFrom(from: android.credentials.GetCredentialRequest): GetCredentialRequest { return GetCredentialRequest( - from.getCredentialOptions.map { + from.credentialOptions.map { GetCredentialOption.createFrom( it.type, it.credentialRetrievalData, diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java index d9a6d5410a6a8..ff72ed7abf4df 100644 --- a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java +++ b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java @@ -29,8 +29,8 @@ import android.credentials.ClearCredentialStateRequest; import android.credentials.CreateCredentialException; import android.credentials.CreateCredentialRequest; import android.credentials.CredentialDescription; +import android.credentials.CredentialOption; import android.credentials.GetCredentialException; -import android.credentials.GetCredentialOption; import android.credentials.GetCredentialRequest; import android.credentials.IClearCredentialStateCallback; import android.credentials.ICreateCredentialCallback; @@ -268,10 +268,10 @@ public final class CredentialManagerService // All requested credential descriptions based on the given request. Set requestedCredentialDescriptions = - request.getGetCredentialOptions().stream().map( - getCredentialOption -> getCredentialOption + request.getCredentialOptions().stream().map( + credentialOption -> credentialOption .getCredentialRetrievalData() - .getString(GetCredentialOption + .getString(CredentialOption .FLATTENED_REQUEST)) .collect(Collectors.toSet()); @@ -342,11 +342,11 @@ public final class CredentialManagerService // Initiate all provider sessions List providerSessions = - initiateProviderSessions( - session, - request.getGetCredentialOptions().stream() - .map(GetCredentialOption::getType) - .collect(Collectors.toList())); + initiateProviderSessions( + session, + request.getCredentialOptions().stream() + .map(CredentialOption::getType) + .collect(Collectors.toList())); if (providerSessions.isEmpty()) { try { diff --git a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java index b4058ed19725d..dec34325bbddd 100644 --- a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java +++ b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java @@ -21,8 +21,8 @@ import android.annotation.Nullable; import android.annotation.UserIdInt; import android.content.Context; import android.content.Intent; +import android.credentials.CredentialOption; import android.credentials.GetCredentialException; -import android.credentials.GetCredentialOption; import android.credentials.GetCredentialResponse; import android.credentials.ui.Entry; import android.credentials.ui.GetCredentialProviderData; @@ -107,7 +107,7 @@ public final class ProviderGetSession extends ProviderSession { return new BeginGetCredentialOption( option.getType(), @@ -121,8 +121,8 @@ public final class ProviderGetSession extends ProviderSession providerCapabilities, android.credentials.GetCredentialRequest clientRequest ) { - List filteredOptions = new ArrayList<>(); - for (GetCredentialOption option : clientRequest.getGetCredentialOptions()) { + List filteredOptions = new ArrayList<>(); + for (CredentialOption option : clientRequest.getCredentialOptions()) { if (providerCapabilities.contains(option.getType())) { Log.i(TAG, "In createProviderRequest - capability found : " + option.getType()); @@ -135,7 +135,7 @@ public final class ProviderGetSession extends ProviderSession