diff --git a/res/drawable/ic_settings_safety_center.xml b/res/drawable/ic_settings_safety_center.xml new file mode 100644 index 00000000000..f43359fefd4 --- /dev/null +++ b/res/drawable/ic_settings_safety_center.xml @@ -0,0 +1,29 @@ + + + + + + \ No newline at end of file diff --git a/res/values/menu_keys.xml b/res/values/menu_keys.xml index e69664a3408..2841b699c97 100755 --- a/res/values/menu_keys.xml +++ b/res/values/menu_keys.xml @@ -26,6 +26,7 @@ top_level_display top_level_wallpaper top_level_accessibility + top_level_safety_center top_level_security top_level_privacy top_level_location diff --git a/res/values/strings.xml b/res/values/strings.xml index 05ed9c72394..ed867d2c4cf 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -722,6 +722,12 @@ Security status Screen lock, Find My Device, app security + + + Security & privacy + + + Permissions, screen lock, app security diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml index 042ce43999a..280c3f31bc3 100644 --- a/res/xml/top_level_settings.xml +++ b/res/xml/top_level_settings.xml @@ -116,6 +116,15 @@ settings:highlightableMenuKey="@string/menu_key_accessibility" settings:controller="com.android.settings.accessibility.TopLevelAccessibilityPreferenceController"/> + + + settings:highlightableMenuKey="@string/menu_key_privacy" + settings:controller="com.android.settings.privacy.TopLevelPrivacyEntryPreferenceController"/> intentCaptor = ArgumentCaptor.forClass(Intent.class); + + boolean preferenceHandled = mTopLevelSafetyCenterEntryPreferenceController + .handlePreferenceTreeClick(mPreference); + + assertThat(preferenceHandled).isTrue(); + verify(mContext).startActivity(intentCaptor.capture()); + assertThat(intentCaptor.getValue().getAction()).isEqualTo(Intent.ACTION_SAFETY_CENTER); + } + + @Test + public void handlePreferenceTreeClick_onStartActivityThrows_returnsFalse() { + doThrow(ActivityNotFoundException.class) + .when(mContext).startActivity(any(Intent.class)); + + boolean preferenceHandled = mTopLevelSafetyCenterEntryPreferenceController + .handlePreferenceTreeClick(mPreference); + + assertThat(preferenceHandled).isFalse(); + } + + @Test + public void getAvailabilityStatus_whenSafetyCenterDisabled_returnsUnavailable() { + DeviceConfig.setProperty( + DeviceConfig.NAMESPACE_PRIVACY, + SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED, + /* value = */ Boolean.toString(false), + /* makeDefault = */ false); + + assertThat(mTopLevelSafetyCenterEntryPreferenceController.getAvailabilityStatus()) + .isEqualTo(TopLevelSafetyCenterEntryPreferenceController.CONDITIONALLY_UNAVAILABLE); + } + + @Test + public void getAvailabilityStatus_whenSafetyCenterEnabled_returnsAvailable() { + DeviceConfig.setProperty( + DeviceConfig.NAMESPACE_PRIVACY, + SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED, + /* value = */ Boolean.toString(true), + /* makeDefault = */ false); + + assertThat(mTopLevelSafetyCenterEntryPreferenceController.getAvailabilityStatus()) + .isEqualTo(TopLevelSafetyCenterEntryPreferenceController.AVAILABLE); + } +} diff --git a/tests/unit/src/com/android/settings/security/TopLevelSecurityEntryPreferenceControllerTest.java b/tests/unit/src/com/android/settings/security/TopLevelSecurityEntryPreferenceControllerTest.java index a9acd2a6037..7e83ca7dcf4 100644 --- a/tests/unit/src/com/android/settings/security/TopLevelSecurityEntryPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/security/TopLevelSecurityEntryPreferenceControllerTest.java @@ -25,14 +25,18 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.Intent; +import android.provider.DeviceConfig; +import android.provider.Settings; import androidx.preference.Preference; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.android.settings.SettingsActivity; +import com.android.settings.safetycenter.SafetyCenterStatus; import com.android.settings.testutils.FakeFeatureFactory; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -60,6 +64,9 @@ public class TopLevelSecurityEntryPreferenceControllerTest { mFeatureFactory = FakeFeatureFactory.setupForTest(); mSecuritySettingsFeatureProvider = mFeatureFactory.getSecuritySettingsFeatureProvider(); + DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS, + DeviceConfig.NAMESPACE_PRIVACY); + mPreference = new Preference(ApplicationProvider.getApplicationContext()); mPreference.setKey(PREFERENCE_KEY); @@ -68,6 +75,12 @@ public class TopLevelSecurityEntryPreferenceControllerTest { new TopLevelSecurityEntryPreferenceController(mContext, PREFERENCE_KEY); } + @After + public void tearDown() { + DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS, + DeviceConfig.NAMESPACE_PRIVACY); + } + @Test public void handlePreferenceTreeClick_forDifferentPreferenceKey_isNotHandled() { Preference preference = new Preference(ApplicationProvider.getApplicationContext()); @@ -121,4 +134,28 @@ public class TopLevelSecurityEntryPreferenceControllerTest { assertThat(preferenceHandled).isFalse(); } + + @Test + public void getAvailabilityStatus_whenSafetyCenterEnabled_returnsUnavailable() { + DeviceConfig.setProperty( + DeviceConfig.NAMESPACE_PRIVACY, + SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED, + /* value = */ Boolean.toString(true), + /* makeDefault = */ false); + + assertThat(mTopLevelSecurityEntryPreferenceController.getAvailabilityStatus()) + .isEqualTo(TopLevelSecurityEntryPreferenceController.CONDITIONALLY_UNAVAILABLE); + } + + @Test + public void getAvailabilityStatus_whenSafetyCenterDisabled_returnsAvailable() { + DeviceConfig.setProperty( + DeviceConfig.NAMESPACE_PRIVACY, + SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED, + /* value = */ Boolean.toString(false), + /* makeDefault = */ false); + + assertThat(mTopLevelSecurityEntryPreferenceController.getAvailabilityStatus()) + .isEqualTo(TopLevelSecurityEntryPreferenceController.AVAILABLE); + } }