From e5e8f0368fb57d278c4d1988096d7ea8d5155348 Mon Sep 17 00:00:00 2001 From: Ben Lin Date: Wed, 10 Jan 2018 15:55:40 -0800 Subject: [PATCH] Add ability to show/hide airplane toggle. This introduces a new boolean flag: config_show_toggle_airplane Which when set to false, will hide the airplane mode toggle in network & internet. Bug: 69813881 Test: make RunSettingsRoboTests ROBOTEST_FILTER=AirplaneModePreferenceControllerTest Change-Id: I2cf682bf78231040eba5573fbcb55a65be2a13df --- res/values/bools.xml | 3 ++ .../AirplaneModePreferenceController.java | 4 ++- tests/robotests/res/values-mcc999/config.xml | 1 + .../AirplaneModePreferenceControllerTest.java | 36 +++++++++++++------ 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/res/values/bools.xml b/res/values/bools.xml index e733d5f2c2c..4469cc40521 100644 --- a/res/values/bools.xml +++ b/res/values/bools.xml @@ -54,6 +54,9 @@ surface in search results or not.--> true + + true + true diff --git a/src/com/android/settings/network/AirplaneModePreferenceController.java b/src/com/android/settings/network/AirplaneModePreferenceController.java index d86f7f7980f..17cf211e9dd 100644 --- a/src/com/android/settings/network/AirplaneModePreferenceController.java +++ b/src/com/android/settings/network/AirplaneModePreferenceController.java @@ -30,6 +30,7 @@ import com.android.settings.AirplaneModeEnabler; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.overlay.FeatureFactory; +import com.android.settings.R; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; @@ -91,7 +92,8 @@ public class AirplaneModePreferenceController extends AbstractPreferenceControll } public static boolean isAvailable(Context context) { - return !context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK); + return context.getResources().getBoolean(R.bool.config_show_toggle_airplane) + && !context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK); } @Override diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml index c3ae9117d35..639e1a2a329 100644 --- a/tests/robotests/res/values-mcc999/config.xml +++ b/tests/robotests/res/values-mcc999/config.xml @@ -21,6 +21,7 @@ false false false + false false false false diff --git a/tests/robotests/src/com/android/settings/network/AirplaneModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/AirplaneModePreferenceControllerTest.java index b1072b16ef7..320ae9ee800 100644 --- a/tests/robotests/src/com/android/settings/network/AirplaneModePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/AirplaneModePreferenceControllerTest.java @@ -16,7 +16,7 @@ package com.android.settings.network; -import static junit.framework.Assert.assertFalse; +import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -38,24 +38,20 @@ 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; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class AirplaneModePreferenceControllerTest { - @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private Context mContext; - - @Mock - private Resources mResources; - @Mock private PreferenceScreen mScreen; @Mock private PackageManager mPackageManager; + private Context mContext; private AirplaneModePreferenceController mController; private LifecycleOwner mLifecycleOwner; private Lifecycle mLifecycle; @@ -65,7 +61,7 @@ public class AirplaneModePreferenceControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); mFactory = FakeFeatureFactory.setupForTest(); - doReturn(mResources).when(mContext).getResources(); + mContext = spy(RuntimeEnvironment.application); doReturn(mPackageManager).when(mContext).getPackageManager(); mController = spy(new AirplaneModePreferenceController(mContext, null)); mLifecycleOwner = () -> mLifecycle; @@ -74,9 +70,9 @@ public class AirplaneModePreferenceControllerTest { } @Test - public void airplaneModePreference_shouldNotBeAvailable_ifHasLeanbackFeature() { - when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)).thenReturn(true); - assertFalse(mController.isAvailable()); + @Config(qualifiers = "mcc999") + public void airplaneModePreference_shouldNotBeAvailable_ifSetToNotVisible() { + assertThat(mController.isAvailable()).isFalse(); mController.displayPreference(mScreen); @@ -84,4 +80,22 @@ public class AirplaneModePreferenceControllerTest { mController.onResume(); mController.onPause(); } + + @Test + public void airplaneModePreference_shouldNotBeAvailable_ifHasLeanbackFeature() { + when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)).thenReturn(true); + assertThat(mController.isAvailable()).isFalse(); + + mController.displayPreference(mScreen); + + // This should not crash + mController.onResume(); + mController.onPause(); + } + + @Test + public void airplaneModePreference_shouldBeAvailable_ifNoLeanbackFeature() { + when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)).thenReturn(false); + assertThat(mController.isAvailable()).isTrue(); + } }