1 /*
2  * Copyright (C) 2020 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 org.mockito.Mockito.verify;
20 
21 import android.content.pm.ActivityInfo;
22 import android.hardware.display.DisplayManager;
23 import android.provider.Settings;
24 import android.testing.AndroidTestingRunner;
25 import android.testing.TestableLooper;
26 import android.view.Display;
27 import android.view.View;
28 
29 import androidx.test.filters.SmallTest;
30 
31 import com.android.systemui.SysuiTestCase;
32 
33 import org.junit.After;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.mockito.Mock;
38 import org.mockito.Mockito;
39 import org.mockito.MockitoAnnotations;
40 
41 @SmallTest
42 @RunWith(AndroidTestingRunner.class)
43 /** Tests the ModeSwitchesController. */
44 @TestableLooper.RunWithLooper(setAsMainLooper = true)
45 public class ModeSwitchesControllerTest extends SysuiTestCase {
46 
47     private FakeSwitchSupplier mSupplier;
48     private MagnificationModeSwitch mModeSwitch;
49     private ModeSwitchesController mModeSwitchesController;
50     private View mSpyView;
51     @Mock
52     private MagnificationModeSwitch.ClickListener mListener;
53 
54 
55     @Before
setUp()56     public void setUp() {
57         MockitoAnnotations.initMocks(this);
58         mSupplier = new FakeSwitchSupplier(mContext.getSystemService(DisplayManager.class));
59         mModeSwitchesController = new ModeSwitchesController(mSupplier);
60         mModeSwitchesController.setClickListenerDelegate(mListener);
61         mModeSwitch = Mockito.spy(new MagnificationModeSwitch(mContext, mModeSwitchesController));
62         mSpyView = Mockito.spy(new View(mContext));
63     }
64 
65     @After
tearDown()66     public void tearDown() {
67         mModeSwitchesController.removeButton(Display.DEFAULT_DISPLAY);
68     }
69 
70     @Test
testShowButton()71     public void testShowButton() {
72         mModeSwitchesController.showButton(Display.DEFAULT_DISPLAY,
73                 Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
74 
75         verify(mModeSwitch).showButton(Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
76     }
77 
78     @Test
testRemoveButton()79     public void testRemoveButton() {
80         mModeSwitchesController.showButton(Display.DEFAULT_DISPLAY,
81                 Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
82 
83         mModeSwitchesController.removeButton(Display.DEFAULT_DISPLAY);
84 
85         verify(mModeSwitch).removeButton();
86     }
87 
88     @Test
testControllerOnConfigurationChanged_notifyShowingButton()89     public void testControllerOnConfigurationChanged_notifyShowingButton() {
90         mModeSwitchesController.showButton(Display.DEFAULT_DISPLAY,
91                 Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
92         mModeSwitchesController.onConfigurationChanged(ActivityInfo.CONFIG_DENSITY);
93 
94         verify(mModeSwitch).onConfigurationChanged(ActivityInfo.CONFIG_DENSITY);
95     }
96 
97     @Test
testOnSwitchClick_showWindowModeButton_invokeListener()98     public void testOnSwitchClick_showWindowModeButton_invokeListener() {
99         mModeSwitchesController.showButton(Display.DEFAULT_DISPLAY,
100                 Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
101 
102         mModeSwitch.onSingleTap(mSpyView);
103 
104         verify(mListener).onClick(mContext.getDisplayId());
105     }
106 
107     private class FakeSwitchSupplier extends DisplayIdIndexSupplier<MagnificationModeSwitch> {
108 
FakeSwitchSupplier(DisplayManager displayManager)109         FakeSwitchSupplier(DisplayManager displayManager) {
110             super(displayManager);
111         }
112 
113         @Override
createInstance(Display display)114         protected MagnificationModeSwitch createInstance(Display display) {
115             return mModeSwitch;
116         }
117     }
118 }
119