Merge "Better biometric subtitle with createConfirmDeviceCredentialIntent() API"

This commit is contained in:
Chengfei Tao
2023-02-08 09:10:46 +00:00
committed by Android (Google) Code Review
3 changed files with 44 additions and 0 deletions

View File

@@ -187,6 +187,19 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan
return this;
}
/**
* Shows a default subtitle for the prompt if the subtitle would otherwise be
* null or empty. Currently for internal use only.
* @return This builder.
* @hide
*/
@RequiresPermission(USE_BIOMETRIC_INTERNAL)
@NonNull
public Builder setUseDefaultSubtitle() {
mPromptInfo.setUseDefaultSubtitle(true);
return this;
}
/**
* Optional: Sets a description that will be shown on the prompt.
* @param description The description to display.
@@ -628,6 +641,16 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan
return mPromptInfo.getSubtitle();
}
/**
* Whether to use a default subtitle. For internal use only.
* @return See {@link Builder#setUseDefaultSubtitle()}.
* @hide
*/
@RequiresPermission(USE_BIOMETRIC_INTERNAL)
public boolean shouldUseDefaultSubtitle() {
return mPromptInfo.isUseDefaultSubtitle();
}
/**
* Gets the description for the prompt, as set by {@link Builder#setDescription(CharSequence)}.
* @return The description for the prompt, or null if the prompt has no description.

View File

@@ -33,6 +33,7 @@ public class PromptInfo implements Parcelable {
@NonNull private CharSequence mTitle;
private boolean mUseDefaultTitle;
@Nullable private CharSequence mSubtitle;
private boolean mUseDefaultSubtitle;
@Nullable private CharSequence mDescription;
@Nullable private CharSequence mDeviceCredentialTitle;
@Nullable private CharSequence mDeviceCredentialSubtitle;
@@ -56,6 +57,7 @@ public class PromptInfo implements Parcelable {
mTitle = in.readCharSequence();
mUseDefaultTitle = in.readBoolean();
mSubtitle = in.readCharSequence();
mUseDefaultSubtitle = in.readBoolean();
mDescription = in.readCharSequence();
mDeviceCredentialTitle = in.readCharSequence();
mDeviceCredentialSubtitle = in.readCharSequence();
@@ -94,6 +96,7 @@ public class PromptInfo implements Parcelable {
dest.writeCharSequence(mTitle);
dest.writeBoolean(mUseDefaultTitle);
dest.writeCharSequence(mSubtitle);
dest.writeBoolean(mUseDefaultSubtitle);
dest.writeCharSequence(mDescription);
dest.writeCharSequence(mDeviceCredentialTitle);
dest.writeCharSequence(mDeviceCredentialSubtitle);
@@ -128,6 +131,8 @@ public class PromptInfo implements Parcelable {
return true;
} else if (mUseDefaultTitle) {
return true;
} else if (mUseDefaultSubtitle) {
return true;
} else if (mDeviceCredentialTitle != null) {
return true;
} else if (mDeviceCredentialSubtitle != null) {
@@ -154,6 +159,10 @@ public class PromptInfo implements Parcelable {
mSubtitle = subtitle;
}
public void setUseDefaultSubtitle(boolean useDefaultSubtitle) {
mUseDefaultSubtitle = useDefaultSubtitle;
}
public void setDescription(CharSequence description) {
mDescription = description;
}
@@ -227,6 +236,10 @@ public class PromptInfo implements Parcelable {
return mSubtitle;
}
public boolean isUseDefaultSubtitle() {
return mUseDefaultSubtitle;
}
public CharSequence getDescription() {
return mDescription;
}

View File

@@ -563,6 +563,14 @@ public class BiometricService extends SystemService {
}
}
// Set the default subtitle if necessary.
if (promptInfo.isUseDefaultSubtitle()) {
if (TextUtils.isEmpty(promptInfo.getSubtitle())) {
promptInfo.setSubtitle(getContext()
.getString(R.string.biometric_dialog_default_subtitle));
}
}
final long requestId = mRequestCounter.get();
mHandler.post(() -> handleAuthenticate(
token, requestId, operationId, userId, receiver, opPackageName, promptInfo));