OSDN Git Service

Replace deprecated KeyguardManager API with new BiometricPrompt one
authorArc Wang <arcwang@google.com>
Wed, 20 Feb 2019 05:45:51 +0000 (13:45 +0800)
committerArc Wang <arcwang@google.com>
Wed, 20 Feb 2019 06:17:45 +0000 (14:17 +0800)
Use BiometricPrompt to replace KeyguardManager#createConfirmDeviceCredentialIntent

Bug: 124249685
Test: manual test
Change-Id: I7a05b8f1b08471cf9f09b3d4ce1bedc7cd529e72

src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java

index 8e72f65..7be441a 100644 (file)
@@ -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.
      */
index 225ddbc..ab470bf 100644 (file)
@@ -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();
-        }
-    }
 }