19a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang/* 29a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * Copyright (C) 2017 The Android Open Source Project 39a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * 49a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * Licensed under the Apache License, Version 2.0 (the "License"); 59a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * you may not use this file except in compliance with the License. 69a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * You may obtain a copy of the License at 79a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * 89a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * http://www.apache.org/licenses/LICENSE-2.0 99a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * 109a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * Unless required by applicable law or agreed to in writing, software 119a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * distributed under the License is distributed on an "AS IS" BASIS, 129a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * See the License for the specific language governing permissions and 149a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang * limitations under the License. 159a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang */ 169a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 179a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangpackage com.android.settings.development; 189a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 199a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport static com.google.common.truth.Truth.assertThat; 209a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport static org.mockito.Mockito.verify; 219a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport static org.mockito.Mockito.when; 229a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 239a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport android.content.Context; 249a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport android.provider.Settings; 259a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport android.support.v14.preference.SwitchPreference; 269a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport android.support.v7.preference.PreferenceScreen; 279a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 289a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport com.android.settings.testutils.SettingsRobolectricTestRunner; 299a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 309a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport org.junit.Before; 319a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport org.junit.Test; 329a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport org.junit.runner.RunWith; 339a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport org.mockito.Mock; 349a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport org.mockito.MockitoAnnotations; 359a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangimport org.robolectric.RuntimeEnvironment; 369a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 379a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang@RunWith(SettingsRobolectricTestRunner.class) 389a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuangpublic class TetheringHardwareAccelPreferenceControllerTest { 399a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 409a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang @Mock 419a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang private SwitchPreference mPreference; 429a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang @Mock 439a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang private PreferenceScreen mPreferenceScreen; 449a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 459a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang private Context mContext; 469a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang private TetheringHardwareAccelPreferenceController mController; 479a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 489a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang @Before 499a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang public void setup() { 509a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang MockitoAnnotations.initMocks(this); 519a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang mContext = RuntimeEnvironment.application; 529a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang mController = new TetheringHardwareAccelPreferenceController(mContext); 5322a39c2b93bc66db71238274a7683d329232d124James Lemieux when(mPreferenceScreen.findPreference(mController.getPreferenceKey())) 5422a39c2b93bc66db71238274a7683d329232d124James Lemieux .thenReturn(mPreference); 559a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang mController.displayPreference(mPreferenceScreen); 569a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang } 579a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 589a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang @Test 599a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang public void onPreferenceChanged_settingEnabled_turnOnTetheringAccel() { 609a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang mController.onPreferenceChange(mPreference, true /* new value */); 619a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 629a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang final int mode = Settings.System.getInt(mContext.getContentResolver(), 639a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang Settings.Global.TETHER_OFFLOAD_DISABLED, -1 /* default */); 649a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 659a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang assertThat(mode).isEqualTo(TetheringHardwareAccelPreferenceController.SETTING_VALUE_ON); 669a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang } 679a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 689a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang @Test 699a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang public void onPreferenceChanged_settingDisabled_turnOffTetheringAccel() { 709a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang mController.onPreferenceChange(mPreference, false /* new value */); 719a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 729a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang final int mode = Settings.System.getInt(mContext.getContentResolver(), 739a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang Settings.Global.TETHER_OFFLOAD_DISABLED, -1 /* default */); 749a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 759a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang assertThat(mode).isEqualTo(TetheringHardwareAccelPreferenceController.SETTING_VALUE_OFF); 769a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang } 779a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 789a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang @Test 799a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang public void updateState_settingEnabled_preferenceShouldBeChecked() { 809a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang Settings.System.putInt(mContext.getContentResolver(), 819a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang Settings.Global.TETHER_OFFLOAD_DISABLED, 829a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang TetheringHardwareAccelPreferenceController.SETTING_VALUE_ON); 839a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang mController.updateState(mPreference); 849a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 859a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang verify(mPreference).setChecked(true); 869a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang } 879a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 889a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang @Test 899a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang public void updateState_settingDisabled_preferenceShouldNotBeChecked() { 909a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang Settings.System.putInt(mContext.getContentResolver(), 919a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang Settings.Global.TETHER_OFFLOAD_DISABLED, 929a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang TetheringHardwareAccelPreferenceController.SETTING_VALUE_OFF); 939a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang mController.updateState(mPreference); 949a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 959a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang verify(mPreference).setChecked(false); 969a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang } 979a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 989a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang @Test 999a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() { 1009a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang mController.onDeveloperOptionsSwitchDisabled(); 1019a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang final int mode = Settings.System.getInt(mContext.getContentResolver(), 1029a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang Settings.Global.TETHER_OFFLOAD_DISABLED, -1 /* default */); 1039a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang 1049a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang assertThat(mode).isEqualTo(TetheringHardwareAccelPreferenceController.SETTING_VALUE_OFF); 1059a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang verify(mPreference).setEnabled(false); 1069a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang verify(mPreference).setChecked(false); 1079a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang } 1089a0495f6368eed5671d60670d5803bfe4fb272cajeffreyhuang} 109