From ecc0a45a982204a7458bfc7b1573887768213496 Mon Sep 17 00:00:00 2001 From: Jay Thomas Sullivan Date: Thu, 5 May 2022 20:56:43 +0000 Subject: [PATCH] Implement "More privacy settings" Safety Center is enabled, the existing "Privacy" screen will be different in a few ways: 1. Its title will become "More privacy settings" 2. A few preferences will be hidden 3. A few preferences will be reworded 4. The ordering of a few preferences will change 5. The PRIVACY_SETTINGS intent will now point to Safety Center; PRIVACY_ADVANCED_SETTINGS will point to "More privacy settings". Test: manual Bug: 222127397 Change-Id: I74faf770babb34f775b2ef572248e550ea683ab3 --- res/values/strings.xml | 8 +- res/xml/privacy_advanced_settings.xml | 96 +++++++++++++++++++ src/com/android/settings/Settings.java | 5 +- .../privacy/PrivacyDashboardFragment.java | 35 ++++--- .../privacy/PrivacyDashboardActivityTest.java | 77 ++++++++++----- 5 files changed, 181 insertions(+), 40 deletions(-) create mode 100644 res/xml/privacy_advanced_settings.xml diff --git a/res/values/strings.xml b/res/values/strings.xml index 9ab0cc2d301..d6845672fab 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1297,7 +1297,10 @@ Encryption, credentials, and more security, more security settings, more settings, advanced security settings - + + More privacy settings + + Autofill, activity controls, and more You can add up to %d fingerprints @@ -8973,6 +8976,9 @@ Work notifications + + Work profile + Adaptive notifications diff --git a/res/xml/privacy_advanced_settings.xml b/res/xml/privacy_advanced_settings.xml new file mode 100644 index 00000000000..9f465d45566 --- /dev/null +++ b/res/xml/privacy_advanced_settings.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 9f191f61cc1..ee0743a5752 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -16,6 +16,8 @@ package com.android.settings; +import static android.provider.Settings.ACTION_PRIVACY_SETTINGS; + import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; @@ -214,7 +216,8 @@ public class Settings extends SettingsActivity { /** Redirects to SafetyCenter if enabled. */ @VisibleForTesting public void handleSafetyCenterRedirection() { - if (SafetyCenterManagerWrapper.get().isEnabled(this)) { + if (ACTION_PRIVACY_SETTINGS.equals(getIntent().getAction()) + && SafetyCenterManagerWrapper.get().isEnabled(this)) { try { startActivity(new Intent(Intent.ACTION_SAFETY_CENTER)); finish(); diff --git a/src/com/android/settings/privacy/PrivacyDashboardFragment.java b/src/com/android/settings/privacy/PrivacyDashboardFragment.java index df59bd5f119..75ed225e3a6 100644 --- a/src/com/android/settings/privacy/PrivacyDashboardFragment.java +++ b/src/com/android/settings/privacy/PrivacyDashboardFragment.java @@ -25,6 +25,7 @@ import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROF import android.app.settings.SettingsEnums; import android.content.Context; import android.os.Bundle; +import android.provider.SearchIndexableResource; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; @@ -36,6 +37,7 @@ import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.search.SearchIndexable; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @SearchIndexable @@ -72,12 +74,6 @@ public class PrivacyDashboardFragment extends DashboardFragment { replaceEnterpriseStringSummary("work_policy_info", WORK_PROFILE_PRIVACY_POLICY_INFO_SUMMARY, R.string.work_policy_privacy_settings_summary); - - } - - @Override - protected int getPreferenceScreenResId() { - return R.xml.privacy_dashboard_settings; } @Override @@ -90,6 +86,19 @@ public class PrivacyDashboardFragment extends DashboardFragment { return buildPreferenceControllers(context, getSettingsLifecycle()); } + @Override + protected int getPreferenceScreenResId() { + return getPreferenceScreenResId(getContext()); + } + + private static int getPreferenceScreenResId(Context context) { + if (SafetyCenterManagerWrapper.get().isEnabled(context)) { + return R.xml.privacy_advanced_settings; + } else { + return R.xml.privacy_dashboard_settings; + } + } + private static List buildPreferenceControllers( Context context, Lifecycle lifecycle) { final List controllers = new ArrayList<>(); @@ -108,17 +117,19 @@ public class PrivacyDashboardFragment extends DashboardFragment { } public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = - new BaseSearchIndexProvider(R.xml.privacy_dashboard_settings) { + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex( + Context context, boolean enabled) { + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = getPreferenceScreenResId(context); + return Arrays.asList(sir); + } @Override public List createPreferenceControllers( Context context) { return buildPreferenceControllers(context, null); } - - @Override - protected boolean isPageSearchEnabled(Context context) { - return !SafetyCenterManagerWrapper.get().isEnabled(context); - } }; } diff --git a/tests/unit/src/com/android/settings/privacy/PrivacyDashboardActivityTest.java b/tests/unit/src/com/android/settings/privacy/PrivacyDashboardActivityTest.java index 1cfee0f377a..ae42c849837 100644 --- a/tests/unit/src/com/android/settings/privacy/PrivacyDashboardActivityTest.java +++ b/tests/unit/src/com/android/settings/privacy/PrivacyDashboardActivityTest.java @@ -44,54 +44,79 @@ import org.mockito.MockitoAnnotations; @RunWith(AndroidJUnit4.class) public class PrivacyDashboardActivityTest { - private static final String DEFAULT_FRAGMENT_CLASSNAME = "DefaultFragmentClassname"; - @Mock private SafetyCenterManagerWrapper mSafetyCenterManagerWrapper; private Settings.PrivacyDashboardActivity mActivity; + private static final String ACTION_PRIVACY_ADVANCED_SETTINGS = + "android.settings.PRIVACY_ADVANCED_SETTINGS"; @Before - public void setUp() throws Exception { + public void setUp() { MockitoAnnotations.initMocks(this); + SafetyCenterManagerWrapper.sInstance = mSafetyCenterManagerWrapper; + } + @Test + public void onCreate_whenSafetyCenterEnabled_redirectsToSafetyCenter() throws Exception { + startActivityUsingIntent(android.provider.Settings.ACTION_PRIVACY_SETTINGS); + when(mSafetyCenterManagerWrapper.isEnabled(any(Context.class))).thenReturn(true); + final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); + mActivity.handleSafetyCenterRedirection(); + verify(mActivity).startActivity(intentCaptor.capture()); + assertThat(intentCaptor.getValue().getAction()).isEqualTo(Intent.ACTION_SAFETY_CENTER); + } + + @Test + public void onCreateWithAdvancedIntent_whenSafetyCenterEnabled_doesntRedirectToSafetyCenter() + throws Exception { + startActivityUsingIntent(ACTION_PRIVACY_ADVANCED_SETTINGS); + when(mSafetyCenterManagerWrapper.isEnabled(any(Context.class))).thenReturn(true); + final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); + mActivity.handleSafetyCenterRedirection(); + verify(mActivity, times(0)).startActivity(any()); + } + + @Test + public void onCreate_whenSafetyCenterDisabled_doesntRedirectToSafetyCenter() throws Exception { + startActivityUsingIntent(android.provider.Settings.ACTION_PRIVACY_SETTINGS); + when(mSafetyCenterManagerWrapper.isEnabled(any(Context.class))).thenReturn(false); + mActivity.handleSafetyCenterRedirection(); + verify(mActivity, times(0)).startActivity(any()); + } + + @Test + public void onCreateWithAdvancedIntent_whenSafetyCenterDisabled_doesntRedirectToSafetyCenter() + throws Exception { + startActivityUsingIntent(ACTION_PRIVACY_ADVANCED_SETTINGS); + when(mSafetyCenterManagerWrapper.isEnabled(any(Context.class))).thenReturn(true); + final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); + mActivity.handleSafetyCenterRedirection(); + verify(mActivity, times(0)).startActivity(any()); + } + + private void startActivityUsingIntent(String intentAction) throws Exception { + MockitoAnnotations.initMocks(this); SafetyCenterManagerWrapper.sInstance = mSafetyCenterManagerWrapper; final Intent intent = new Intent(); - intent.setAction(android.provider.Settings.ACTION_PRIVACY_SETTINGS); + intent.setAction(intentAction); intent.setClass(InstrumentationRegistry.getInstrumentation().getTargetContext(), Settings.PrivacyDashboardActivity.class); intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, DEFAULT_FRAGMENT_CLASSNAME); InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { try { - mActivity = - spy((Settings.PrivacyDashboardActivity) InstrumentationRegistry + Settings.PrivacyDashboardActivity activity = + (Settings.PrivacyDashboardActivity) InstrumentationRegistry .getInstrumentation().newActivity( getClass().getClassLoader(), Settings.PrivacyDashboardActivity.class.getName(), - intent)); + intent); + activity.setIntent(intent); + mActivity = spy(activity); } catch (Exception e) { throw new RuntimeException(e); // nothing to do } }); doNothing().when(mActivity).startActivity(any(Intent.class)); } - - @Test - public void onCreate_whenSafetyCenterEnabled_redirectsToSafetyCenter() { - when(mSafetyCenterManagerWrapper.isEnabled(any(Context.class))).thenReturn(true); - final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); - - mActivity.handleSafetyCenterRedirection(); - - verify(mActivity).startActivity(intentCaptor.capture()); - assertThat(intentCaptor.getValue().getAction()).isEqualTo(Intent.ACTION_SAFETY_CENTER); - } - - @Test - public void onCreate_whenSafetyCenterDisabled_doesntRedirectToSafetyCenter() { - when(mSafetyCenterManagerWrapper.isEnabled(any(Context.class))).thenReturn(false); - mActivity.handleSafetyCenterRedirection(); - - verify(mActivity, times(0)).startActivity(any()); - } }