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.assertEquals;
20 import static org.mockito.Mockito.doNothing;
21 import static org.mockito.Mockito.doReturn;
22 import static org.mockito.Mockito.mock;
23 import static org.mockito.Mockito.spy;
24 
25 import android.testing.AndroidTestingRunner;
26 import android.testing.TestableLooper.RunWithLooper;
27 import android.util.SparseArray;
28 import android.view.View;
29 import android.widget.FrameLayout;
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.buttons.ButtonDispatcher;
36 import com.android.systemui.navigationbar.NavigationBarInflaterView;
37 import com.android.systemui.navigationbar.NavigationModeController;
38 import com.android.systemui.recents.OverviewProxyService;
39 
40 import org.junit.After;
41 import org.junit.Before;
42 import org.junit.Test;
43 import org.junit.runner.RunWith;
44 
45 /** atest NavigationBarInflaterViewTest */
46 @RunWith(AndroidTestingRunner.class)
47 @RunWithLooper
48 @SmallTest
49 public class NavigationBarInflaterViewTest extends SysuiTestCase {
50 
51     private NavigationBarInflaterView mNavBarInflaterView;
52 
53     private static final int BUTTON_ID = 0;
54 
55     @Before
setUp()56     public void setUp() {
57         mDependency.injectMockDependency(AssistManager.class);
58         mDependency.injectMockDependency(OverviewProxyService.class);
59         mDependency.injectMockDependency(NavigationModeController.class);
60         mDependency.injectMockDependency(NavigationBarController.class);
61 
62         mNavBarInflaterView = spy(new NavigationBarInflaterView(mContext, null));
63         doNothing().when(mNavBarInflaterView).createInflaters();
64 
65         mNavBarInflaterView.mButtonDispatchers = new SparseArray<>(1);
66         mNavBarInflaterView.mButtonDispatchers.put(BUTTON_ID, new ButtonDispatcher(BUTTON_ID));
67 
68         initializeViews();
69     }
70 
initializeViews()71     private void initializeViews() {
72         mNavBarInflaterView.mVertical = mock(FrameLayout.class);
73         mNavBarInflaterView.mHorizontal = mock(FrameLayout.class);
74         initializeLayout(mNavBarInflaterView.mVertical);
75         initializeLayout(mNavBarInflaterView.mHorizontal);
76     }
77 
initializeLayout(FrameLayout layout)78     private void initializeLayout(FrameLayout layout) {
79         View verticalChildView = mock(View.class);
80         verticalChildView.setId(BUTTON_ID);
81         doReturn(layout).when(verticalChildView).getParent();
82         doReturn(verticalChildView).when(layout).findViewById(BUTTON_ID);
83     }
84 
85     @After
tearDown()86     public void tearDown() {
87         mNavBarInflaterView = null;
88     }
89 
90     @Test
testUpdateButtonDispatchersCurrentView_isVerticalTrue()91     public void testUpdateButtonDispatchersCurrentView_isVerticalTrue() {
92         mNavBarInflaterView.setVertical(true);
93 
94         mNavBarInflaterView.updateButtonDispatchersCurrentView();
95 
96         ButtonDispatcher button = mNavBarInflaterView.mButtonDispatchers.get(BUTTON_ID);
97         assertEquals("Buttons need to be set to vertical layout",
98                 mNavBarInflaterView.mVertical.getId(),
99                 ((View) button.getCurrentView().getParent()).getId());
100     }
101 
102     @Test
testUpdateButtonDispatchersCurrentView_isVerticalFalse()103     public void testUpdateButtonDispatchersCurrentView_isVerticalFalse() {
104         mNavBarInflaterView.setVertical(false);
105 
106         mNavBarInflaterView.updateButtonDispatchersCurrentView();
107 
108         ButtonDispatcher button = mNavBarInflaterView.mButtonDispatchers.get(BUTTON_ID);
109         assertEquals("Buttons need to be set to horizon layout",
110                 mNavBarInflaterView.mHorizontal.getId(),
111                 ((View) button.getCurrentView().getParent()).getId());
112     }
113 }
114