diff --git a/res/values/strings.xml b/res/values/strings.xml
index f284e308070..cc4739d9ddf 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -841,7 +841,9 @@
Disabled by admin
Security status
-
+
+ Screen lock, face unlock
+
Screen lock, fingerprint
Screen lock
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index effbd513e7f..72dd91b8e67 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -21,6 +21,7 @@ import static com.android.settings.security.EncryptionStatusPreferenceController
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
import android.provider.SearchIndexableResource;
@@ -181,7 +182,12 @@ public class SecuritySettings extends DashboardFragment {
if (listening) {
final FingerprintManager fpm =
Utils.getFingerprintManagerOrNull(mContext);
- if (fpm != null && fpm.isHardwareDetected()) {
+ final FaceManager faceManager =
+ Utils.getFaceManagerOrNull(mContext);
+ if (faceManager != null && faceManager.isHardwareDetected()) {
+ mSummaryLoader.setSummary(this,
+ mContext.getString(R.string.security_dashboard_summary_face));
+ } else if (fpm != null && fpm.isHardwareDetected()) {
mSummaryLoader.setSummary(this,
mContext.getString(R.string.security_dashboard_summary));
} else {
diff --git a/tests/robotests/src/com/android/settings/security/SecuritySettingsTest.java b/tests/robotests/src/com/android/settings/security/SecuritySettingsTest.java
index 7d93ec21e79..f3cc4593ff5 100644
--- a/tests/robotests/src/com/android/settings/security/SecuritySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/security/SecuritySettingsTest.java
@@ -22,6 +22,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.pm.PackageManager;
+import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
import com.android.settings.R;
@@ -44,6 +45,8 @@ public class SecuritySettingsTest {
private SummaryLoader mSummaryLoader;
@Mock
private FingerprintManager mFingerprintManager;
+ @Mock
+ private FaceManager mFaceManager;
private SecuritySettings.SummaryProvider mSummaryProvider;
@Before
@@ -51,7 +54,8 @@ public class SecuritySettingsTest {
MockitoAnnotations.initMocks(this);
when(mContext.getSystemService(Context.FINGERPRINT_SERVICE))
.thenReturn(mFingerprintManager);
-
+ when(mContext.getSystemService(Context.FACE_SERVICE))
+ .thenReturn(mFaceManager);
mSummaryProvider = new SecuritySettings.SummaryProvider(mContext, mSummaryLoader);
}
@@ -62,8 +66,21 @@ public class SecuritySettingsTest {
verifyNoMoreInteractions(mSummaryLoader);
}
+ @Test
+ public void testSummaryProvider_hasFace_hasStaticSummary() {
+ when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE))
+ .thenReturn(true);
+ when(mFaceManager.isHardwareDetected()).thenReturn(true);
+
+ mSummaryProvider.setListening(true);
+
+ verify(mContext).getString(R.string.security_dashboard_summary_face);
+ }
+
@Test
public void testSummaryProvider_hasFingerPrint_hasStaticSummary() {
+ when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE))
+ .thenReturn(false);
when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
.thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
@@ -74,9 +91,11 @@ public class SecuritySettingsTest {
}
@Test
- public void testSummaryProvider_noFpFeature_shouldSetSummaryWithNoFingerprint() {
+ public void testSummaryProvider_noFpFeature_shouldSetSummaryWithNoBiometrics() {
when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
.thenReturn(false);
+ when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE))
+ .thenReturn(false);
mSummaryProvider.setListening(true);
@@ -84,7 +103,9 @@ public class SecuritySettingsTest {
}
@Test
- public void testSummaryProvider_noFpHardware_shouldSetSummaryWithNoFingerprint() {
+ public void testSummaryProvider_noFpHardware_shouldSetSummaryWithNoBiometrics() {
+ when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE))
+ .thenReturn(false);
when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
.thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
@@ -93,4 +114,29 @@ public class SecuritySettingsTest {
verify(mContext).getString(R.string.security_dashboard_summary_no_fingerprint);
}
+
+ @Test
+ public void testSummaryProvider_noFaceFeature_shouldSetSummaryWithNoBiometrics() {
+ when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
+ .thenReturn(false);
+ when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE))
+ .thenReturn(false);
+
+ mSummaryProvider.setListening(true);
+
+ verify(mContext).getString(R.string.security_dashboard_summary_no_fingerprint);
+ }
+
+ @Test
+ public void testSummaryProvider_noFaceHardware_shouldSetSummaryWithNoBiometrics() {
+ when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE))
+ .thenReturn(true);
+ when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
+ .thenReturn(false);
+ when(mFaceManager.isHardwareDetected()).thenReturn(false);
+
+ mSummaryProvider.setListening(true);
+
+ verify(mContext).getString(R.string.security_dashboard_summary_no_fingerprint);
+ }
}