Loading src/com/android/settings/safetycenter/BiometricsSafetySource.java +8 −6 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.Bundle; import android.os.UserHandle; import android.safetycenter.SafetyEvent; import android.safetycenter.SafetySourceData; import android.safetycenter.SafetySourceSeverity; import android.safetycenter.SafetySourceStatus; import com.android.settings.R; Loading @@ -40,7 +41,8 @@ public final class BiometricsSafetySource { public static final String SAFETY_SOURCE_ID = "Biometrics"; private BiometricsSafetySource() {} private BiometricsSafetySource() { } /** Sets biometric safety data for Safety Center. */ public static void setSafetySourceData(Context context, SafetyEvent safetyEvent) { Loading Loading @@ -119,12 +121,12 @@ public final class BiometricsSafetySource { private static void setBiometricSafetySourceData(Context context, String title, String summary, Intent clickIntent, boolean enabled, boolean hasEnrolled, SafetyEvent safetyEvent) { final PendingIntent pendingIntent = createPendingIntent(context, clickIntent); final int statusLevel = enabled && hasEnrolled ? SafetySourceStatus.STATUS_LEVEL_OK : SafetySourceStatus.STATUS_LEVEL_NONE; final int severityLevel = enabled && hasEnrolled ? SafetySourceSeverity.LEVEL_INFORMATION : SafetySourceSeverity.LEVEL_UNSPECIFIED; final SafetySourceStatus status = new SafetySourceStatus.Builder( title, summary, statusLevel, pendingIntent).setEnabled(enabled).build(); final SafetySourceStatus status = new SafetySourceStatus.Builder(title, summary, severityLevel).setPendingIntent(pendingIntent).setEnabled(enabled).build(); final SafetySourceData safetySourceData = new SafetySourceData.Builder().setStatus(status).build(); Loading src/com/android/settings/safetycenter/LockScreenSafetySource.java +15 −8 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.os.UserHandle; import android.safetycenter.SafetyEvent; import android.safetycenter.SafetySourceData; import android.safetycenter.SafetySourceIssue; import android.safetycenter.SafetySourceSeverity; import android.safetycenter.SafetySourceStatus; import android.safetycenter.SafetySourceStatus.IconAction; Loading Loading @@ -64,20 +65,26 @@ public final class LockScreenSafetySource { screenLockPreferenceDetailsUtils.getLaunchChooseLockGenericFragmentIntent()); final IconAction gearMenuIconAction = createGearMenuIconAction(context, screenLockPreferenceDetailsUtils); final boolean enabled = !screenLockPreferenceDetailsUtils.isPasswordQualityManaged(userId, admin); final boolean isLockPatternSecure = screenLockPreferenceDetailsUtils.isLockPatternSecure(); final int severityLevel = enabled ? isLockPatternSecure ? SafetySourceSeverity.LEVEL_INFORMATION : SafetySourceSeverity.LEVEL_RECOMMENDATION : SafetySourceSeverity.LEVEL_UNSPECIFIED; final SafetySourceStatus status = new SafetySourceStatus.Builder( context.getString(R.string.unlock_set_unlock_launch_picker_title), screenLockPreferenceDetailsUtils.getSummary(UserHandle.myUserId()), screenLockPreferenceDetailsUtils.isLockPatternSecure() ? SafetySourceStatus.STATUS_LEVEL_OK : SafetySourceStatus.STATUS_LEVEL_RECOMMENDATION, pendingIntent) .setEnabled( !screenLockPreferenceDetailsUtils.isPasswordQualityManaged(userId, admin)) severityLevel) .setPendingIntent(pendingIntent) .setEnabled(enabled) .setIconAction(gearMenuIconAction).build(); final SafetySourceData.Builder safetySourceDataBuilder = new SafetySourceData.Builder().setStatus(status); if (!screenLockPreferenceDetailsUtils.isLockPatternSecure()) { if (enabled && !isLockPatternSecure) { safetySourceDataBuilder.addIssue(createNoScreenLockIssue(context, pendingIntent)); } final SafetySourceData safetySourceData = safetySourceDataBuilder.build(); Loading Loading @@ -130,7 +137,7 @@ public final class LockScreenSafetySource { NO_SCREEN_LOCK_ISSUE_ID, context.getString(R.string.no_screen_lock_issue_title), context.getString(R.string.no_screen_lock_issue_summary), SafetySourceIssue.SEVERITY_LEVEL_RECOMMENDATION, SafetySourceSeverity.LEVEL_RECOMMENDATION, NO_SCREEN_LOCK_ISSUE_TYPE_ID) .setIssueCategory(SafetySourceIssue.ISSUE_CATEGORY_DEVICE) .addAction(action).build(); Loading tests/unit/src/com/android/settings/safetycenter/BiometricsSafetySourceTest.java +24 −23 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import android.hardware.fingerprint.FingerprintManager; import android.os.UserHandle; import android.safetycenter.SafetyEvent; import android.safetycenter.SafetySourceData; import android.safetycenter.SafetySourceSeverity; import android.safetycenter.SafetySourceStatus; import androidx.test.core.app.ApplicationProvider; Loading Loading @@ -427,7 +428,7 @@ public class BiometricsSafetySourceTest { } @Test public void setSafetySourceData_faceAndFingerprint_whenFaceEnrolled_setsOkStatus() { public void setSafetySourceData_faceAndFingerprint_whenFaceEnrolled_setsInfoSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(true); Loading @@ -440,12 +441,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_OK); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_INFORMATION); } @Test public void setSafetySourceData_faceAndFingerprint_whenFingerprintEnrolled_setsOkStatus() { public void setSafetySourceData_faceAndFingerprint_whenFingerprintEnrolled_setsInfoSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(true); Loading @@ -458,12 +459,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_OK); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_INFORMATION); } @Test public void setSafetySourceData_faceAndFingerprint_whenNotEnrolled_setsNoneStatus() { public void setSafetySourceData_faceAndFingerprint_whenNotEnrolled_setsUnspSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(true); Loading @@ -476,12 +477,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_NONE); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); } @Test public void setSafetySourceData_fingerprint_whenEnrolled_setsOKStatus() { public void setSafetySourceData_fingerprint_whenEnrolled_setsInfoSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(false); Loading @@ -493,12 +494,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_OK); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_INFORMATION); } @Test public void setSafetySourceData_fingerprint_whenNotEnrolled_setsNoneStatus() { public void setSafetySourceData_fingerprint_whenNotEnrolled_setsUnspSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(false); Loading @@ -510,12 +511,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_NONE); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); } @Test public void setSafetySourceData_face_whenEnrolled_setsOKStatus() { public void setSafetySourceData_face_whenEnrolled_setsInfoSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(false); when(mFaceManager.isHardwareDetected()).thenReturn(true); Loading @@ -527,12 +528,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_OK); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_INFORMATION); } @Test public void setSafetySourceData_face_whenNotEnrolled_setsNoneStatus() { public void setSafetySourceData_face_whenNotEnrolled_setsUnspSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(false); when(mFaceManager.isHardwareDetected()).thenReturn(true); Loading @@ -544,8 +545,8 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_NONE); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); } private void assertSafetySourceDisabledDataSetWithSingularSummary(String expectedTitleResName, Loading Loading @@ -604,8 +605,8 @@ public class BiometricsSafetySourceTest { assertThat(safetySourceStatus.getTitle().toString()).isEqualTo(expectedTitle); assertThat(safetySourceStatus.getSummary().toString()).isEqualTo(expectedSummary); assertThat(safetySourceStatus.isEnabled()).isFalse(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_NONE); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); final Intent clickIntent = safetySourceStatus.getPendingIntent().getIntent(); assertThat(clickIntent).isNotNull(); Loading tests/unit/src/com/android/settings/safetycenter/LockScreenSafetySourceTest.java +98 −10 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.Intent; import android.safetycenter.SafetyEvent; import android.safetycenter.SafetySourceData; import android.safetycenter.SafetySourceIssue; import android.safetycenter.SafetySourceSeverity; import android.safetycenter.SafetySourceStatus; import android.safetycenter.SafetySourceStatus.IconAction; Loading Loading @@ -161,10 +162,33 @@ public class LockScreenSafetySourceTest { } @Test public void setSafetySourceData_whenLockPatternIsSecure_setStatusLevelOk() { public void setSafetySourceData_whenPwdQualIsNotMan_whenLockPattIsSec_setStatusLevelInfo() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(false); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class); verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(LockScreenSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceData safetySourceData = captor.getValue(); SafetySourceStatus safetySourceStatus = safetySourceData.getStatus(); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_INFORMATION); } @Test public void setSafetySourceData_whenPwdQualIsNotMan_whenLockPattIsNotSec_setStatusLevelRec() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(false); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(false); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); Loading @@ -175,15 +199,38 @@ public class LockScreenSafetySourceTest { SafetySourceData safetySourceData = captor.getValue(); SafetySourceStatus safetySourceStatus = safetySourceData.getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_OK); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_RECOMMENDATION); } @Test public void setSafetySourceData_whenLockPatternIsNotSecure_setStatusLevelRecommendation() { public void setSafetySourceData_whenPwdQualIsMan_whenLockPattIsSec_setStatusLevelUnsp() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(true); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class); verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(LockScreenSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceData safetySourceData = captor.getValue(); SafetySourceStatus safetySourceStatus = safetySourceData.getStatus(); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); } @Test public void setSafetySourceData_whenPwdQualIsMan_whenLockPattIsNotSec_setStatusLevelUnsp() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(false); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(true); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); Loading @@ -194,15 +241,17 @@ public class LockScreenSafetySourceTest { SafetySourceData safetySourceData = captor.getValue(); SafetySourceStatus safetySourceStatus = safetySourceData.getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_RECOMMENDATION); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); } @Test public void setSafetySourceData_whenLockPatternIsSecure_doesNotSetIssues() { public void setSafetySourceData_whenPwdQualIsNotMan_whenLockPattIsSec_doesNotSetIssues() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(false); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); Loading @@ -216,10 +265,12 @@ public class LockScreenSafetySourceTest { } @Test public void setSafetySourceData_whenLockPatternIsNotSecure_setsIssue() { public void setSafetySourceData_whenPwdQualIsNotMan_whenLockPattIsNotSec_setsIssue() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(false); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(false); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); Loading @@ -238,8 +289,7 @@ public class LockScreenSafetySourceTest { assertThat(issue.getSummary().toString()).isEqualTo( ResourcesUtils.getResourcesString(mApplicationContext, "no_screen_lock_issue_summary")); assertThat(issue.getSeverityLevel()).isEqualTo( SafetySourceIssue.SEVERITY_LEVEL_RECOMMENDATION); assertThat(issue.getSeverityLevel()).isEqualTo(SafetySourceSeverity.LEVEL_RECOMMENDATION); assertThat(issue.getIssueTypeId()).isEqualTo( LockScreenSafetySource.NO_SCREEN_LOCK_ISSUE_TYPE_ID); assertThat(issue.getIssueCategory()).isEqualTo(SafetySourceIssue.ISSUE_CATEGORY_DEVICE); Loading @@ -253,6 +303,44 @@ public class LockScreenSafetySourceTest { .isEqualTo(FAKE_ACTION_CHOOSE_LOCK_GENERIC_FRAGMENT); } @Test public void setSafetySourceData_whenPwdQualIsMan_whenLockPattIsSec_doesNotSetIssues() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(true); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class); verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), any(), captor.capture(), any()); SafetySourceData safetySourceData = captor.getValue(); assertThat(safetySourceData.getIssues()).isEmpty(); } @Test public void setSafetySourceData_whenPwdQualIsMan_whenLockPattIsNotSec_doesNotSetIssues() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(false); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(true); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class); verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(LockScreenSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceData safetySourceData = captor.getValue(); assertThat(safetySourceData.getIssues()).isEmpty(); } @Test public void setSafetySourceData_whenPasswordQualityIsManaged_setDisabled() { whenScreenLockIsEnabled(); Loading Loading
src/com/android/settings/safetycenter/BiometricsSafetySource.java +8 −6 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.Bundle; import android.os.UserHandle; import android.safetycenter.SafetyEvent; import android.safetycenter.SafetySourceData; import android.safetycenter.SafetySourceSeverity; import android.safetycenter.SafetySourceStatus; import com.android.settings.R; Loading @@ -40,7 +41,8 @@ public final class BiometricsSafetySource { public static final String SAFETY_SOURCE_ID = "Biometrics"; private BiometricsSafetySource() {} private BiometricsSafetySource() { } /** Sets biometric safety data for Safety Center. */ public static void setSafetySourceData(Context context, SafetyEvent safetyEvent) { Loading Loading @@ -119,12 +121,12 @@ public final class BiometricsSafetySource { private static void setBiometricSafetySourceData(Context context, String title, String summary, Intent clickIntent, boolean enabled, boolean hasEnrolled, SafetyEvent safetyEvent) { final PendingIntent pendingIntent = createPendingIntent(context, clickIntent); final int statusLevel = enabled && hasEnrolled ? SafetySourceStatus.STATUS_LEVEL_OK : SafetySourceStatus.STATUS_LEVEL_NONE; final int severityLevel = enabled && hasEnrolled ? SafetySourceSeverity.LEVEL_INFORMATION : SafetySourceSeverity.LEVEL_UNSPECIFIED; final SafetySourceStatus status = new SafetySourceStatus.Builder( title, summary, statusLevel, pendingIntent).setEnabled(enabled).build(); final SafetySourceStatus status = new SafetySourceStatus.Builder(title, summary, severityLevel).setPendingIntent(pendingIntent).setEnabled(enabled).build(); final SafetySourceData safetySourceData = new SafetySourceData.Builder().setStatus(status).build(); Loading
src/com/android/settings/safetycenter/LockScreenSafetySource.java +15 −8 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.os.UserHandle; import android.safetycenter.SafetyEvent; import android.safetycenter.SafetySourceData; import android.safetycenter.SafetySourceIssue; import android.safetycenter.SafetySourceSeverity; import android.safetycenter.SafetySourceStatus; import android.safetycenter.SafetySourceStatus.IconAction; Loading Loading @@ -64,20 +65,26 @@ public final class LockScreenSafetySource { screenLockPreferenceDetailsUtils.getLaunchChooseLockGenericFragmentIntent()); final IconAction gearMenuIconAction = createGearMenuIconAction(context, screenLockPreferenceDetailsUtils); final boolean enabled = !screenLockPreferenceDetailsUtils.isPasswordQualityManaged(userId, admin); final boolean isLockPatternSecure = screenLockPreferenceDetailsUtils.isLockPatternSecure(); final int severityLevel = enabled ? isLockPatternSecure ? SafetySourceSeverity.LEVEL_INFORMATION : SafetySourceSeverity.LEVEL_RECOMMENDATION : SafetySourceSeverity.LEVEL_UNSPECIFIED; final SafetySourceStatus status = new SafetySourceStatus.Builder( context.getString(R.string.unlock_set_unlock_launch_picker_title), screenLockPreferenceDetailsUtils.getSummary(UserHandle.myUserId()), screenLockPreferenceDetailsUtils.isLockPatternSecure() ? SafetySourceStatus.STATUS_LEVEL_OK : SafetySourceStatus.STATUS_LEVEL_RECOMMENDATION, pendingIntent) .setEnabled( !screenLockPreferenceDetailsUtils.isPasswordQualityManaged(userId, admin)) severityLevel) .setPendingIntent(pendingIntent) .setEnabled(enabled) .setIconAction(gearMenuIconAction).build(); final SafetySourceData.Builder safetySourceDataBuilder = new SafetySourceData.Builder().setStatus(status); if (!screenLockPreferenceDetailsUtils.isLockPatternSecure()) { if (enabled && !isLockPatternSecure) { safetySourceDataBuilder.addIssue(createNoScreenLockIssue(context, pendingIntent)); } final SafetySourceData safetySourceData = safetySourceDataBuilder.build(); Loading Loading @@ -130,7 +137,7 @@ public final class LockScreenSafetySource { NO_SCREEN_LOCK_ISSUE_ID, context.getString(R.string.no_screen_lock_issue_title), context.getString(R.string.no_screen_lock_issue_summary), SafetySourceIssue.SEVERITY_LEVEL_RECOMMENDATION, SafetySourceSeverity.LEVEL_RECOMMENDATION, NO_SCREEN_LOCK_ISSUE_TYPE_ID) .setIssueCategory(SafetySourceIssue.ISSUE_CATEGORY_DEVICE) .addAction(action).build(); Loading
tests/unit/src/com/android/settings/safetycenter/BiometricsSafetySourceTest.java +24 −23 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import android.hardware.fingerprint.FingerprintManager; import android.os.UserHandle; import android.safetycenter.SafetyEvent; import android.safetycenter.SafetySourceData; import android.safetycenter.SafetySourceSeverity; import android.safetycenter.SafetySourceStatus; import androidx.test.core.app.ApplicationProvider; Loading Loading @@ -427,7 +428,7 @@ public class BiometricsSafetySourceTest { } @Test public void setSafetySourceData_faceAndFingerprint_whenFaceEnrolled_setsOkStatus() { public void setSafetySourceData_faceAndFingerprint_whenFaceEnrolled_setsInfoSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(true); Loading @@ -440,12 +441,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_OK); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_INFORMATION); } @Test public void setSafetySourceData_faceAndFingerprint_whenFingerprintEnrolled_setsOkStatus() { public void setSafetySourceData_faceAndFingerprint_whenFingerprintEnrolled_setsInfoSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(true); Loading @@ -458,12 +459,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_OK); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_INFORMATION); } @Test public void setSafetySourceData_faceAndFingerprint_whenNotEnrolled_setsNoneStatus() { public void setSafetySourceData_faceAndFingerprint_whenNotEnrolled_setsUnspSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(true); Loading @@ -476,12 +477,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_NONE); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); } @Test public void setSafetySourceData_fingerprint_whenEnrolled_setsOKStatus() { public void setSafetySourceData_fingerprint_whenEnrolled_setsInfoSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(false); Loading @@ -493,12 +494,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_OK); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_INFORMATION); } @Test public void setSafetySourceData_fingerprint_whenNotEnrolled_setsNoneStatus() { public void setSafetySourceData_fingerprint_whenNotEnrolled_setsUnspSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(false); Loading @@ -510,12 +511,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_NONE); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); } @Test public void setSafetySourceData_face_whenEnrolled_setsOKStatus() { public void setSafetySourceData_face_whenEnrolled_setsInfoSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(false); when(mFaceManager.isHardwareDetected()).thenReturn(true); Loading @@ -527,12 +528,12 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_OK); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_INFORMATION); } @Test public void setSafetySourceData_face_whenNotEnrolled_setsNoneStatus() { public void setSafetySourceData_face_whenNotEnrolled_setsUnspSeverity() { when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(false); when(mFaceManager.isHardwareDetected()).thenReturn(true); Loading @@ -544,8 +545,8 @@ public class BiometricsSafetySourceTest { verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(BiometricsSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceStatus safetySourceStatus = captor.getValue().getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_NONE); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); } private void assertSafetySourceDisabledDataSetWithSingularSummary(String expectedTitleResName, Loading Loading @@ -604,8 +605,8 @@ public class BiometricsSafetySourceTest { assertThat(safetySourceStatus.getTitle().toString()).isEqualTo(expectedTitle); assertThat(safetySourceStatus.getSummary().toString()).isEqualTo(expectedSummary); assertThat(safetySourceStatus.isEnabled()).isFalse(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_NONE); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); final Intent clickIntent = safetySourceStatus.getPendingIntent().getIntent(); assertThat(clickIntent).isNotNull(); Loading
tests/unit/src/com/android/settings/safetycenter/LockScreenSafetySourceTest.java +98 −10 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.Intent; import android.safetycenter.SafetyEvent; import android.safetycenter.SafetySourceData; import android.safetycenter.SafetySourceIssue; import android.safetycenter.SafetySourceSeverity; import android.safetycenter.SafetySourceStatus; import android.safetycenter.SafetySourceStatus.IconAction; Loading Loading @@ -161,10 +162,33 @@ public class LockScreenSafetySourceTest { } @Test public void setSafetySourceData_whenLockPatternIsSecure_setStatusLevelOk() { public void setSafetySourceData_whenPwdQualIsNotMan_whenLockPattIsSec_setStatusLevelInfo() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(false); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class); verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(LockScreenSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceData safetySourceData = captor.getValue(); SafetySourceStatus safetySourceStatus = safetySourceData.getStatus(); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_INFORMATION); } @Test public void setSafetySourceData_whenPwdQualIsNotMan_whenLockPattIsNotSec_setStatusLevelRec() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(false); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(false); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); Loading @@ -175,15 +199,38 @@ public class LockScreenSafetySourceTest { SafetySourceData safetySourceData = captor.getValue(); SafetySourceStatus safetySourceStatus = safetySourceData.getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_OK); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_RECOMMENDATION); } @Test public void setSafetySourceData_whenLockPatternIsNotSecure_setStatusLevelRecommendation() { public void setSafetySourceData_whenPwdQualIsMan_whenLockPattIsSec_setStatusLevelUnsp() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(true); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class); verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(LockScreenSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceData safetySourceData = captor.getValue(); SafetySourceStatus safetySourceStatus = safetySourceData.getStatus(); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); } @Test public void setSafetySourceData_whenPwdQualIsMan_whenLockPattIsNotSec_setStatusLevelUnsp() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(false); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(true); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); Loading @@ -194,15 +241,17 @@ public class LockScreenSafetySourceTest { SafetySourceData safetySourceData = captor.getValue(); SafetySourceStatus safetySourceStatus = safetySourceData.getStatus(); assertThat(safetySourceStatus.getStatusLevel()) .isEqualTo(SafetySourceStatus.STATUS_LEVEL_RECOMMENDATION); assertThat(safetySourceStatus.getSeverityLevel()) .isEqualTo(SafetySourceSeverity.LEVEL_UNSPECIFIED); } @Test public void setSafetySourceData_whenLockPatternIsSecure_doesNotSetIssues() { public void setSafetySourceData_whenPwdQualIsNotMan_whenLockPattIsSec_doesNotSetIssues() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(false); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); Loading @@ -216,10 +265,12 @@ public class LockScreenSafetySourceTest { } @Test public void setSafetySourceData_whenLockPatternIsNotSecure_setsIssue() { public void setSafetySourceData_whenPwdQualIsNotMan_whenLockPattIsNotSec_setsIssue() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(false); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(false); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); Loading @@ -238,8 +289,7 @@ public class LockScreenSafetySourceTest { assertThat(issue.getSummary().toString()).isEqualTo( ResourcesUtils.getResourcesString(mApplicationContext, "no_screen_lock_issue_summary")); assertThat(issue.getSeverityLevel()).isEqualTo( SafetySourceIssue.SEVERITY_LEVEL_RECOMMENDATION); assertThat(issue.getSeverityLevel()).isEqualTo(SafetySourceSeverity.LEVEL_RECOMMENDATION); assertThat(issue.getIssueTypeId()).isEqualTo( LockScreenSafetySource.NO_SCREEN_LOCK_ISSUE_TYPE_ID); assertThat(issue.getIssueCategory()).isEqualTo(SafetySourceIssue.ISSUE_CATEGORY_DEVICE); Loading @@ -253,6 +303,44 @@ public class LockScreenSafetySourceTest { .isEqualTo(FAKE_ACTION_CHOOSE_LOCK_GENERIC_FRAGMENT); } @Test public void setSafetySourceData_whenPwdQualIsMan_whenLockPattIsSec_doesNotSetIssues() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(true); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class); verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), any(), captor.capture(), any()); SafetySourceData safetySourceData = captor.getValue(); assertThat(safetySourceData.getIssues()).isEmpty(); } @Test public void setSafetySourceData_whenPwdQualIsMan_whenLockPattIsNotSec_doesNotSetIssues() { whenScreenLockIsEnabled(); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(false); when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any())) .thenReturn(true); LockScreenSafetySource.setSafetySourceData(mApplicationContext, mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED); ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class); verify(mSafetyCenterManagerWrapper).setSafetySourceData( any(), eq(LockScreenSafetySource.SAFETY_SOURCE_ID), captor.capture(), any()); SafetySourceData safetySourceData = captor.getValue(); assertThat(safetySourceData.getIssues()).isEmpty(); } @Test public void setSafetySourceData_whenPasswordQualityIsManaged_setDisabled() { whenScreenLockIsEnabled(); Loading