From 58a5be44012f0263dac5ffc8a65b065821faefc2 Mon Sep 17 00:00:00 2001 From: Edgar Wang Date: Mon, 29 Jul 2019 16:55:31 +0800 Subject: [PATCH] Add skip lock screen in Notification & security lock screen settings Users may have trouble finding this setting in face auth. Heard this from dogfood/executive feedback and customer support discussion. So add Skip Lock Screen preference in Display > Lock screen display > What to show > and App & Notifications > Notifications > Lock Screen > Bug: 138458558 Test: robotest & manual Change-Id: I10e420821423821743d65b00c8b7e6d4d1224e00 --- res/xml/configure_notification_settings.xml | 7 +++++++ res/xml/security_lockscreen_settings.xml | 7 +++++++ .../settings/biometrics/face/FaceSettings.java | 2 -- ...ttingsLockscreenBypassPreferenceController.java | 13 +++++++++---- ...gsLockscreenBypassPreferenceControllerTest.java | 14 +++++++++++++- 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/res/xml/configure_notification_settings.xml b/res/xml/configure_notification_settings.xml index 63f67510490..89464fbc5db 100644 --- a/res/xml/configure_notification_settings.xml +++ b/res/xml/configure_notification_settings.xml @@ -72,6 +72,13 @@ android:summary="@string/lock_screen_notifs_redact_work_summary" settings:controller="com.android.settings.notification.RedactNotificationPreferenceController" /> + + + + 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/FaceSettingsLockscreenBypassPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java index 8d1b5438693..15fab260dc9 100644 --- a/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java @@ -19,6 +19,8 @@ package com.android.settings.biometrics.face; import android.content.Context; import android.content.pm.PackageManager; import android.hardware.face.FaceManager; +import android.os.UserHandle; +import android.os.UserManager; import android.provider.Settings; import androidx.preference.Preference; @@ -32,16 +34,15 @@ public class FaceSettingsLockscreenBypassPreferenceController @VisibleForTesting protected FaceManager mFaceManager; - - public FaceSettingsLockscreenBypassPreferenceController(Context context) { - this(context, KEY); - } + private UserManager mUserManager; public FaceSettingsLockscreenBypassPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) { mFaceManager = context.getSystemService(FaceManager.class); } + + mUserManager = context.getSystemService(UserManager.class); } @Override @@ -75,6 +76,10 @@ public class FaceSettingsLockscreenBypassPreferenceController @Override public int getAvailabilityStatus() { + if (mUserManager.isManagedProfile(UserHandle.myUserId())) { + return UNSUPPORTED_ON_DEVICE; + } + if (mFaceManager != null && mFaceManager.isHardwareDetected()) { return mFaceManager.hasEnrolledTemplates() ? AVAILABLE : DISABLED_DEPENDENT_SETTING; } else { 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 cbcebfc751b..7f7fa4fed13 100644 --- a/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java @@ -18,10 +18,12 @@ package com.android.settings.biometrics.face; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.when; import android.content.Context; import android.hardware.face.FaceManager; +import android.os.UserManager; import android.provider.Settings; import androidx.preference.SwitchPreference; @@ -41,6 +43,8 @@ public class FaceSettingsLockscreenBypassPreferenceControllerTest { @Mock private FaceManager mFaceManager; private SwitchPreference mPreference; + @Mock + private UserManager mUserManager; private Context mContext; private FaceSettingsLockscreenBypassPreferenceController mController; @@ -51,8 +55,9 @@ public class FaceSettingsLockscreenBypassPreferenceControllerTest { mContext = RuntimeEnvironment.application; mPreference = new SwitchPreference(mContext); - mController = new FaceSettingsLockscreenBypassPreferenceController(mContext); + mController = new FaceSettingsLockscreenBypassPreferenceController(mContext, "test_key"); ReflectionHelpers.setField(mController, "mFaceManager", mFaceManager); + ReflectionHelpers.setField(mController, "mUserManager", mUserManager); } @Test @@ -62,6 +67,13 @@ public class FaceSettingsLockscreenBypassPreferenceControllerTest { assertThat(mController.isAvailable()).isTrue(); } + @Test + public void isAvailable_isManagedProfile_shouldReturnUnsupported() { + when(mUserManager.isManagedProfile(anyInt())).thenReturn(true); + + assertThat(mController.isAvailable()).isFalse(); + } + @Test public void onPreferenceChange_settingIsUpdated() { boolean defaultValue = mContext.getResources().getBoolean(