diff --git a/res/xml/privacy_dashboard_settings.xml b/res/xml/privacy_dashboard_settings.xml index 7057ec570b9..aa789b90424 100644 --- a/res/xml/privacy_dashboard_settings.xml +++ b/res/xml/privacy_dashboard_settings.xml @@ -62,14 +62,6 @@ android:summary="@string/summary_placeholder" settings:searchable="false"/> - - - - - @@ -39,6 +40,12 @@ android:title="@string/security_settings_face_settings_use_face_for_apps" app:keywords="@string/keywords_face_unlock" app:controller="com.android.settings.biometrics.face.FaceSettingsAppPreferenceController"/> + ( - 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 @@ public class FaceSettings extends DashboardFragment { // 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 @@ public class FaceSettings extends DashboardFragment { final List 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 c64455af30b..9ec1ad1eb74 100644 --- a/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java @@ -18,16 +18,13 @@ package com.android.settings.biometrics.face; 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 @@ public class FaceSettingsKeyguardPreferenceController extends FaceSettingsPrefer 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/security/LockscreenBypassPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java similarity index 67% rename from src/com/android/settings/security/LockscreenBypassPreferenceController.java rename to src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java index dfa127b3003..8d1b5438693 100644 --- a/src/com/android/settings/security/LockscreenBypassPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java @@ -11,25 +11,33 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License. + * limitations under the License */ -package com.android.settings.security; +package com.android.settings.biometrics.face; import android.content.Context; import android.content.pm.PackageManager; 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 LockscreenBypassPreferenceController 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 LockscreenBypassPreferenceController(Context context, String preferenceKey) { + public FaceSettingsLockscreenBypassPreferenceController(Context context) { + this(context, KEY); + } + + public FaceSettingsLockscreenBypassPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) { mFaceManager = context.getSystemService(FaceManager.class); @@ -51,6 +59,20 @@ public class LockscreenBypassPreferenceController extends TogglePreferenceContro 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 public int getAvailabilityStatus() { if (mFaceManager != null && mFaceManager.isHardwareDetected()) { diff --git a/src/com/android/settings/biometrics/face/FaceSettingsPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsPreferenceController.java index b8ac118551e..55e093ba79a 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 @@ public abstract class FaceSettingsPreferenceController extends TogglePreferenceC 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/security/LockscreenBypassPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java similarity index 90% rename from tests/robotests/src/com/android/settings/security/LockscreenBypassPreferenceControllerTest.java rename to tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java index 1b8817b8d67..cbcebfc751b 100644 --- a/tests/robotests/src/com/android/settings/security/LockscreenBypassPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceControllerTest.java @@ -14,7 +14,7 @@ * limitations under the License */ -package com.android.settings.security; +package com.android.settings.biometrics.face; import static com.google.common.truth.Truth.assertThat; @@ -36,14 +36,14 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) -public class LockscreenBypassPreferenceControllerTest { +public class FaceSettingsLockscreenBypassPreferenceControllerTest { @Mock private FaceManager mFaceManager; private SwitchPreference mPreference; private Context mContext; - private LockscreenBypassPreferenceController mController; + private FaceSettingsLockscreenBypassPreferenceController mController; @Before public void setUp() { @@ -51,7 +51,7 @@ public class LockscreenBypassPreferenceControllerTest { mContext = RuntimeEnvironment.application; mPreference = new SwitchPreference(mContext); - mController = new LockscreenBypassPreferenceController(mContext, "TestKey"); + mController = new FaceSettingsLockscreenBypassPreferenceController(mContext); ReflectionHelpers.setField(mController, "mFaceManager", mFaceManager); }