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