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