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
This commit is contained in:
@@ -123,8 +123,10 @@ public class FaceSettings extends DashboardFragment {
|
|||||||
Preference appPref = findPreference(FaceSettingsAppPreferenceController.KEY);
|
Preference appPref = findPreference(FaceSettingsAppPreferenceController.KEY);
|
||||||
Preference attentionPref = findPreference(FaceSettingsAttentionPreferenceController.KEY);
|
Preference attentionPref = findPreference(FaceSettingsAttentionPreferenceController.KEY);
|
||||||
Preference confirmPref = findPreference(FaceSettingsConfirmPreferenceController.KEY);
|
Preference confirmPref = findPreference(FaceSettingsConfirmPreferenceController.KEY);
|
||||||
|
Preference bypassPref =
|
||||||
|
findPreference(FaceSettingsLockscreenBypassPreferenceController.KEY);
|
||||||
mTogglePreferences = new ArrayList<>(
|
mTogglePreferences = new ArrayList<>(
|
||||||
Arrays.asList(keyguardPref, appPref, attentionPref, confirmPref));
|
Arrays.asList(keyguardPref, appPref, attentionPref, confirmPref, bypassPref));
|
||||||
|
|
||||||
mRemoveButton = findPreference(FaceSettingsRemoveButtonPreferenceController.KEY);
|
mRemoveButton = findPreference(FaceSettingsRemoveButtonPreferenceController.KEY);
|
||||||
mEnrollButton = findPreference(FaceSettingsEnrollButtonPreferenceController.KEY);
|
mEnrollButton = findPreference(FaceSettingsEnrollButtonPreferenceController.KEY);
|
||||||
@@ -142,6 +144,7 @@ public class FaceSettings extends DashboardFragment {
|
|||||||
// Don't show keyguard controller for work profile settings.
|
// Don't show keyguard controller for work profile settings.
|
||||||
if (mUserManager.isManagedProfile(mUserId)) {
|
if (mUserManager.isManagedProfile(mUserId)) {
|
||||||
removePreference(FaceSettingsKeyguardPreferenceController.KEY);
|
removePreference(FaceSettingsKeyguardPreferenceController.KEY);
|
||||||
|
removePreference(FaceSettingsLockscreenBypassPreferenceController.KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
@@ -248,6 +251,7 @@ public class FaceSettings extends DashboardFragment {
|
|||||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
controllers.add(new FaceSettingsVideoPreferenceController(context));
|
controllers.add(new FaceSettingsVideoPreferenceController(context));
|
||||||
controllers.add(new FaceSettingsKeyguardPreferenceController(context));
|
controllers.add(new FaceSettingsKeyguardPreferenceController(context));
|
||||||
|
controllers.add(new FaceSettingsLockscreenBypassPreferenceController(context));
|
||||||
controllers.add(new FaceSettingsAppPreferenceController(context));
|
controllers.add(new FaceSettingsAppPreferenceController(context));
|
||||||
controllers.add(new FaceSettingsAttentionPreferenceController(context));
|
controllers.add(new FaceSettingsAttentionPreferenceController(context));
|
||||||
controllers.add(new FaceSettingsRemoveButtonPreferenceController(context));
|
controllers.add(new FaceSettingsRemoveButtonPreferenceController(context));
|
||||||
|
@@ -18,16 +18,13 @@ package com.android.settings.biometrics.face;
|
|||||||
|
|
||||||
import static android.provider.Settings.Secure.FACE_UNLOCK_KEYGUARD_ENABLED;
|
import static android.provider.Settings.Secure.FACE_UNLOCK_KEYGUARD_ENABLED;
|
||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.hardware.face.FaceManager;
|
import android.hardware.face.FaceManager;
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference controller for Face settings page controlling the ability to unlock the phone
|
* Preference controller for Face settings page controlling the ability to unlock the phone
|
||||||
@@ -87,13 +84,4 @@ public class FaceSettingsKeyguardPreferenceController extends FaceSettingsPrefer
|
|||||||
preference.setEnabled(true);
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -21,14 +21,22 @@ import android.content.pm.PackageManager;
|
|||||||
import android.hardware.face.FaceManager;
|
import android.hardware.face.FaceManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import androidx.preference.Preference;
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
|
||||||
|
|
||||||
public class FaceSettingsLockscreenBypassPreferenceController extends TogglePreferenceController {
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
|
|
||||||
|
public class FaceSettingsLockscreenBypassPreferenceController
|
||||||
|
extends FaceSettingsPreferenceController {
|
||||||
|
|
||||||
|
static final String KEY = "security_lockscreen_bypass";
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
protected FaceManager mFaceManager;
|
protected FaceManager mFaceManager;
|
||||||
|
|
||||||
|
public FaceSettingsLockscreenBypassPreferenceController(Context context) {
|
||||||
|
this(context, KEY);
|
||||||
|
}
|
||||||
|
|
||||||
public FaceSettingsLockscreenBypassPreferenceController(Context context, String preferenceKey) {
|
public FaceSettingsLockscreenBypassPreferenceController(Context context, String preferenceKey) {
|
||||||
super(context, preferenceKey);
|
super(context, preferenceKey);
|
||||||
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) {
|
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) {
|
||||||
@@ -51,6 +59,20 @@ public class FaceSettingsLockscreenBypassPreferenceController extends TogglePref
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
if (mFaceManager != null && mFaceManager.isHardwareDetected()) {
|
if (mFaceManager != null && mFaceManager.isHardwareDetected()) {
|
||||||
|
@@ -16,7 +16,9 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics.face;
|
package com.android.settings.biometrics.face;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.UserHandle;
|
||||||
|
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
|
|
||||||
@@ -38,4 +40,13 @@ public abstract class FaceSettingsPreferenceController extends TogglePreferenceC
|
|||||||
protected int getUserId() {
|
protected int getUserId() {
|
||||||
return mUserId;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -51,7 +51,7 @@ public class FaceSettingsLockscreenBypassPreferenceControllerTest {
|
|||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mPreference = new SwitchPreference(mContext);
|
mPreference = new SwitchPreference(mContext);
|
||||||
|
|
||||||
mController = new FaceSettingsLockscreenBypassPreferenceController(mContext, "TestKey");
|
mController = new FaceSettingsLockscreenBypassPreferenceController(mContext);
|
||||||
ReflectionHelpers.setField(mController, "mFaceManager", mFaceManager);
|
ReflectionHelpers.setField(mController, "mFaceManager", mFaceManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user