From dd1e1e1d996a5af267d325edc635c882d1cac02b Mon Sep 17 00:00:00 2001 From: Ben Lin Date: Tue, 16 Jan 2018 15:51:57 -0800 Subject: [PATCH] Introduce boolean flags to show/hide items in Security & location. This adds 6 new boolean flags: config_show_manage_device_admin config_show_unlock_set_or_change config_show_screen_pinning_settings config_show_manage_trust_agents config_show_show_password config_show_trust_agent_click_intent Which when individually set to false, will hide the item from "Security & location". It will also hide them from surfacing in search results. Bug:62379222 Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.security Change-Id: I58d82cbc7f366a9666cdb0f7cd1b90ebbaf418f4 --- res/values/bools.xml | 18 ++++ ...ManageDeviceAdminPreferenceController.java | 2 +- .../ChangeScreenLockPreferenceController.java | 2 +- .../ScreenPinningPreferenceController.java | 3 +- .../ShowPasswordPreferenceController.java | 5 +- ...ManageTrustAgentsPreferenceController.java | 3 +- .../TrustAgentListPreferenceController.java | 2 +- tests/robotests/res/values-mcc999/config.xml | 6 ++ ...geDeviceAdminPreferenceControllerTest.java | 23 +++-- ...ngeScreenLockPreferenceControllerTest.java | 85 +++++++++++++++++++ ...ScreenPinningPreferenceControllerTest.java | 10 ++- .../ShowPasswordPreferenceControllerTest.java | 10 ++- ...geTrustAgentsPreferenceControllerTest.java | 10 ++- ...rustAgentListPreferenceControllerTest.java | 6 ++ 14 files changed, 168 insertions(+), 17 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java diff --git a/res/values/bools.xml b/res/values/bools.xml index 4469cc40521..e4a57ab1730 100644 --- a/res/values/bools.xml +++ b/res/values/bools.xml @@ -120,6 +120,24 @@ true + + true + + + true + + + true + + + true + + + true + + + true + true diff --git a/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java b/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java index 6f35641e721..7cfe7a9eb45 100644 --- a/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java +++ b/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java @@ -45,7 +45,7 @@ public class ManageDeviceAdminPreferenceController extends AbstractPreferenceCon @Override public boolean isAvailable() { - return true; + return mContext.getResources().getBoolean(R.bool.config_show_manage_device_admin); } @Override diff --git a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java index 67b78fcab1b..fdb93490a0c 100644 --- a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java +++ b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java @@ -67,7 +67,7 @@ public class ChangeScreenLockPreferenceController extends AbstractPreferenceCont @Override public boolean isAvailable() { - return true; + return mContext.getResources().getBoolean(R.bool.config_show_unlock_set_or_change); } @Override diff --git a/src/com/android/settings/security/ScreenPinningPreferenceController.java b/src/com/android/settings/security/ScreenPinningPreferenceController.java index 01ccbaac8b7..305d07699ba 100644 --- a/src/com/android/settings/security/ScreenPinningPreferenceController.java +++ b/src/com/android/settings/security/ScreenPinningPreferenceController.java @@ -33,7 +33,8 @@ public class ScreenPinningPreferenceController extends BasePreferenceController @Override public int getAvailabilityStatus() { - return AVAILABLE; + return mContext.getResources().getBoolean(R.bool.config_show_screen_pinning_settings) + ? AVAILABLE : DISABLED_UNSUPPORTED; } @Override diff --git a/src/com/android/settings/security/ShowPasswordPreferenceController.java b/src/com/android/settings/security/ShowPasswordPreferenceController.java index d0216e8e1b3..82f1935cee0 100644 --- a/src/com/android/settings/security/ShowPasswordPreferenceController.java +++ b/src/com/android/settings/security/ShowPasswordPreferenceController.java @@ -23,6 +23,7 @@ import android.provider.Settings; import com.android.internal.widget.LockPatternUtils; import com.android.settings.core.TogglePreferenceController; import com.android.settings.overlay.FeatureFactory; +import com.android.settings.R; public class ShowPasswordPreferenceController extends TogglePreferenceController { @@ -53,7 +54,9 @@ public class ShowPasswordPreferenceController extends TogglePreferenceController @Override public int getAvailabilityStatus() { - return AVAILABLE; + return mContext.getResources().getBoolean(R.bool.config_show_show_password) + ? AVAILABLE : DISABLED_UNSUPPORTED; } + } diff --git a/src/com/android/settings/security/trustagent/ManageTrustAgentsPreferenceController.java b/src/com/android/settings/security/trustagent/ManageTrustAgentsPreferenceController.java index c615effe35d..5bb8f75e578 100644 --- a/src/com/android/settings/security/trustagent/ManageTrustAgentsPreferenceController.java +++ b/src/com/android/settings/security/trustagent/ManageTrustAgentsPreferenceController.java @@ -47,7 +47,8 @@ public class ManageTrustAgentsPreferenceController extends BasePreferenceControl @Override public int getAvailabilityStatus() { - return AVAILABLE; + return mContext.getResources().getBoolean(R.bool.config_show_manage_trust_agents) + ? AVAILABLE : DISABLED_UNSUPPORTED; } @Override diff --git a/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java b/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java index 0fcee906bb4..f9e6a4c872b 100644 --- a/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java +++ b/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java @@ -79,7 +79,7 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro @Override public boolean isAvailable() { - return true; + return mContext.getResources().getBoolean(R.bool.config_show_trust_agent_click_intent); } @Override diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml index 639e1a2a329..a3205f33f29 100644 --- a/tests/robotests/res/values-mcc999/config.xml +++ b/tests/robotests/res/values-mcc999/config.xml @@ -36,6 +36,12 @@ false false false + false + false + false + false + false + false false false false diff --git a/tests/robotests/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceControllerTest.java index 5874984873e..d4494193809 100644 --- a/tests/robotests/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceControllerTest.java @@ -17,9 +17,12 @@ package com.android.settings.enterprise; import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; +import android.content.res.Resources; import android.support.v7.preference.Preference; import com.android.settings.R; @@ -33,6 +36,7 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; /** @@ -42,15 +46,17 @@ import org.robolectric.annotation.Config; @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public final class ManageDeviceAdminPreferenceControllerTest { - @Mock(answer = Answers.RETURNS_DEEP_STUBS) + @Mock + private Resources mResources; + private Context mContext; private FakeFeatureFactory mFeatureFactory; - private ManageDeviceAdminPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); mFeatureFactory = FakeFeatureFactory.setupForTest(); mController = new ManageDeviceAdminPreferenceController(mContext); } @@ -61,24 +67,31 @@ public final class ManageDeviceAdminPreferenceControllerTest { when(mFeatureFactory.enterprisePrivacyFeatureProvider .getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile()).thenReturn(0); - when(mContext.getResources().getString(R.string.number_of_device_admins_none)) + when (mContext.getResources()).thenReturn(mResources); + when(mResources.getString(R.string.number_of_device_admins_none)) .thenReturn("no apps"); mController.updateState(preference); assertThat(preference.getSummary()).isEqualTo("no apps"); when(mFeatureFactory.enterprisePrivacyFeatureProvider .getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile()).thenReturn(5); - when(mContext.getResources().getQuantityString(R.plurals.number_of_device_admins, 5, 5)) + when(mResources.getQuantityString(R.plurals.number_of_device_admins, 5, 5)) .thenReturn("5 active apps"); mController.updateState(preference); assertThat(preference.getSummary()).isEqualTo("5 active apps"); } @Test - public void testIsAvailable() { + public void isAvailable_byDefault_isTrue() { assertThat(mController.isAvailable()).isTrue(); } + @Test + @Config(qualifiers = "mcc999") + public void isAvailable_whenNotVisible_isFalse() { + assertThat(mController.isAvailable()).isFalse(); + } + @Test public void testHandlePreferenceTreeClick() { assertThat(mController.handlePreferenceTreeClick(new Preference(mContext, null, 0, 0))) diff --git a/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java new file mode 100644 index 00000000000..4aaf5f499a7 --- /dev/null +++ b/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * 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. + */ + +package com.android.settings.security; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.app.admin.DevicePolicyManager; +import android.content.Context; +import android.os.UserManager; + +import com.android.internal.widget.LockPatternUtils; +import com.android.settings.TestConfig; +import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.testutils.shadow.ShadowUtils; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config( + manifest = TestConfig.MANIFEST_PATH, + sdk = TestConfig.SDK_VERSION, + shadows = { + ShadowUtils.class + }) +public class ChangeScreenLockPreferenceControllerTest { + + @Mock + private LockPatternUtils mLockPatternUtils; + @Mock + private UserManager mUserManager; + @Mock + private DevicePolicyManager mDevicePolicyManager; + + private Context mContext; + private FakeFeatureFactory mFeatureFactory; + private ChangeScreenLockPreferenceController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application.getApplicationContext()); + mFeatureFactory = FakeFeatureFactory.setupForTest(); + when(mFeatureFactory.securityFeatureProvider.getLockPatternUtils(mContext)) + .thenReturn(mLockPatternUtils); + when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); + when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)) + .thenReturn(mDevicePolicyManager); + mController = new ChangeScreenLockPreferenceController(mContext, null /* Host */ ); + } + + @Test + public void testDeviceAdministrators_byDefault_shouldBeShown() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @Config(qualifiers = "mcc999") + public void testDeviceAdministrators_ifDisabled_shouldNotBeShown() { + assertThat(mController.isAvailable()).isFalse(); + } +} \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/security/ScreenPinningPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/ScreenPinningPreferenceControllerTest.java index 4ee9206dcfd..c5177acc109 100644 --- a/tests/robotests/src/com/android/settings/security/ScreenPinningPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/ScreenPinningPreferenceControllerTest.java @@ -59,8 +59,14 @@ public class ScreenPinningPreferenceControllerTest { } @Test - public void isAlwaysAvailable() { - assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + public void isAvailable_byDefault_isTrue() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @Config(qualifiers = "mcc999") + public void isAvailable_whenNotVisible_isFalse() { + assertThat(mController.isAvailable()).isFalse(); } @Test diff --git a/tests/robotests/src/com/android/settings/security/ShowPasswordPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/ShowPasswordPreferenceControllerTest.java index 63cf00b9d43..6bcb1d37410 100644 --- a/tests/robotests/src/com/android/settings/security/ShowPasswordPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/ShowPasswordPreferenceControllerTest.java @@ -70,8 +70,14 @@ public class ShowPasswordPreferenceControllerTest { } @Test - public void isAlwaysAvailable() { - assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + public void isAvailable_byDefault_isTrue() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @Config(qualifiers = "mcc999") + public void isAvailable_whenNotVisible_isFalse() { + assertThat(mController.isAvailable()).isFalse(); } @Test diff --git a/tests/robotests/src/com/android/settings/security/trustagent/ManageTrustAgentsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/trustagent/ManageTrustAgentsPreferenceControllerTest.java index 88186026b93..42d640a8a10 100644 --- a/tests/robotests/src/com/android/settings/security/trustagent/ManageTrustAgentsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/trustagent/ManageTrustAgentsPreferenceControllerTest.java @@ -75,8 +75,14 @@ public class ManageTrustAgentsPreferenceControllerTest { } @Test - public void isAlwaysAvailable() { - assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + public void isAvailable_byDefault_isTrue() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @Config(qualifiers = "mcc999") + public void isAvailable_whenNotVisible_isFalse() { + assertThat(mController.isAvailable()).isFalse(); } @Test diff --git a/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java index 63348e62a35..11c3b3ffecf 100644 --- a/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java @@ -103,6 +103,12 @@ public class TrustAgentListPreferenceControllerTest { assertThat(mController).isInstanceOf(PreferenceControllerMixin.class); } + @Test + @Config(qualifiers = "mcc999") + public void isAvailable_whenNotVisible_isFalse() { + assertThat(mController.isAvailable()).isFalse(); + } + @Test public void onResume_shouldClearOldAgents() { final Preference oldAgent = new Preference(mActivity);