Make bypass controller consistent with rest of face unlock settings
1) Should only be shown for owner profile
2) Should be disabled if A) not enrolled, B) DevicePolicyManager, C) HAL issue
Fixes: 134700640
Test: Manual test of conditions above
Change-Id: Id72db59c662df6c529c98aafd610de8c86c77ebd
diff --git a/src/com/android/settings/biometrics/face/FaceSettings.java b/src/com/android/settings/biometrics/face/FaceSettings.java
index 9766f34..39d69b0 100644
--- a/src/com/android/settings/biometrics/face/FaceSettings.java
+++ b/src/com/android/settings/biometrics/face/FaceSettings.java
@@ -123,8 +123,10 @@
Preference appPref = findPreference(FaceSettingsAppPreferenceController.KEY);
Preference attentionPref = findPreference(FaceSettingsAttentionPreferenceController.KEY);
Preference confirmPref = findPreference(FaceSettingsConfirmPreferenceController.KEY);
+ Preference bypassPref =
+ findPreference(FaceSettingsLockscreenBypassPreferenceController.KEY);
mTogglePreferences = new ArrayList<>(
- Arrays.asList(keyguardPref, appPref, attentionPref, confirmPref));
+ Arrays.asList(keyguardPref, appPref, attentionPref, confirmPref, bypassPref));
mRemoveButton = findPreference(FaceSettingsRemoveButtonPreferenceController.KEY);
mEnrollButton = findPreference(FaceSettingsEnrollButtonPreferenceController.KEY);
@@ -142,6 +144,7 @@
// Don't show keyguard controller for work profile settings.
if (mUserManager.isManagedProfile(mUserId)) {
removePreference(FaceSettingsKeyguardPreferenceController.KEY);
+ removePreference(FaceSettingsLockscreenBypassPreferenceController.KEY);
}
if (savedInstanceState != null) {
@@ -248,6 +251,7 @@
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new FaceSettingsVideoPreferenceController(context));
controllers.add(new FaceSettingsKeyguardPreferenceController(context));
+ controllers.add(new FaceSettingsLockscreenBypassPreferenceController(context));
controllers.add(new FaceSettingsAppPreferenceController(context));
controllers.add(new FaceSettingsAttentionPreferenceController(context));
controllers.add(new FaceSettingsRemoveButtonPreferenceController(context));
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java
index c64455a..9ec1ad1 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java
@@ -18,16 +18,13 @@
import static android.provider.Settings.Secure.FACE_UNLOCK_KEYGUARD_ENABLED;
-import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.hardware.face.FaceManager;
-import android.os.UserHandle;
import android.provider.Settings;
import androidx.preference.Preference;
import com.android.settings.Utils;
-import com.android.settings.core.TogglePreferenceController;
/**
* Preference controller for Face settings page controlling the ability to unlock the phone
@@ -87,13 +84,4 @@
preference.setEnabled(true);
}
}
-
- private boolean adminDisabled() {
- DevicePolicyManager dpm =
- (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
- return dpm != null &&
- (dpm.getKeyguardDisabledFeatures(null, UserHandle.myUserId())
- & DevicePolicyManager.KEYGUARD_DISABLE_FACE)
- != 0;
- }
}
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java
index 5b155c4..8d1b543 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java
@@ -21,14 +21,22 @@
import android.hardware.face.FaceManager;
import android.provider.Settings;
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.settings.core.TogglePreferenceController;
+import androidx.preference.Preference;
-public class FaceSettingsLockscreenBypassPreferenceController extends TogglePreferenceController {
+import com.android.internal.annotations.VisibleForTesting;
+
+public class FaceSettingsLockscreenBypassPreferenceController
+ extends FaceSettingsPreferenceController {
+
+ static final String KEY = "security_lockscreen_bypass";
@VisibleForTesting
protected FaceManager mFaceManager;
+ public FaceSettingsLockscreenBypassPreferenceController(Context context) {
+ this(context, KEY);
+ }
+
public FaceSettingsLockscreenBypassPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) {
@@ -52,6 +60,20 @@
}
@Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ if (!FaceSettings.isAvailable(mContext)) {
+ preference.setEnabled(false);
+ } else if (adminDisabled()) {
+ preference.setEnabled(false);
+ } else if (!mFaceManager.hasEnrolledTemplates(getUserId())) {
+ preference.setEnabled(false);
+ } else {
+ preference.setEnabled(true);
+ }
+ }
+
+ @Override
public int getAvailabilityStatus() {
if (mFaceManager != null && mFaceManager.isHardwareDetected()) {
return mFaceManager.hasEnrolledTemplates() ? AVAILABLE : DISABLED_DEPENDENT_SETTING;
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsPreferenceController.java
index b8ac118..55e093b 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsPreferenceController.java
@@ -16,7 +16,9 @@
package com.android.settings.biometrics.face;
+import android.app.admin.DevicePolicyManager;
import android.content.Context;
+import android.os.UserHandle;
import com.android.settings.core.TogglePreferenceController;
@@ -38,4 +40,13 @@
protected int getUserId() {
return mUserId;
}
+
+ protected boolean adminDisabled() {
+ DevicePolicyManager dpm =
+ (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
+ return dpm != null &&
+ (dpm.getKeyguardDisabledFeatures(null, UserHandle.myUserId())
+ & DevicePolicyManager.KEYGUARD_DISABLE_FACE)
+ != 0;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java
index ae4a13b..cbcebfc 100644
--- a/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java
@@ -51,7 +51,7 @@
mContext = RuntimeEnvironment.application;
mPreference = new SwitchPreference(mContext);
- mController = new FaceSettingsLockscreenBypassPreferenceController(mContext, "TestKey");
+ mController = new FaceSettingsLockscreenBypassPreferenceController(mContext);
ReflectionHelpers.setField(mController, "mFaceManager", mFaceManager);
}