Replace deprecated KeyguardManager API with new BiometricPrompt one

Use BiometricPrompt to replace KeyguardManager#createConfirmDeviceCredentialIntent

Bug: 124249685
Test: manual test
Change-Id: I7a05b8f1b08471cf9f09b3d4ce1bedc7cd529e72
This commit is contained in:
Arc Wang
2019-02-20 13:45:51 +08:00
parent 0acd013f03
commit 79a3ae860e
2 changed files with 31 additions and 20 deletions

View File

@@ -27,6 +27,9 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.graphics.drawable.Drawable; 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;
import android.net.ConnectivityManager.NetworkCallback; import android.net.ConnectivityManager.NetworkCallback;
import android.net.LinkAddress; import android.net.LinkAddress;
@@ -578,21 +581,43 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
if (keyguardManager.isKeyguardSecure()) { if (keyguardManager.isKeyguardSecure()) {
// Show authentication screen to confirm credentials (pin, pattern or password) for // Show authentication screen to confirm credentials (pin, pattern or password) for
// the current user of the device. // the current user of the device.
final String title = mContext.getString(
R.string.lockpassword_confirm_your_pattern_header);
final String description = String.format( final String description = String.format(
mContext.getString(R.string.wifi_sharing_message), mContext.getString(R.string.wifi_sharing_message),
mAccessPoint.getSsidStr()); mAccessPoint.getSsidStr());
final Intent intent = keyguardManager.createConfirmDeviceCredentialIntent(
mContext.getString(R.string.lockpassword_confirm_your_pattern_header), final BiometricPrompt.Builder builder = new BiometricPrompt.Builder(mContext)
description); .setTitle(title)
if (intent != null) { .setDescription(description);
mFragment.startActivityForResult(intent,
WifiNetworkDetailsFragment.REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS); 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 { } else {
launchWifiDppConfiguratorActivity(); 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. * Sign in to the captive portal found on this wifi network associated with this preference.
*/ */

View File

@@ -17,11 +17,9 @@ package com.android.settings.wifi.details;
import static com.android.settings.wifi.WifiSettings.WIFI_DIALOG_ID; import static com.android.settings.wifi.WifiSettings.WIFI_DIALOG_ID;
import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.Bundle; import android.os.Bundle;
@@ -53,8 +51,6 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
private static final String TAG = "WifiNetworkDetailsFrg"; private static final String TAG = "WifiNetworkDetailsFrg";
public static final int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 1;
private AccessPoint mAccessPoint; private AccessPoint mAccessPoint;
private WifiDetailPreferenceController mWifiDetailPreferenceController; private WifiDetailPreferenceController mWifiDetailPreferenceController;
@@ -146,14 +142,4 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
return controllers; 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();
}
}
} }