Merge "Make framework classes non final"

This commit is contained in:
Reema Bajwa
2022-12-29 03:09:19 +00:00
committed by Android (Google) Code Review
6 changed files with 75 additions and 96 deletions

View File

@@ -39711,7 +39711,7 @@ package android.service.controls.templates {
package android.service.credentials {
public final class Action implements android.os.Parcelable {
public class Action implements android.os.Parcelable {
ctor public Action(@NonNull android.app.slice.Slice, @NonNull android.app.PendingIntent);
method public int describeContents();
method @NonNull public android.app.PendingIntent getPendingIntent();
@@ -39720,7 +39720,7 @@ package android.service.credentials {
field @NonNull public static final android.os.Parcelable.Creator<android.service.credentials.Action> CREATOR;
}
public final class BeginCreateCredentialRequest implements android.os.Parcelable {
public class BeginCreateCredentialRequest implements android.os.Parcelable {
ctor public BeginCreateCredentialRequest(@NonNull android.service.credentials.CallingAppInfo, @NonNull String, @NonNull android.os.Bundle);
method public int describeContents();
method @NonNull public android.service.credentials.CallingAppInfo getCallingAppInfo();
@@ -39746,7 +39746,7 @@ package android.service.credentials {
method @NonNull public android.service.credentials.BeginCreateCredentialResponse.Builder setRemoteCreateEntry(@Nullable android.service.credentials.CreateEntry);
}
public final class BeginGetCredentialOption implements android.os.Parcelable {
public class BeginGetCredentialOption implements android.os.Parcelable {
ctor public BeginGetCredentialOption(@NonNull String, @NonNull android.os.Bundle);
method public int describeContents();
method @NonNull public android.os.Bundle getCandidateQueryData();
@@ -39808,7 +39808,7 @@ package android.service.credentials {
field @NonNull public static final android.os.Parcelable.Creator<android.service.credentials.CreateCredentialRequest> CREATOR;
}
public final class CreateEntry implements android.os.Parcelable {
public class CreateEntry implements android.os.Parcelable {
ctor public CreateEntry(@NonNull android.app.slice.Slice, @NonNull android.app.PendingIntent);
method public int describeContents();
method @NonNull public android.app.PendingIntent getPendingIntent();
@@ -39817,7 +39817,8 @@ package android.service.credentials {
field @NonNull public static final android.os.Parcelable.Creator<android.service.credentials.CreateEntry> CREATOR;
}
public final class CredentialEntry implements android.os.Parcelable {
public class CredentialEntry implements android.os.Parcelable {
ctor public CredentialEntry(@NonNull String, @NonNull android.app.slice.Slice, @NonNull android.app.PendingIntent, boolean);
method public int describeContents();
method @NonNull public android.app.PendingIntent getPendingIntent();
method @NonNull public android.app.slice.Slice getSlice();
@@ -39827,12 +39828,6 @@ package android.service.credentials {
field @NonNull public static final android.os.Parcelable.Creator<android.service.credentials.CredentialEntry> CREATOR;
}
public static final class CredentialEntry.Builder {
ctor public CredentialEntry.Builder(@NonNull String, @NonNull android.app.slice.Slice, @NonNull android.app.PendingIntent);
method @NonNull public android.service.credentials.CredentialEntry build();
method @NonNull public android.service.credentials.CredentialEntry.Builder setAutoSelectAllowed(@NonNull boolean);
}
public abstract class CredentialProviderService extends android.app.Service {
ctor public CredentialProviderService();
method public abstract void onBeginCreateCredential(@NonNull android.service.credentials.BeginCreateCredentialRequest, @NonNull android.os.CancellationSignal, @NonNull android.os.OutcomeReceiver<android.service.credentials.BeginCreateCredentialResponse,android.credentials.CreateCredentialException>);

View File

@@ -17,6 +17,7 @@
package android.service.credentials;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.app.PendingIntent;
import android.app.slice.Slice;
import android.os.Parcel;
@@ -27,8 +28,14 @@ import java.util.Objects;
/**
* An action defined by the provider that intents into the provider's app for specific
* user actions.
*
* <p>Any class that derives this class must only add extra field values to the {@code slice}
* object passed into the constructor. Any other field will not be parceled through. If the
* derived class has custom parceling implementation, this class will not be able to unpack
* the parcel without having access to that implementation.
*/
public final class Action implements Parcelable {
@SuppressLint("ParcelNotFinal")
public class Action implements Parcelable {
/** Slice object containing display content to be displayed with this action on the UI. */
private final @NonNull Slice mSlice;
/** The pending intent to be invoked when the user selects this action. */

View File

@@ -17,6 +17,7 @@
package android.service.credentials;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -29,8 +30,14 @@ import java.util.Objects;
* Request for beginning a create credential request.
*
* See {@link BeginCreateCredentialResponse} for the counterpart response
*
* <p>Any class that derives this class must only add extra field values to the {@code slice}
* object passed into the constructor. Any other field will not be parceled through. If the
* derived class has custom parceling implementation, this class will not be able to unpack
* the parcel without having access to that implementation.
*/
public final class BeginCreateCredentialRequest implements Parcelable {
@SuppressLint("ParcelNotFinal")
public class BeginCreateCredentialRequest implements Parcelable {
private final @NonNull CallingAppInfo mCallingAppInfo;
private final @NonNull String mType;
private final @NonNull Bundle mData;

View File

@@ -19,6 +19,7 @@ package android.service.credentials;
import static java.util.Objects.requireNonNull;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -30,8 +31,14 @@ import com.android.internal.util.Preconditions;
* A specific type of credential request to be sent to the provider during the query phase of
* a get flow. This request contains limited parameters needed to populate a list of
* {@link CredentialEntry} on the {@link BeginGetCredentialResponse}.
*
* <p>Any class that derives this class must only add extra field values to the {@code slice}
* object passed into the constructor. Any other field will not be parceled through. If the
* derived class has custom parceling implementation, this class will not be able to unpack
* the parcel without having access to that implementation.
*/
public final class BeginGetCredentialOption implements Parcelable {
@SuppressLint("ParcelNotFinal")
public class BeginGetCredentialOption implements Parcelable {
/**
* The requested credential type.

View File

@@ -17,6 +17,7 @@
package android.service.credentials;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.app.PendingIntent;
import android.app.slice.Slice;
import android.os.Parcel;
@@ -25,8 +26,14 @@ import android.os.Parcelable;
/**
* An entry to be shown on the UI. This entry represents where the credential to be created will
* be stored. Examples include user's account, family group etc.
*
* <p>Any class that derives this class must only add extra field values to the {@code slice}
* object passed into the constructor. Any other field will not be parceled through. If the
* derived class has custom parceling implementation, this class will not be able to unpack
* the parcel without having access to that implementation.
*/
public final class CreateEntry implements Parcelable {
@SuppressLint("ParcelNotFinal")
public class CreateEntry implements Parcelable {
private final @NonNull Slice mSlice;
private final @NonNull PendingIntent mPendingIntent;

View File

@@ -17,6 +17,7 @@
package android.service.credentials;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.app.PendingIntent;
import android.app.slice.Slice;
import android.credentials.GetCredentialResponse;
@@ -28,10 +29,25 @@ import com.android.internal.util.Preconditions;
import java.util.Objects;
/**
* A credential entry that is displayed on the account selector UI. Each entry corresponds to
* something that the user can select.
* A credential entry that is to be displayed on the account selector that is presented to the
* user.
*
* <p>If user selects this entry, the corresponding {@code pendingIntent} will be invoked to
* launch activities that require some user engagement before getting the credential
* corresponding to this entry, e.g. authentication, confirmation etc.
*
* Once the activity fulfills the required user engagement, the {@link android.app.Activity}
* result should be set to {@link android.app.Activity#RESULT_OK}, and the
* {@link CredentialProviderService#EXTRA_GET_CREDENTIAL_RESPONSE} must be set with a
* {@link GetCredentialResponse} object.
*
* <p>Any class that derives this class must only add extra field values to the {@code slice}
* object passed into the constructor. Any other field will not be parceled through. If the
* derived class has custom parceling implementation, this class will not be able to unpack
* the parcel without having access to that implementation.
*/
public final class CredentialEntry implements Parcelable {
@SuppressLint("ParcelNotFinal")
public class CredentialEntry implements Parcelable {
/** The type of the credential entry to be shown on the UI. */
private final @NonNull String mType;
@@ -43,13 +59,25 @@ public final class CredentialEntry implements Parcelable {
private final @NonNull PendingIntent mPendingIntent;
/** A flag denoting whether auto-select is enabled for this entry. */
private final @NonNull boolean mAutoSelectAllowed;
private final boolean mAutoSelectAllowed;
private CredentialEntry(@NonNull String type, @NonNull Slice slice,
@NonNull PendingIntent pendingIntent, @NonNull boolean autoSelectAllowed) {
mType = type;
mSlice = slice;
mPendingIntent = pendingIntent;
/**
* Constructs an instance of the credential entry to be displayed on the UI
* @param type the type of credential underlying this credential entry
* @param slice the content to be displayed with this entry on the UI
* @param pendingIntent the pendingIntent to be invoked when this entry is selected by the user
* @param autoSelectAllowed whether this entry should be auto selected if it is the only one
* on the selector
*
* @throws NullPointerException If {@code slice}, or {@code pendingIntent} is null.
* @throws IllegalArgumentException If {@code type} is null or empty, or if
* {@code pendingIntent} is null.
*/
public CredentialEntry(@NonNull String type, @NonNull Slice slice,
@NonNull PendingIntent pendingIntent, boolean autoSelectAllowed) {
mType = Preconditions.checkStringNotEmpty(type, "type must not be null");
mSlice = Objects.requireNonNull(slice, "slice must not be null");
mPendingIntent = Objects.requireNonNull(pendingIntent, "pendingintent must not be null");
mAutoSelectAllowed = autoSelectAllowed;
}
@@ -113,76 +141,4 @@ public final class CredentialEntry implements Parcelable {
public boolean isAutoSelectAllowed() {
return mAutoSelectAllowed;
}
/**
* Builder for {@link CredentialEntry}.
*/
public static final class Builder {
private String mType;
private Slice mSlice;
private PendingIntent mPendingIntent;
private boolean mAutoSelectAllowed = false;
/**
* Creates a builder for a {@link CredentialEntry} that should invoke a
* {@link PendingIntent} when selected by the user.
*
* <p>The {@code pendingIntent} can be used to launch activities that require some user
* engagement before getting the credential corresponding to this entry,
* e.g. authentication, confirmation etc.
* Once the activity fulfills the required user engagement, the
* {@link android.app.Activity} result should be set to
* {@link android.app.Activity#RESULT_OK}, and the
* {@link CredentialProviderService#EXTRA_GET_CREDENTIAL_RESPONSE} must be set with a
* {@link GetCredentialResponse} object.
*
* @param type the type of credential underlying this credential entry
* @param slice the content to be displayed with this entry on the UI
* @param pendingIntent the pendingIntent to be invoked when this entry is selected by the
* user
*
* @throws NullPointerException If {@code slice}, or {@code pendingIntent} is null.
* @throws IllegalArgumentException If {@code type} is null or empty, or if
* {@code pendingIntent} was not created with {@link PendingIntent#getActivity}
* or {@link PendingIntent#getActivities}.
*/
public Builder(@NonNull String type, @NonNull Slice slice,
@NonNull PendingIntent pendingIntent) {
mType = Preconditions.checkStringNotEmpty(type, "type must not be "
+ "null, or empty");
mSlice = Objects.requireNonNull(slice,
"slice must not be null");
mPendingIntent = Objects.requireNonNull(pendingIntent,
"pendingIntent must not be null");
if (!mPendingIntent.isActivity()) {
throw new IllegalStateException("Pending intent must start an activity");
}
}
/**
* Sets whether the entry is allowed to be auto selected by the framework.
* The default value is set to false.
*
* <p> The entry is only auto selected if it is the only entry on the user selector,
* AND the developer has also enabled auto select, while building the request.
*/
public @NonNull Builder setAutoSelectAllowed(@NonNull boolean autoSelectAllowed) {
mAutoSelectAllowed = autoSelectAllowed;
return this;
}
/**
* Creates a new {@link CredentialEntry} instance.
*
* @throws NullPointerException If {@code slice} is null.
* @throws IllegalArgumentException If {@code type} is null, or empty.
* @throws IllegalStateException If neither {@code pendingIntent} nor {@code credential}
* is set, or if both are set.
*/
public @NonNull CredentialEntry build() {
Preconditions.checkState(mPendingIntent != null,
"pendingIntent must not be null");
return new CredentialEntry(mType, mSlice, mPendingIntent, mAutoSelectAllowed);
}
}
}