diff --git a/res/values/bools.xml b/res/values/bools.xml index 687d5bd1ddc..c490365fe4a 100644 --- a/res/values/bools.xml +++ b/res/values/bools.xml @@ -72,6 +72,27 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + true diff --git a/src/com/android/settings/inputmethod/GameControllerPreferenceController.java b/src/com/android/settings/inputmethod/GameControllerPreferenceController.java index 6a0e853d454..c4e998a7a84 100644 --- a/src/com/android/settings/inputmethod/GameControllerPreferenceController.java +++ b/src/com/android/settings/inputmethod/GameControllerPreferenceController.java @@ -27,6 +27,7 @@ import android.text.TextUtils; import android.view.InputDevice; import com.android.settings.core.PreferenceControllerMixin; +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; @@ -73,6 +74,11 @@ public class GameControllerPreferenceController extends AbstractPreferenceContro @Override public boolean isAvailable() { + // If device explicitly wants to hide this, return early. + if (!mContext.getResources().getBoolean(R.bool.config_show_vibrate_input_devices)) { + return false; + } + final int[] devices = mIm.getInputDeviceIds(); for (int deviceId : devices) { InputDevice device = mIm.getInputDevice(deviceId); diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java b/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java index 7b0d1cee1ac..ec0aecd996f 100644 --- a/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java +++ b/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java @@ -50,7 +50,7 @@ public class PhysicalKeyboardPreferenceController extends AbstractPreferenceCont @Override public boolean isAvailable() { - return true; + return mContext.getResources().getBoolean(R.bool.config_show_physical_keyboard_pref); } @Override diff --git a/src/com/android/settings/inputmethod/SpellCheckerPreferenceController.java b/src/com/android/settings/inputmethod/SpellCheckerPreferenceController.java index 270aabad305..139688978e6 100644 --- a/src/com/android/settings/inputmethod/SpellCheckerPreferenceController.java +++ b/src/com/android/settings/inputmethod/SpellCheckerPreferenceController.java @@ -51,7 +51,7 @@ public class SpellCheckerPreferenceController extends AbstractPreferenceControll @Override public boolean isAvailable() { - return true; + return mContext.getResources().getBoolean(R.bool.config_show_spellcheckers_settings); } @Override diff --git a/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java b/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java index c3443d2938c..c4dbef1f4d4 100644 --- a/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java +++ b/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java @@ -47,7 +47,7 @@ public class VirtualKeyboardPreferenceController extends AbstractPreferenceContr @Override public boolean isAvailable() { - return true; + return mContext.getResources().getBoolean(R.bool.config_show_virtual_keyboard_pref); } @Override diff --git a/src/com/android/settings/language/LanguageAndInputSettings.java b/src/com/android/settings/language/LanguageAndInputSettings.java index bf611163d3f..cb60ef544e3 100644 --- a/src/com/android/settings/language/LanguageAndInputSettings.java +++ b/src/com/android/settings/language/LanguageAndInputSettings.java @@ -21,6 +21,7 @@ import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.pm.PackageManager; +import android.os.Bundle; import android.provider.SearchIndexableResource; import android.provider.Settings; import android.speech.tts.TtsEngines; @@ -40,6 +41,7 @@ import com.android.settings.inputmethod.PhysicalKeyboardPreferenceController; import com.android.settings.inputmethod.SpellCheckerPreferenceController; import com.android.settings.inputmethod.VirtualKeyboardPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.widget.PreferenceCategoryController; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -51,7 +53,10 @@ public class LanguageAndInputSettings extends DashboardFragment { private static final String TAG = "LangAndInputSettings"; + private static final String KEY_KEYBOARDS_CATEGORY = "keyboards_category"; private static final String KEY_TEXT_TO_SPEECH = "tts_settings_summary"; + private static final String KEY_POINTER_AND_TTS_CATEGORY = "pointer_and_tts_category"; + private static final String KEY_GAME_CONTROLLER_CATEGORY = "game_controller_settings_category"; private static final String KEY_PHYSICAL_KEYBOARD = "physical_keyboard_pref"; @Override @@ -92,20 +97,45 @@ public class LanguageAndInputSettings extends DashboardFragment { final List controllers = new ArrayList<>(); // Language controllers.add(new PhoneLanguagePreferenceController(context)); - controllers.add(new SpellCheckerPreferenceController(context)); - controllers.add(new UserDictionaryPreferenceController(context)); - controllers.add(new TtsPreferenceController(context, new TtsEngines(context))); + // Input - controllers.add(new VirtualKeyboardPreferenceController(context)); - controllers.add(new PhysicalKeyboardPreferenceController(context, lifecycle)); + final VirtualKeyboardPreferenceController virtualKeyboardPreferenceController = + new VirtualKeyboardPreferenceController(context); + final PhysicalKeyboardPreferenceController physicalKeyboardPreferenceController = + new PhysicalKeyboardPreferenceController(context, lifecycle); + controllers.add(virtualKeyboardPreferenceController); + controllers.add(physicalKeyboardPreferenceController); + controllers.add(new PreferenceCategoryController(context, + KEY_KEYBOARDS_CATEGORY, + Arrays.asList(virtualKeyboardPreferenceController, + physicalKeyboardPreferenceController))); + + // Pointer and Tts + final TtsPreferenceController ttsPreferenceController = + new TtsPreferenceController(context, new TtsEngines(context)); + controllers.add(ttsPreferenceController); + final PointerSpeedController pointerController = new PointerSpeedController(context); + controllers.add(pointerController); + controllers.add(new PreferenceCategoryController(context, + KEY_POINTER_AND_TTS_CATEGORY, + Arrays.asList(pointerController, ttsPreferenceController))); + + // Input Assistance + controllers.add(new SpellCheckerPreferenceController(context)); + controllers.add(new DefaultAutofillPreferenceController(context)); + controllers.add(new UserDictionaryPreferenceController(context)); + + // Game Controller final GameControllerPreferenceController gameControllerPreferenceController = new GameControllerPreferenceController(context); if (lifecycle != null) { lifecycle.addObserver(gameControllerPreferenceController); } - controllers.add(gameControllerPreferenceController); - controllers.add(new DefaultAutofillPreferenceController(context)); + controllers.add(new PreferenceCategoryController(context, + KEY_GAME_CONTROLLER_CATEGORY, + Arrays.asList(gameControllerPreferenceController))); + return controllers; } diff --git a/src/com/android/settings/language/PhoneLanguagePreferenceController.java b/src/com/android/settings/language/PhoneLanguagePreferenceController.java index 49f7f214618..1fd7db7a46b 100644 --- a/src/com/android/settings/language/PhoneLanguagePreferenceController.java +++ b/src/com/android/settings/language/PhoneLanguagePreferenceController.java @@ -41,7 +41,8 @@ public class PhoneLanguagePreferenceController extends AbstractPreferenceControl @Override public boolean isAvailable() { - return mContext.getAssets().getLocales().length > 1; + return mContext.getResources().getBoolean(R.bool.config_show_phone_language) + && mContext.getAssets().getLocales().length > 1; } @Override diff --git a/src/com/android/settings/language/PointerSpeedController.java b/src/com/android/settings/language/PointerSpeedController.java new file mode 100644 index 00000000000..857751cdfcf --- /dev/null +++ b/src/com/android/settings/language/PointerSpeedController.java @@ -0,0 +1,41 @@ +/* + * 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.language; + +import android.content.Context; + +import com.android.settings.core.BasePreferenceController; +import com.android.settings.R; + +import android.support.annotation.VisibleForTesting; + + +public class PointerSpeedController extends BasePreferenceController { + + @VisibleForTesting static final String KEY_POINTER_SPEED = "pointer_speed"; + + public PointerSpeedController(Context context) { + super(context, KEY_POINTER_SPEED); + } + + @AvailabilityStatus + public int getAvailabilityStatus() { + return mContext.getResources().getBoolean(R.bool.config_show_pointer_speed) + ? AVAILABLE + : DISABLED_UNSUPPORTED; + } +} diff --git a/src/com/android/settings/language/TtsPreferenceController.java b/src/com/android/settings/language/TtsPreferenceController.java index ef26d5ffb18..f19047b5b88 100644 --- a/src/com/android/settings/language/TtsPreferenceController.java +++ b/src/com/android/settings/language/TtsPreferenceController.java @@ -20,6 +20,7 @@ import android.content.Context; import android.speech.tts.TtsEngines; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.R; import com.android.settingslib.core.AbstractPreferenceController; public class TtsPreferenceController extends AbstractPreferenceController @@ -37,7 +38,8 @@ public class TtsPreferenceController extends AbstractPreferenceController @Override public boolean isAvailable() { - return !mTtsEngines.getEngines().isEmpty(); + return !mTtsEngines.getEngines().isEmpty() && + mContext.getResources().getBoolean(R.bool.config_show_tts_settings_summary); } @Override diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml index e10fee1e080..7bb80e888c3 100644 --- a/tests/robotests/res/values-mcc999/config.xml +++ b/tests/robotests/res/values-mcc999/config.xml @@ -31,4 +31,10 @@ false false false + false + false + false + false + false + false diff --git a/tests/robotests/src/com/android/settings/inputmethod/GameControllerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/GameControllerPreferenceControllerTest.java index 2716fc38554..220aa6d7621 100644 --- a/tests/robotests/src/com/android/settings/inputmethod/GameControllerPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/inputmethod/GameControllerPreferenceControllerTest.java @@ -18,6 +18,7 @@ package com.android.settings.inputmethod; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -34,6 +35,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; import java.util.ArrayList; @@ -44,18 +46,18 @@ import java.util.List; @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class GameControllerPreferenceControllerTest { - @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private Context mContext; @Mock private InputManager mInputManager; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private InputDevice mInputDevice; + private Context mContext; private GameControllerPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); when(mContext.getSystemService(Context.INPUT_SERVICE)).thenReturn(mInputManager); mController = new GameControllerPreferenceController(mContext); } @@ -110,6 +112,14 @@ public class GameControllerPreferenceControllerTest { assertThat(mController.isAvailable()).isFalse(); } + @Test + @Config(qualifiers = "mcc999") + public void testIsAvailable_ifDisabled_shouldReturnFalse() { + mController = new GameControllerPreferenceController(mContext); + + assertThat(mController.isAvailable()).isFalse(); + } + @Test public void updateNonIndexableKeys_shouldIncludeCategoryAndPrefKeys() { when(mInputManager.getInputDeviceIds()).thenReturn(new int[]{}); diff --git a/tests/robotests/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceControllerTest.java index 8f9b2c5bdb0..356cfb4eb27 100644 --- a/tests/robotests/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceControllerTest.java @@ -18,6 +18,7 @@ package com.android.settings.inputmethod; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -37,6 +38,7 @@ 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) @@ -65,10 +67,22 @@ public class PhysicalKeyboardPreferenceControllerTest { } @Test - public void shouldAlwaysBeAvailable() { + public void testPhysicalKeyboard_byDefault_shouldBeShown() { + final Context context = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new PhysicalKeyboardPreferenceController(context, null); + assertThat(mController.isAvailable()).isTrue(); } + @Test + @Config(qualifiers = "mcc999") + public void testPhysicalKeyboard_ifDisabled_shouldNotBeShown() { + final Context context = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new PhysicalKeyboardPreferenceController(context, null); + + assertThat(mController.isAvailable()).isFalse(); + } + @Test @Config(shadows = { ShadowInputDevice.class, diff --git a/tests/robotests/src/com/android/settings/inputmethod/SpellCheckerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/SpellCheckerPreferenceControllerTest.java index 4457cc0339d..c41a03ba15c 100644 --- a/tests/robotests/src/com/android/settings/inputmethod/SpellCheckerPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/inputmethod/SpellCheckerPreferenceControllerTest.java @@ -16,7 +16,10 @@ package com.android.settings.inputmethod; +import static org.mockito.Mockito.spy; + import android.content.Context; +import android.content.res.Resources; import android.support.v7.preference.Preference; import android.view.textservice.SpellCheckerInfo; import android.view.textservice.TextServicesManager; @@ -46,6 +49,9 @@ public class SpellCheckerPreferenceControllerTest { private Context mContext; @Mock private TextServicesManager mTextServicesManager; + @Mock + private Resources mResources; + private Context mAppContext; private Preference mPreference; private SpellCheckerPreferenceController mController; @@ -56,10 +62,23 @@ public class SpellCheckerPreferenceControllerTest { mAppContext = RuntimeEnvironment.application; when(mContext.getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE)) .thenReturn(mTextServicesManager); + when(mContext.getResources()).thenReturn(mResources); + when(mResources.getBoolean(R.bool.config_show_spellcheckers_settings)).thenReturn(true); mPreference = new Preference(mAppContext); mController = new SpellCheckerPreferenceController(mContext); } + @Test + public void testSpellChecker_byDefault_shouldBeShown() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + public void testSpellChecker_ifDisabled_shouldNotBeShown() { + when(mResources.getBoolean(R.bool.config_show_spellcheckers_settings)).thenReturn(false); + assertThat(mController.isAvailable()).isFalse(); + } + @Test public void updateState_NoSpellerChecker_shouldSetSummaryToDefault() { when(mTextServicesManager.isSpellCheckerEnabled()).thenReturn(true); diff --git a/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java index fe2b0df3865..c0787251d46 100644 --- a/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java @@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -75,10 +76,20 @@ public class VirtualKeyboardPreferenceControllerTest { } @Test - public void shouldAlwaysBeAvailable() { + public void testVirtualKeyboard_byDefault_shouldBeShown() { + final Context context = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new VirtualKeyboardPreferenceController(context); assertThat(mController.isAvailable()).isTrue(); } + @Test + @Config(qualifiers = "mcc999") + public void testVirtualKeyboard_ifDisabled_shouldNotBeShown() { + final Context context = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new VirtualKeyboardPreferenceController(context); + assertThat(mController.isAvailable()).isFalse(); + } + @Test public void updateState_noEnabledIMEs_setEmptySummary() { mController.updateState(mPreference); diff --git a/tests/robotests/src/com/android/settings/language/PhoneLanguagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/language/PhoneLanguagePreferenceControllerTest.java index 6984e6a5bc1..90a4a129ba6 100644 --- a/tests/robotests/src/com/android/settings/language/PhoneLanguagePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/language/PhoneLanguagePreferenceControllerTest.java @@ -17,10 +17,13 @@ package com.android.settings.language; import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.content.res.AssetManager; import android.support.v7.preference.Preference; import com.android.settings.TestConfig; @@ -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; import java.util.ArrayList; @@ -42,34 +46,44 @@ import java.util.List; @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class PhoneLanguagePreferenceControllerTest { - @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private Context mContext; @Mock private Preference mPreference; + @Mock + private AssetManager mAssets; + + private Context mContext; private FakeFeatureFactory mFeatureFactory; private PhoneLanguagePreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); + when(mContext.getAssets()).thenReturn(mAssets); mFeatureFactory = FakeFeatureFactory.setupForTest(); mController = new PhoneLanguagePreferenceController(mContext); } @Test public void testIsAvailable_hasMultipleLocales_shouldReturnTrue() { - when(mContext.getAssets().getLocales()).thenReturn(new String[] {"en", "de"}); + when(mAssets.getLocales()).thenReturn(new String[] {"en", "de"}); assertThat(mController.isAvailable()).isTrue(); } @Test public void testIsAvailable_hasSingleLocales_shouldReturnFalse() { - when(mContext.getAssets().getLocales()).thenReturn(new String[] {"en"}); + when(mAssets.getLocales()).thenReturn(new String[] {"en"}); assertThat(mController.isAvailable()).isFalse(); } + @Test + @Config(qualifiers = "mcc999") + public void testIsAvailable_ifDisabled_shouldReturnFalse() { + assertThat(mController.isAvailable()).isFalse(); + } + @Test public void testUpdateState_shouldUpdateSummary() { final String testSummary = "test"; diff --git a/tests/robotests/src/com/android/settings/language/PointerSpeedControllerTest.java b/tests/robotests/src/com/android/settings/language/PointerSpeedControllerTest.java new file mode 100644 index 00000000000..32217dfff6d --- /dev/null +++ b/tests/robotests/src/com/android/settings/language/PointerSpeedControllerTest.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.language; + +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 PointerSpeedControllerTest { + + private Context mContext; + private PointerSpeedController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new PointerSpeedController(mContext); + } + + @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/language/TtsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/language/TtsPreferenceControllerTest.java index 15067c9f548..18cb12a5c71 100644 --- a/tests/robotests/src/com/android/settings/language/TtsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/language/TtsPreferenceControllerTest.java @@ -18,6 +18,7 @@ package com.android.settings.language; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; @@ -45,19 +46,19 @@ import java.util.List; @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class TtsPreferenceControllerTest { - @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private Context mContext; @Mock private TtsEngines mTtsEngines; @Mock private PreferenceScreen mScreen; + private Context mContext; private TtsPreferenceController mController; private Preference mPreference; @Before public void setUp() { MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); mController = new TtsPreferenceController(mContext, mTtsEngines); mPreference = new Preference(RuntimeEnvironment.application); @@ -89,4 +90,11 @@ public class TtsPreferenceControllerTest { assertThat(mPreference.isVisible()).isTrue(); } + + @Test + @Config(qualifiers = "mcc999") + public void testIsAvailable_ifDisabled_shouldReturnFalse() { + + assertThat(mController.isAvailable()).isFalse(); + } }