1a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang/* 2a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * Copyright (C) 2017 The Android Open Source Project 3a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * 4a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * Licensed under the Apache License, Version 2.0 (the "License"); 5a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * you may not use this file except in compliance with the License. 6a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * You may obtain a copy of the License at 7a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * 8a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * http://www.apache.org/licenses/LICENSE-2.0 9a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * 10a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * Unless required by applicable law or agreed to in writing, software 11a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * distributed under the License is distributed on an "AS IS" BASIS, 12a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * See the License for the specific language governing permissions and 14a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang * limitations under the License. 15a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang */ 16a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 17a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangpackage com.android.settings.development; 18a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 19a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport static com.google.common.truth.Truth.assertThat; 20a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport static org.mockito.Mockito.verify; 21a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport static org.mockito.Mockito.when; 22a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 2322a39c2b93bc66db71238274a7683d329232d124James Lemieuximport android.os.SystemProperties; 24a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport android.support.v14.preference.SwitchPreference; 25a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport android.support.v7.preference.PreferenceScreen; 26a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport android.view.ThreadedRenderer; 27a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 28a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport com.android.settings.testutils.SettingsRobolectricTestRunner; 29a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 30a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport org.junit.Before; 31a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport org.junit.Test; 32a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport org.junit.runner.RunWith; 33a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport org.mockito.Mock; 34a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport org.mockito.MockitoAnnotations; 35a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangimport org.robolectric.RuntimeEnvironment; 36a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 37a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang@RunWith(SettingsRobolectricTestRunner.class) 38a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuangpublic class HardwareLayersUpdatesPreferenceControllerTest { 39a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 40a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang @Mock 41a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang private SwitchPreference mPreference; 42a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang @Mock 43a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang private PreferenceScreen mPreferenceScreen; 44a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 45a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang private HardwareLayersUpdatesPreferenceController mController; 46a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 47a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang @Before 48a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang public void setup() { 49a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang MockitoAnnotations.initMocks(this); 5022a39c2b93bc66db71238274a7683d329232d124James Lemieux mController = new HardwareLayersUpdatesPreferenceController(RuntimeEnvironment.application); 5122a39c2b93bc66db71238274a7683d329232d124James Lemieux when(mPreferenceScreen.findPreference(mController.getPreferenceKey())) 5222a39c2b93bc66db71238274a7683d329232d124James Lemieux .thenReturn(mPreference); 53a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang mController.displayPreference(mPreferenceScreen); 54a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang } 55a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 56a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang @Test 57a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang public void onPreferenceChanged_settingEnabled_turnOnHardwareLayersUpdates() { 58a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang mController.onPreferenceChange(mPreference, true /* new value */); 59a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 6022a39c2b93bc66db71238274a7683d329232d124James Lemieux final boolean mode = SystemProperties 6122a39c2b93bc66db71238274a7683d329232d124James Lemieux .getBoolean(ThreadedRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY, false /* default */); 62a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 63a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang assertThat(mode).isTrue(); 64a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang } 65a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 66a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang @Test 67a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang public void onPreferenceChanged_settingDisabled_turnOffHardwareLayersUpdates() { 68a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang mController.onPreferenceChange(mPreference, false /* new value */); 69a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 7022a39c2b93bc66db71238274a7683d329232d124James Lemieux final boolean mode = SystemProperties 7122a39c2b93bc66db71238274a7683d329232d124James Lemieux .getBoolean(ThreadedRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY, false /* default */); 72a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 73a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang assertThat(mode).isFalse(); 74a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang } 75a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 76a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang @Test 77a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang public void updateState_settingEnabled_preferenceShouldBeChecked() { 7822a39c2b93bc66db71238274a7683d329232d124James Lemieux SystemProperties 7922a39c2b93bc66db71238274a7683d329232d124James Lemieux .set(ThreadedRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY, Boolean.toString(true)); 80a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang mController.updateState(mPreference); 81a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 82a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang verify(mPreference).setChecked(true); 83a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang } 84a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 85a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang @Test 86a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang public void updateState_settingDisabled_preferenceShouldNotBeChecked() { 8722a39c2b93bc66db71238274a7683d329232d124James Lemieux SystemProperties 8822a39c2b93bc66db71238274a7683d329232d124James Lemieux .set(ThreadedRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY, Boolean.toString(false)); 89a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang mController.updateState(mPreference); 90a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 91a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang verify(mPreference).setChecked(false); 92a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang } 93a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 94a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang @Test 95a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang public void onDeveloperOptionsDisabled_shouldDisablePreference() { 96a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang mController.onDeveloperOptionsDisabled(); 97a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang 98a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang verify(mPreference).setEnabled(false); 99a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang verify(mPreference).setChecked(false); 100a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang } 101a9f7c95f271f0dcc506335e1b4f6aa44a4769299jeffreyhuang} 102