From 1ed3e361340b05d24dc6c903f77676019b2e7be6 Mon Sep 17 00:00:00 2001 From: Ben Lin Date: Wed, 20 Dec 2017 18:22:49 -0800 Subject: [PATCH] Add ability to show/hide items for Special Access. This adds five new boolean flags: config_show_high_power_apps config_show_device_administrators config_show_premium_sms config_show_data_saver config_show_enabled_vr_listeners Which when individually set to false, will hide the respectively item from "Special Access" in Apps & notifications. It will also hide them from surfacing in search results. Bug: 70907131 Test: Updated SpecialAccessSettingsTest, and created: HighPowerAppsControllerTest DeviceAdministratorsControllerTest PremiumSmsControllerTest DataSaverControllerTest EnabledVrListenersControllerTest Change-Id: I5ad58755643e71d4fb71774404ad96c127440ae4 --- res/values/bools.xml | 15 ++++ .../applications/DataSaverController.java | 40 +++++++++ .../DeviceAdministratorsController.java | 39 +++++++++ .../EnabledVrListenersController.java | 39 +++++++++ .../applications/HighPowerAppsController.java | 39 +++++++++ .../applications/PremiumSmsController.java | 39 +++++++++ .../applications/SpecialAccessSettings.java | 21 ++++- tests/robotests/res/values-mcc999/config.xml | 5 ++ .../applications/DataSaverControllerTest.java | 60 ++++++++++++++ .../DeviceAdministratorsControllerTest.java | 60 ++++++++++++++ .../EnabledVrListenersControllerTest.java | 60 ++++++++++++++ .../HighPowerAppsControllerTest.java | 60 ++++++++++++++ .../PremiumSmsControllerTest.java | 60 ++++++++++++++ .../SpecialAccessSettingsTest.java | 82 +++++++++++++++++++ 14 files changed, 617 insertions(+), 2 deletions(-) create mode 100644 src/com/android/settings/applications/DataSaverController.java create mode 100644 src/com/android/settings/applications/DeviceAdministratorsController.java create mode 100644 src/com/android/settings/applications/EnabledVrListenersController.java create mode 100644 src/com/android/settings/applications/HighPowerAppsController.java create mode 100644 src/com/android/settings/applications/PremiumSmsController.java create mode 100644 tests/robotests/src/com/android/settings/applications/DataSaverControllerTest.java create mode 100644 tests/robotests/src/com/android/settings/applications/DeviceAdministratorsControllerTest.java create mode 100644 tests/robotests/src/com/android/settings/applications/EnabledVrListenersControllerTest.java create mode 100644 tests/robotests/src/com/android/settings/applications/HighPowerAppsControllerTest.java create mode 100644 tests/robotests/src/com/android/settings/applications/PremiumSmsControllerTest.java create mode 100644 tests/robotests/src/com/android/settings/applications/SpecialAccessSettingsTest.java diff --git a/res/values/bools.xml b/res/values/bools.xml index c28b968cb21..8cf2c48f33e 100644 --- a/res/values/bools.xml +++ b/res/values/bools.xml @@ -57,6 +57,21 @@ true + + true + + + true + + + true + + + true + + + true + true diff --git a/src/com/android/settings/applications/DataSaverController.java b/src/com/android/settings/applications/DataSaverController.java new file mode 100644 index 00000000000..d9710fc9fa6 --- /dev/null +++ b/src/com/android/settings/applications/DataSaverController.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2017 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.applications; + +import android.content.Context; +import android.support.annotation.VisibleForTesting; + +import com.android.settings.core.BasePreferenceController; +import com.android.settings.R; + +public class DataSaverController extends BasePreferenceController { + + @VisibleForTesting static final String KEY_DATA_SAVER = "data_saver"; + + public DataSaverController(Context context) { + super(context, KEY_DATA_SAVER); + } + + @AvailabilityStatus + public int getAvailabilityStatus() { + return mContext.getResources().getBoolean(R.bool.config_show_data_saver) + ? AVAILABLE + : DISABLED_UNSUPPORTED; + } +} \ No newline at end of file diff --git a/src/com/android/settings/applications/DeviceAdministratorsController.java b/src/com/android/settings/applications/DeviceAdministratorsController.java new file mode 100644 index 00000000000..c7ef8ceaea4 --- /dev/null +++ b/src/com/android/settings/applications/DeviceAdministratorsController.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2017 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.applications; + +import android.content.Context; +import android.support.annotation.VisibleForTesting; + +import com.android.settings.core.BasePreferenceController; +import com.android.settings.R; + +public class DeviceAdministratorsController extends BasePreferenceController { + + @VisibleForTesting static final String KEY_DEVICE_ADMIN = "device_administrators"; + + public DeviceAdministratorsController(Context context) { + super(context, KEY_DEVICE_ADMIN); + } + + @AvailabilityStatus + public int getAvailabilityStatus() { + return mContext.getResources().getBoolean(R.bool.config_show_device_administrators) + ? AVAILABLE + : DISABLED_UNSUPPORTED; + } +} \ No newline at end of file diff --git a/src/com/android/settings/applications/EnabledVrListenersController.java b/src/com/android/settings/applications/EnabledVrListenersController.java new file mode 100644 index 00000000000..94a70ef0a82 --- /dev/null +++ b/src/com/android/settings/applications/EnabledVrListenersController.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2017 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.applications; + +import android.content.Context; +import android.support.annotation.VisibleForTesting; + +import com.android.settings.core.BasePreferenceController; +import com.android.settings.R; + +public class EnabledVrListenersController extends BasePreferenceController { + + @VisibleForTesting static final String KEY_ENABLED_VR_LISTENERS = "enabled_vr_listeners"; + + public EnabledVrListenersController(Context context) { + super(context, KEY_ENABLED_VR_LISTENERS); + } + + @AvailabilityStatus + public int getAvailabilityStatus() { + return mContext.getResources().getBoolean(R.bool.config_show_enabled_vr_listeners) + ? AVAILABLE + : DISABLED_UNSUPPORTED; + } +} \ No newline at end of file diff --git a/src/com/android/settings/applications/HighPowerAppsController.java b/src/com/android/settings/applications/HighPowerAppsController.java new file mode 100644 index 00000000000..dc847b32fc5 --- /dev/null +++ b/src/com/android/settings/applications/HighPowerAppsController.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2017 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.applications; + +import android.content.Context; +import android.support.annotation.VisibleForTesting; + +import com.android.settings.core.BasePreferenceController; +import com.android.settings.R; + +public class HighPowerAppsController extends BasePreferenceController { + + @VisibleForTesting static final String KEY_HIGH_POWER_APPS = "high_power_apps"; + + public HighPowerAppsController(Context context) { + super(context, KEY_HIGH_POWER_APPS); + } + + @AvailabilityStatus + public int getAvailabilityStatus() { + return mContext.getResources().getBoolean(R.bool.config_show_high_power_apps) + ? AVAILABLE + : DISABLED_UNSUPPORTED; + } +} \ No newline at end of file diff --git a/src/com/android/settings/applications/PremiumSmsController.java b/src/com/android/settings/applications/PremiumSmsController.java new file mode 100644 index 00000000000..40911a58da6 --- /dev/null +++ b/src/com/android/settings/applications/PremiumSmsController.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2017 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.applications; + +import android.content.Context; +import android.support.annotation.VisibleForTesting; + +import com.android.settings.core.BasePreferenceController; +import com.android.settings.R; + +public class PremiumSmsController extends BasePreferenceController { + + @VisibleForTesting static final String KEY_PREMIUM_SMS = "premium_sms"; + + public PremiumSmsController(Context context) { + super(context, KEY_PREMIUM_SMS); + } + + @AvailabilityStatus + public int getAvailabilityStatus() { + return mContext.getResources().getBoolean(R.bool.config_show_premium_sms) + ? AVAILABLE + : DISABLED_UNSUPPORTED; + } +} \ No newline at end of file diff --git a/src/com/android/settings/applications/SpecialAccessSettings.java b/src/com/android/settings/applications/SpecialAccessSettings.java index 73ae74490d9..4e43c05dfae 100644 --- a/src/com/android/settings/applications/SpecialAccessSettings.java +++ b/src/com/android/settings/applications/SpecialAccessSettings.java @@ -17,6 +17,7 @@ package com.android.settings.applications; import android.app.ActivityManager; import android.content.Context; import android.os.Bundle; +import android.support.annotation.NonNull; import android.provider.SearchIndexableResource; import android.support.v7.preference.Preference; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -31,7 +32,6 @@ import java.util.List; public class SpecialAccessSettings extends DashboardFragment { private static final String TAG = "SpecialAccessSettings"; - private static final String[] DISABLED_FEATURES_LOW_RAM = new String[]{"notification_access", "zen_access", "enabled_vr_listeners", "picture_in_picture"}; @@ -62,7 +62,18 @@ public class SpecialAccessSettings extends DashboardFragment { @Override protected List getPreferenceControllers(Context context) { - return null; + return buildPreferenceControllers(context); + } + + private static List buildPreferenceControllers( + @NonNull Context context) { + final List controllers = new ArrayList<>(); + controllers.add(new HighPowerAppsController(context)); + controllers.add(new DeviceAdministratorsController(context)); + controllers.add(new PremiumSmsController(context)); + controllers.add(new DataSaverController(context)); + controllers.add(new EnabledVrListenersController(context)); + return controllers; } @Override @@ -82,5 +93,11 @@ public class SpecialAccessSettings extends DashboardFragment { result.add(sir); return result; } + + @Override + public List getPreferenceControllers( + Context context) { + return buildPreferenceControllers(context); + } }; } diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml index d2e146b5d15..c3bf68da629 100644 --- a/tests/robotests/res/values-mcc999/config.xml +++ b/tests/robotests/res/values-mcc999/config.xml @@ -21,6 +21,11 @@ false false false + false + false + false + false + false false false false diff --git a/tests/robotests/src/com/android/settings/applications/DataSaverControllerTest.java b/tests/robotests/src/com/android/settings/applications/DataSaverControllerTest.java new file mode 100644 index 00000000000..237aa717b98 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/DataSaverControllerTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2017 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.applications; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; + +import android.content.Context; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +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) +public class DataSaverControllerTest { + + private Context mContext; + private DataSaverController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new DataSaverController(mContext); + } + + @Test + public void testDataSaver_byDefault_shouldBeShown() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @Config(qualifiers = "mcc999") + public void testDataSaver_ifDisabled_shouldNotBeShown() { + assertThat(mController.isAvailable()).isFalse(); + } +} diff --git a/tests/robotests/src/com/android/settings/applications/DeviceAdministratorsControllerTest.java b/tests/robotests/src/com/android/settings/applications/DeviceAdministratorsControllerTest.java new file mode 100644 index 00000000000..5482cd114e6 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/DeviceAdministratorsControllerTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2017 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.applications; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; + +import android.content.Context; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +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) +public class DeviceAdministratorsControllerTest { + + private Context mContext; + private DeviceAdministratorsController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new DeviceAdministratorsController(mContext); + } + + @Test + public void testDeviceAdministrators_byDefault_shouldBeShown() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @Config(qualifiers = "mcc999") + public void testDeviceAdministrators_ifDisabled_shouldNotBeShown() { + assertThat(mController.isAvailable()).isFalse(); + } +} diff --git a/tests/robotests/src/com/android/settings/applications/EnabledVrListenersControllerTest.java b/tests/robotests/src/com/android/settings/applications/EnabledVrListenersControllerTest.java new file mode 100644 index 00000000000..5be229652e8 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/EnabledVrListenersControllerTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2017 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.applications; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; + +import android.content.Context; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +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) +public class EnabledVrListenersControllerTest { + + private Context mContext; + private EnabledVrListenersController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new EnabledVrListenersController(mContext); + } + + @Test + public void testEnabledVrListeners_byDefault_shouldBeShown() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @Config(qualifiers = "mcc999") + public void testEnabledVrListeners_ifDisabled_shouldNotBeShown() { + assertThat(mController.isAvailable()).isFalse(); + } +} diff --git a/tests/robotests/src/com/android/settings/applications/HighPowerAppsControllerTest.java b/tests/robotests/src/com/android/settings/applications/HighPowerAppsControllerTest.java new file mode 100644 index 00000000000..d84d9bf7387 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/HighPowerAppsControllerTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2017 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.applications; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; + +import android.content.Context; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +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) +public class HighPowerAppsControllerTest { + + private Context mContext; + private HighPowerAppsController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new HighPowerAppsController(mContext); + } + + @Test + public void testHighPowerApps_byDefault_shouldBeShown() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @Config(qualifiers = "mcc999") + public void testHighPowerApps_ifDisabled_shouldNotBeShown() { + assertThat(mController.isAvailable()).isFalse(); + } +} diff --git a/tests/robotests/src/com/android/settings/applications/PremiumSmsControllerTest.java b/tests/robotests/src/com/android/settings/applications/PremiumSmsControllerTest.java new file mode 100644 index 00000000000..0f454fc7200 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/PremiumSmsControllerTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2017 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.applications; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; + +import android.content.Context; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +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) +public class PremiumSmsControllerTest { + + private Context mContext; + private PremiumSmsController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new PremiumSmsController(mContext); + } + + @Test + public void testPremiumSms_byDefault_shouldBeShown() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @Config(qualifiers = "mcc999") + public void testPremiumSms_ifDisabled_shouldNotBeShown() { + assertThat(mController.isAvailable()).isFalse(); + } +} diff --git a/tests/robotests/src/com/android/settings/applications/SpecialAccessSettingsTest.java b/tests/robotests/src/com/android/settings/applications/SpecialAccessSettingsTest.java new file mode 100644 index 00000000000..b0cf2f67fc7 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/SpecialAccessSettingsTest.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2017 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.applications; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; + +import android.content.Context; +import android.provider.SearchIndexableResource; + +import com.android.settings.R; +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +import java.util.List; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class SpecialAccessSettingsTest { + + private Context mContext; + private SpecialAccessSettings mFragment; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); + mFragment = new SpecialAccessSettings() { + @Override + public Context getContext() { + return mContext; + } + }; + } + + @Test + public void testSearchIndexProvider_shouldIndexResource() { + final List indexRes = + SpecialAccessSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(mContext, + true /* enabled */); + final List niks = + SpecialAccessSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); + + assertThat(indexRes).isNotNull(); + assertThat(indexRes.get(0).xmlResId).isEqualTo(R.xml.special_access); + assertThat(niks).isEmpty(); + } + + @Test + @Config(qualifiers = "mcc999") + public void testSearchIndexProvider_ifElementsAreNotShown_shouldNotBeIndexed() { + final List niks = + SpecialAccessSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); + + assertThat(niks).contains(HighPowerAppsController.KEY_HIGH_POWER_APPS); + assertThat(niks).contains(DeviceAdministratorsController.KEY_DEVICE_ADMIN); + assertThat(niks).contains(PremiumSmsController.KEY_PREMIUM_SMS); + assertThat(niks).contains(DataSaverController.KEY_DATA_SAVER); + assertThat(niks).contains(EnabledVrListenersController.KEY_ENABLED_VR_LISTENERS); + } +} \ No newline at end of file