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.navigationbar;
18 
19 import static org.junit.Assert.assertFalse;
20 import static org.junit.Assert.assertTrue;
21 import static org.mockito.ArgumentMatchers.any;
22 import static org.mockito.ArgumentMatchers.anyInt;
23 import static org.mockito.Mockito.doReturn;
24 import static org.mockito.Mockito.spy;
25 import static org.mockito.Mockito.when;
26 
27 import android.content.Context;
28 import android.testing.AndroidTestingRunner;
29 import android.testing.TestableLooper.RunWithLooper;
30 
31 import androidx.test.filters.SmallTest;
32 
33 import com.android.systemui.SysuiTestCase;
34 import com.android.systemui.assist.AssistManager;
35 import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
36 import com.android.systemui.plugins.statusbar.StatusBarStateController;
37 import com.android.systemui.recents.OverviewProxyService;
38 import com.android.systemui.settings.FakeDisplayTracker;
39 import com.android.systemui.statusbar.phone.BarTransitions;
40 import com.android.systemui.statusbar.phone.LightBarTransitionsController;
41 import com.android.systemui.statusbar.policy.KeyguardStateController;
42 
43 import org.junit.Before;
44 import org.junit.Test;
45 import org.junit.runner.RunWith;
46 import org.mockito.Mock;
47 import org.mockito.MockitoAnnotations;
48 
49 @RunWith(AndroidTestingRunner.class)
50 @RunWithLooper
51 @SmallTest
52 public class NavigationBarTransitionsTest extends SysuiTestCase {
53 
54     @Mock
55     LightBarTransitionsController.Factory mLightBarTransitionsFactory;
56     @Mock
57     LightBarTransitionsController mLightBarTransitions;
58     @Mock
59     EdgeBackGestureHandler.Factory mEdgeBackGestureHandlerFactory;
60     @Mock
61     EdgeBackGestureHandler mEdgeBackGestureHandler;
62 
63     private NavigationBarTransitions mTransitions;
64     private FakeDisplayTracker mDisplayTracker = new FakeDisplayTracker(mContext);
65 
66     @Before
setup()67     public void setup() {
68         MockitoAnnotations.initMocks(this);
69 
70         when(mEdgeBackGestureHandlerFactory.create(any(Context.class)))
71                 .thenReturn(mEdgeBackGestureHandler);
72         mDependency.injectMockDependency(AssistManager.class);
73         mDependency.injectMockDependency(OverviewProxyService.class);
74         mDependency.injectMockDependency(StatusBarStateController.class);
75         mDependency.injectMockDependency(KeyguardStateController.class);
76         mDependency.injectMockDependency(NavigationBarController.class);
77         mDependency.injectTestDependency(EdgeBackGestureHandler.Factory.class,
78                 mEdgeBackGestureHandlerFactory);
79         doReturn(mContext)
80                 .when(mDependency.injectMockDependency(NavigationModeController.class))
81                 .getCurrentUserContext();
82 
83         when(mLightBarTransitionsFactory.create(any())).thenReturn(mLightBarTransitions);
84         NavigationBarView navBar = spy(new NavigationBarView(mContext, null));
85         when(navBar.getCurrentView()).thenReturn(navBar);
86         when(navBar.findViewById(anyInt())).thenReturn(navBar);
87         mTransitions = new NavigationBarTransitions(
88                 navBar, mLightBarTransitionsFactory, mDisplayTracker);
89     }
90 
91     @Test
setIsLightsOut_NoAutoDim()92     public void setIsLightsOut_NoAutoDim() {
93         mTransitions.setAutoDim(false);
94 
95         assertFalse(mTransitions.isLightsOut(BarTransitions.MODE_OPAQUE));
96 
97         assertTrue(mTransitions.isLightsOut(BarTransitions.MODE_LIGHTS_OUT));
98     }
99 
100     @Test
setIsLightsOut_AutoDim()101     public void setIsLightsOut_AutoDim() {
102         mTransitions.setAutoDim(true);
103 
104         assertTrue(mTransitions.isLightsOut(BarTransitions.MODE_OPAQUE));
105 
106         assertTrue(mTransitions.isLightsOut(BarTransitions.MODE_LIGHTS_OUT));
107     }
108 }