Commit 54f5d106 authored by Sujie Zhu's avatar Sujie Zhu Committed by Commit Bot

[Autofill Auth][Clank] Add isBiometricAvailable check when showing toggle

We use BiometricManager to check whether there is an enrolled biometric.
For backward compatibility, we use FingerprintManagerCompat to check
enrolled fingerprint. We won't show the FIDO authentication toggle when
biometric is not available.

The BiometricManager requires USE_BIOMETRIC permission, which is a NORMAL
permission (auto-granted when installation, can not be revoked by user,
and won't prompt dialog to the user to ask for permission).

Local tested video (Googlers only): https://drive.google.com/a/google.com/file/d/1xP46WY3u73cxKvrCGM_5AfbaX5xcgUG-/view?usp=sharing

Bug: 949269
Change-Id: I8f7f4f5df98bc81731a6fdbeefb5674331695ca9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2039973
Commit-Queue: Sujie Zhu <sujiezhu@google.com>
Reviewed-by: default avatarManas Verma <manasverma@google.com>
Reviewed-by: default avatarsebsg <sebsg@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarJan Wilken Dörrie <jdoerrie@chromium.org>
Reviewed-by: default avatarJared Saul <jsaul@google.com>
Cr-Commit-Position: refs/heads/master@{#739461}
parent 78c9c025
...@@ -54,6 +54,7 @@ by a child template that "extends" this file. ...@@ -54,6 +54,7 @@ by a child template that "extends" this file.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/> <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
<uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/> <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="29"/> <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="29"/>
<uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/> <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
<uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/> <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
<uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/> <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
......
...@@ -7,7 +7,10 @@ package org.chromium.chrome.browser.autofill.settings; ...@@ -7,7 +7,10 @@ package org.chromium.chrome.browser.autofill.settings;
import android.content.Context; import android.content.Context;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.hardware.biometrics.BiometricManager;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v7.content.res.AppCompatResources; import android.support.v7.content.res.AppCompatResources;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat; import android.support.v7.preference.PreferenceFragmentCompat;
...@@ -79,8 +82,8 @@ public class AutofillPaymentMethodsFragment extends PreferenceFragmentCompat ...@@ -79,8 +82,8 @@ public class AutofillPaymentMethodsFragment extends PreferenceFragmentCompat
}); });
getPreferenceScreen().addPreference(autofillSwitch); getPreferenceScreen().addPreference(autofillSwitch);
if (PersonalDataManager.getInstance().isFidoAuthenticationAvailable()) { if (isBiometricAvailable()
// TODO(crbug.com/949269): Add FingerPrint availability check. && PersonalDataManager.getInstance().isFidoAuthenticationAvailable()) {
ChromeSwitchPreference fidoAuthSwitch = ChromeSwitchPreference fidoAuthSwitch =
new ChromeSwitchPreference(getStyledContext(), null); new ChromeSwitchPreference(getStyledContext(), null);
fidoAuthSwitch.setTitle(R.string.enable_credit_card_fido_auth_label); fidoAuthSwitch.setTitle(R.string.enable_credit_card_fido_auth_label);
...@@ -170,6 +173,23 @@ public class AutofillPaymentMethodsFragment extends PreferenceFragmentCompat ...@@ -170,6 +173,23 @@ public class AutofillPaymentMethodsFragment extends PreferenceFragmentCompat
} }
} }
private boolean isBiometricAvailable() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
BiometricManager biometricManager =
getStyledContext().getSystemService(BiometricManager.class);
return biometricManager != null
&& biometricManager.canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS;
} else {
// For API level < Q, we will use FingerprintManagerCompat to check enrolled
// fingerprints. Note that for API level lower than 23, FingerprintManagerCompat behaves
// like no fingerprint hardware and no enrolled fingerprints.
FingerprintManagerCompat fingerprintManager =
FingerprintManagerCompat.from(getStyledContext());
return fingerprintManager != null && fingerprintManager.isHardwareDetected()
&& fingerprintManager.hasEnrolledFingerprints();
}
}
@Override @Override
public void onPersonalDataChanged() { public void onPersonalDataChanged() {
rebuildPage(); rebuildPage();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment