1 /*
2  * Copyright (C) 2019 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.globalactions;
18 
19 import static junit.framework.Assert.assertEquals;
20 
21 import static org.mockito.Mockito.doReturn;
22 import static org.mockito.Mockito.spy;
23 
24 import android.testing.AndroidTestingRunner;
25 import android.view.LayoutInflater;
26 import android.view.View;
27 import android.view.ViewGroup;
28 
29 import androidx.test.filters.SmallTest;
30 
31 import com.android.systemui.R;
32 import com.android.systemui.SysuiTestCase;
33 import com.android.systemui.util.leak.RotationUtils;
34 
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.junit.runner.RunWith;
38 
39 /**
40  * Tests for {@link ListGridLayout}.
41  */
42 @SmallTest
43 @RunWith(AndroidTestingRunner.class)
44 public class GlobalActionsGridLayoutTest extends SysuiTestCase {
45 
46     private GlobalActionsGridLayout mGridLayout;
47     private ListGridLayout mListGrid;
48 
49     @Before
setUp()50     public void setUp() throws Exception {
51         mGridLayout = spy(LayoutInflater.from(mContext)
52                 .inflate(R.layout.global_actions_grid, null)
53                 .requireViewById(R.id.global_actions_view));
54         mListGrid = spy(mGridLayout.getListView());
55         doReturn(mListGrid).when(mGridLayout).getListView();
56     }
57 
58     @Test
testShouldSwapRowsAndColumns()59     public void testShouldSwapRowsAndColumns() {
60         doReturn(RotationUtils.ROTATION_NONE).when(mGridLayout).getCurrentRotation();
61         assertEquals(false, mGridLayout.shouldSwapRowsAndColumns());
62 
63         doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mGridLayout).getCurrentRotation();
64         assertEquals(true, mGridLayout.shouldSwapRowsAndColumns());
65 
66         doReturn(RotationUtils.ROTATION_SEASCAPE).when(mGridLayout).getCurrentRotation();
67         assertEquals(true, mGridLayout.shouldSwapRowsAndColumns());
68     }
69 
70     @Test
testShouldReverseListItems()71     public void testShouldReverseListItems() {
72         doReturn(View.LAYOUT_DIRECTION_LTR).when(mGridLayout).getCurrentLayoutDirection();
73 
74         doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mGridLayout).getCurrentRotation();
75         assertEquals(false, mGridLayout.shouldReverseListItems());
76 
77         doReturn(RotationUtils.ROTATION_NONE).when(mGridLayout).getCurrentRotation();
78         assertEquals(true, mGridLayout.shouldReverseListItems());
79 
80         doReturn(RotationUtils.ROTATION_SEASCAPE).when(mGridLayout).getCurrentRotation();
81         assertEquals(true, mGridLayout.shouldReverseListItems());
82 
83         doReturn(View.LAYOUT_DIRECTION_RTL).when(mGridLayout).getCurrentLayoutDirection();
84 
85         doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mGridLayout).getCurrentRotation();
86         assertEquals(true, mGridLayout.shouldReverseListItems());
87 
88         doReturn(RotationUtils.ROTATION_NONE).when(mGridLayout).getCurrentRotation();
89         assertEquals(false, mGridLayout.shouldReverseListItems());
90 
91         doReturn(RotationUtils.ROTATION_SEASCAPE).when(mGridLayout).getCurrentRotation();
92         assertEquals(false, mGridLayout.shouldReverseListItems());
93     }
94 
95     @Test
testShouldReverseSublists()96     public void testShouldReverseSublists() {
97         doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mGridLayout).getCurrentRotation();
98         assertEquals(false, mGridLayout.shouldReverseSublists());
99 
100         doReturn(RotationUtils.ROTATION_NONE).when(mGridLayout).getCurrentRotation();
101         assertEquals(false, mGridLayout.shouldReverseSublists());
102 
103         doReturn(RotationUtils.ROTATION_SEASCAPE).when(mGridLayout).getCurrentRotation();
104         assertEquals(true, mGridLayout.shouldReverseSublists());
105     }
106 
107     @Test
testGetAnimationOffsetX()108     public void testGetAnimationOffsetX() {
109         doReturn(50f).when(mGridLayout).getAnimationDistance();
110 
111         doReturn(RotationUtils.ROTATION_NONE).when(mGridLayout).getCurrentRotation();
112         assertEquals(0f, mGridLayout.getAnimationOffsetX(), .01);
113 
114         doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mGridLayout).getCurrentRotation();
115         assertEquals(50f, mGridLayout.getAnimationOffsetX(), .01);
116 
117         doReturn(RotationUtils.ROTATION_SEASCAPE).when(mGridLayout).getCurrentRotation();
118         assertEquals(-50f, mGridLayout.getAnimationOffsetX(), .01);
119     }
120 
121     @Test
testGetAnimationOffsetY()122     public void testGetAnimationOffsetY() {
123         doReturn(50f).when(mGridLayout).getAnimationDistance();
124 
125         doReturn(RotationUtils.ROTATION_NONE).when(mGridLayout).getCurrentRotation();
126         assertEquals(50f, mGridLayout.getAnimationOffsetY(), .01);
127 
128         doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mGridLayout).getCurrentRotation();
129         assertEquals(0f, mGridLayout.getAnimationOffsetY(), .01);
130 
131         doReturn(RotationUtils.ROTATION_SEASCAPE).when(mGridLayout).getCurrentRotation();
132         assertEquals(0f, mGridLayout.getAnimationOffsetY(), .01);
133     }
134 
135     @Test
testUpdateSeparatedItemSize()136     public void testUpdateSeparatedItemSize() {
137         View firstView = new View(mContext, null);
138         View secondView = new View(mContext, null);
139 
140         ViewGroup separatedView = mGridLayout.getSeparatedView();
141         separatedView.addView(firstView);
142 
143         mGridLayout.updateSeparatedItemSize();
144 
145         ViewGroup.LayoutParams childParams = firstView.getLayoutParams();
146         assertEquals(ViewGroup.LayoutParams.MATCH_PARENT, childParams.width);
147         assertEquals(ViewGroup.LayoutParams.MATCH_PARENT, childParams.height);
148 
149         separatedView.addView(secondView);
150 
151         mGridLayout.updateSeparatedItemSize();
152 
153         childParams = firstView.getLayoutParams();
154         assertEquals(ViewGroup.LayoutParams.WRAP_CONTENT, childParams.width);
155         assertEquals(ViewGroup.LayoutParams.WRAP_CONTENT, childParams.height);
156     }
157 }
158