1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.systemui.accessibility;
18 
19 import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN;
20 
21 import static org.mockito.ArgumentMatchers.eq;
22 import static org.mockito.Mockito.verify;
23 
24 import android.content.pm.ActivityInfo;
25 import android.testing.AndroidTestingRunner;
26 import android.testing.TestableLooper;
27 
28 import androidx.test.filters.SmallTest;
29 
30 import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
31 import com.android.systemui.SysuiTestCase;
32 import com.android.systemui.accessibility.WindowMagnificationSettings.MagnificationSize;
33 import com.android.systemui.util.settings.SecureSettings;
34 
35 import org.junit.After;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.junit.runner.RunWith;
39 import org.mockito.Mock;
40 import org.mockito.MockitoAnnotations;
41 
42 @SmallTest
43 @RunWith(AndroidTestingRunner.class)
44 /** Tests the MagnificationSettingsController. */
45 @TestableLooper.RunWithLooper(setAsMainLooper = true)
46 public class MagnificationSettingsControllerTest extends SysuiTestCase {
47 
48     private MagnificationSettingsController mMagnificationSettingsController;
49     @Mock
50     private MagnificationSettingsController.Callback mMagnificationSettingControllerCallback;
51 
52     @Mock
53     private WindowMagnificationSettings mWindowMagnificationSettings;
54 
55     @Mock
56     private SfVsyncFrameCallbackProvider mSfVsyncFrameProvider;
57     @Mock
58     private SecureSettings mSecureSettings;
59 
60     @Before
setUp()61     public void setUp() {
62         MockitoAnnotations.initMocks(this);
63         mMagnificationSettingsController = new MagnificationSettingsController(
64                 mContext, mSfVsyncFrameProvider,
65                 mMagnificationSettingControllerCallback, mSecureSettings,
66                 mWindowMagnificationSettings);
67     }
68 
69     @After
tearDown()70     public void tearDown() {
71         mMagnificationSettingsController.closeMagnificationSettings();
72     }
73 
74     @Test
testShowSettingsPanel()75     public void testShowSettingsPanel() {
76         mMagnificationSettingsController.toggleSettingsPanelVisibility();
77 
78         verify(mWindowMagnificationSettings).toggleSettingsPanelVisibility();
79     }
80 
81     @Test
testHideSettingsPanel()82     public void testHideSettingsPanel() {
83         mMagnificationSettingsController.closeMagnificationSettings();
84 
85         verify(mWindowMagnificationSettings).hideSettingPanel();
86     }
87 
88     @Test
testSetMagnificationScale()89     public void testSetMagnificationScale() {
90         final float scale = 3.0f;
91         mMagnificationSettingsController.setMagnificationScale(scale);
92 
93         verify(mWindowMagnificationSettings).setMagnificationScale(eq(scale));
94     }
95 
96     @Test
testOnConfigurationChanged_notifySettingsPanel()97     public void testOnConfigurationChanged_notifySettingsPanel() {
98         mMagnificationSettingsController.onConfigurationChanged(ActivityInfo.CONFIG_DENSITY);
99 
100         verify(mWindowMagnificationSettings).onConfigurationChanged(ActivityInfo.CONFIG_DENSITY);
101     }
102 
103     @Test
testPanelOnSetDiagonalScrolling_delegateToCallback()104     public void testPanelOnSetDiagonalScrolling_delegateToCallback() {
105         final boolean enable = true;
106         mMagnificationSettingsController.mWindowMagnificationSettingsCallback
107                 .onSetDiagonalScrolling(enable);
108 
109         verify(mMagnificationSettingControllerCallback).onSetDiagonalScrolling(
110                 eq(mContext.getDisplayId()), eq(enable));
111     }
112 
113     @Test
testPanelOnModeSwitch_delegateToCallback()114     public void testPanelOnModeSwitch_delegateToCallback() {
115         final int newMode = ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN;
116         mMagnificationSettingsController.mWindowMagnificationSettingsCallback
117                 .onModeSwitch(newMode);
118 
119         verify(mMagnificationSettingControllerCallback).onModeSwitch(
120                 eq(mContext.getDisplayId()), eq(newMode));
121     }
122 
123     @Test
testPanelOnSettingsPanelVisibilityChanged_delegateToCallback()124     public void testPanelOnSettingsPanelVisibilityChanged_delegateToCallback() {
125         final boolean shown = true;
126         mMagnificationSettingsController.mWindowMagnificationSettingsCallback
127                 .onSettingsPanelVisibilityChanged(shown);
128 
129         verify(mMagnificationSettingControllerCallback).onSettingsPanelVisibilityChanged(
130                 eq(mContext.getDisplayId()), eq(shown));
131     }
132 
133     @Test
testPanelOnSetMagnifierSize_delegateToCallback()134     public void testPanelOnSetMagnifierSize_delegateToCallback() {
135         final @MagnificationSize int index = MagnificationSize.SMALL;
136         mMagnificationSettingsController.mWindowMagnificationSettingsCallback
137                 .onSetMagnifierSize(index);
138 
139         verify(mMagnificationSettingControllerCallback).onSetMagnifierSize(
140                 eq(mContext.getDisplayId()), eq(index));
141     }
142 
143     @Test
testPanelOnEditMagnifierSizeMode_delegateToCallback()144     public void testPanelOnEditMagnifierSizeMode_delegateToCallback() {
145         final boolean enable = true;
146         mMagnificationSettingsController.mWindowMagnificationSettingsCallback
147                 .onEditMagnifierSizeMode(enable);
148 
149         verify(mMagnificationSettingControllerCallback).onEditMagnifierSizeMode(
150                 eq(mContext.getDisplayId()), eq(enable));
151     }
152 
153     @Test
testPanelOnMagnifierScale_delegateToCallback()154     public void testPanelOnMagnifierScale_delegateToCallback() {
155         final float scale = 3.0f;
156         final boolean updatePersistence = true;
157         mMagnificationSettingsController.mWindowMagnificationSettingsCallback
158                 .onMagnifierScale(scale, updatePersistence);
159 
160         verify(mMagnificationSettingControllerCallback).onMagnifierScale(
161                 eq(mContext.getDisplayId()), eq(scale), eq(updatePersistence));
162     }
163 }
164