From 79a3ae860e7bdac5f7f8bc64d12b49989085deff Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Wed, 20 Feb 2019 13:45:51 +0800 Subject: [PATCH] Replace deprecated KeyguardManager API with new BiometricPrompt one Use BiometricPrompt to replace KeyguardManager#createConfirmDeviceCredentialIntent Bug: 124249685 Test: manual test Change-Id: I7a05b8f1b08471cf9f09b3d4ce1bedc7cd529e72 --- .../WifiDetailPreferenceController.java | 37 ++++++++++++++++--- .../details/WifiNetworkDetailsFragment.java | 14 ------- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index 8e72f65825f..7be441a4cf6 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -27,6 +27,9 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.drawable.Drawable; +import android.hardware.biometrics.BiometricPrompt; +import android.os.CancellationSignal; +import android.os.Looper; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.LinkAddress; @@ -578,21 +581,43 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController if (keyguardManager.isKeyguardSecure()) { // Show authentication screen to confirm credentials (pin, pattern or password) for // the current user of the device. + final String title = mContext.getString( + R.string.lockpassword_confirm_your_pattern_header); final String description = String.format( mContext.getString(R.string.wifi_sharing_message), mAccessPoint.getSsidStr()); - final Intent intent = keyguardManager.createConfirmDeviceCredentialIntent( - mContext.getString(R.string.lockpassword_confirm_your_pattern_header), - description); - if (intent != null) { - mFragment.startActivityForResult(intent, - WifiNetworkDetailsFragment.REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS); + + final BiometricPrompt.Builder builder = new BiometricPrompt.Builder(mContext) + .setTitle(title) + .setDescription(description); + + if (keyguardManager.isDeviceSecure()) { + builder.setAllowDeviceCredential(true); } + + final BiometricPrompt bp = builder.build(); + final Handler handler = new Handler(Looper.getMainLooper()); + bp.authenticate(new CancellationSignal(), + runnable -> handler.post(runnable), + mAuthenticationCallback); } else { launchWifiDppConfiguratorActivity(); } } + private BiometricPrompt.AuthenticationCallback mAuthenticationCallback = + new BiometricPrompt.AuthenticationCallback() { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + launchWifiDppConfiguratorActivity(); + } + + @Override + public void onAuthenticationError(int errorCode, CharSequence errString) { + //Do nothing + } + }; + /** * Sign in to the captive portal found on this wifi network associated with this preference. */ diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java index 225ddbcf77c..ab470bf0685 100644 --- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java +++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java @@ -17,11 +17,9 @@ package com.android.settings.wifi.details; import static com.android.settings.wifi.WifiSettings.WIFI_DIALOG_ID; -import android.app.Activity; import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.Context; -import android.content.Intent; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.os.Bundle; @@ -53,8 +51,6 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { private static final String TAG = "WifiNetworkDetailsFrg"; - public static final int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 1; - private AccessPoint mAccessPoint; private WifiDetailPreferenceController mWifiDetailPreferenceController; @@ -146,14 +142,4 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { return controllers; } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS - && resultCode == Activity.RESULT_OK) { - mWifiDetailPreferenceController.launchWifiDppConfiguratorActivity(); - } - } }