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 android.testing.AndroidTestingRunner;
22 import android.view.LayoutInflater;
23 import android.view.View;
24 import android.view.ViewGroup;
25 
26 import androidx.test.filters.SmallTest;
27 
28 import com.android.systemui.R;
29 import com.android.systemui.SysuiTestCase;
30 
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 
35 /**
36  * Tests for {@link ListGridLayout}.
37  */
38 @SmallTest
39 @RunWith(AndroidTestingRunner.class)
40 public class ListGridLayoutTest extends SysuiTestCase {
41 
42     private ListGridLayout mListGridLayout;
43 
44     @Before
setUp()45     public void setUp() throws Exception {
46         GlobalActionsGridLayout globalActions = LayoutInflater.from(mContext)
47                 .inflate(R.layout.global_actions_grid, null)
48                 .requireViewById(R.id.global_actions_view);
49         mListGridLayout = globalActions.getListView();
50     }
51 
52     @Test
testInflation()53     public void testInflation() {
54         assertEquals(3, mListGridLayout.getChildCount());
55     }
56 
57     @Test
testGetRowCount()58     public void testGetRowCount() {
59         // above expected range
60         mListGridLayout.setExpectedCount(99);
61         assertEquals(3, mListGridLayout.getRowCount());
62 
63         mListGridLayout.setExpectedCount(9);
64         assertEquals(3, mListGridLayout.getRowCount());
65         mListGridLayout.setExpectedCount(8);
66         assertEquals(3, mListGridLayout.getRowCount());
67         mListGridLayout.setExpectedCount(7);
68         assertEquals(3, mListGridLayout.getRowCount());
69         mListGridLayout.setExpectedCount(6);
70         assertEquals(2, mListGridLayout.getRowCount());
71         mListGridLayout.setExpectedCount(5);
72         assertEquals(2, mListGridLayout.getRowCount());
73         mListGridLayout.setExpectedCount(4);
74         assertEquals(2, mListGridLayout.getRowCount());
75         mListGridLayout.setExpectedCount(3);
76         assertEquals(1, mListGridLayout.getRowCount());
77         mListGridLayout.setExpectedCount(2);
78         assertEquals(1, mListGridLayout.getRowCount());
79         mListGridLayout.setExpectedCount(1);
80         assertEquals(1, mListGridLayout.getRowCount());
81         mListGridLayout.setExpectedCount(0);
82         assertEquals(0, mListGridLayout.getRowCount());
83 
84         // below expected range
85         mListGridLayout.setExpectedCount(-1);
86         assertEquals(0, mListGridLayout.getRowCount());
87     }
88 
89     @Test
testGetColumnCount()90     public void testGetColumnCount() {
91         // above expected range
92         mListGridLayout.setExpectedCount(99);
93 
94         assertEquals(3, mListGridLayout.getColumnCount());
95         mListGridLayout.setExpectedCount(9);
96         assertEquals(3, mListGridLayout.getColumnCount());
97         mListGridLayout.setExpectedCount(8);
98         assertEquals(3, mListGridLayout.getColumnCount());
99         mListGridLayout.setExpectedCount(7);
100         assertEquals(3, mListGridLayout.getColumnCount());
101         mListGridLayout.setExpectedCount(6);
102         assertEquals(3, mListGridLayout.getColumnCount());
103         mListGridLayout.setExpectedCount(5);
104         assertEquals(3, mListGridLayout.getColumnCount());
105         mListGridLayout.setExpectedCount(4);
106         assertEquals(2, mListGridLayout.getColumnCount());
107         mListGridLayout.setExpectedCount(3);
108         assertEquals(3, mListGridLayout.getColumnCount());
109         mListGridLayout.setExpectedCount(2);
110         assertEquals(2, mListGridLayout.getColumnCount());
111         mListGridLayout.setExpectedCount(1);
112         assertEquals(1, mListGridLayout.getColumnCount());
113         mListGridLayout.setExpectedCount(0);
114         assertEquals(0, mListGridLayout.getColumnCount());
115 
116         // below expected range
117         mListGridLayout.setExpectedCount(-1);
118         assertEquals(0, mListGridLayout.getColumnCount());
119     }
120 
121     @Test
testGetParentView_default()122     public void testGetParentView_default() {
123         mListGridLayout.setExpectedCount(9);
124 
125         // below valid range
126         assertEquals(null,
127                 mListGridLayout.getParentView(-1, false, false));
128 
129         assertEquals(mListGridLayout.getSublist(0),
130                 mListGridLayout.getParentView(0, false, false));
131         assertEquals(mListGridLayout.getSublist(1),
132                 mListGridLayout.getParentView(1, false, false));
133         assertEquals(mListGridLayout.getSublist(2),
134                 mListGridLayout.getParentView(2, false, false));
135         assertEquals(mListGridLayout.getSublist(0),
136                 mListGridLayout.getParentView(3, false, false));
137         assertEquals(mListGridLayout.getSublist(1),
138                 mListGridLayout.getParentView(4, false, false));
139         assertEquals(mListGridLayout.getSublist(2),
140                 mListGridLayout.getParentView(5, false, false));
141         assertEquals(mListGridLayout.getSublist(0),
142                 mListGridLayout.getParentView(6, false, false));
143         assertEquals(mListGridLayout.getSublist(1),
144                 mListGridLayout.getParentView(7, false, false));
145         assertEquals(mListGridLayout.getSublist(2),
146                 mListGridLayout.getParentView(8, false, false));
147 
148         // above valid range
149         assertEquals(mListGridLayout.getSublist(2),
150                 mListGridLayout.getParentView(9, false, false));
151     }
152 
153     @Test
testGetParentView_reverseSublists()154     public void testGetParentView_reverseSublists() {
155         mListGridLayout.setExpectedCount(9);
156 
157         // below valid range
158         assertEquals(null,
159                 mListGridLayout.getParentView(-1, true, false));
160 
161         assertEquals(mListGridLayout.getSublist(2),
162                 mListGridLayout.getParentView(0, true, false));
163         assertEquals(mListGridLayout.getSublist(1),
164                 mListGridLayout.getParentView(1, true, false));
165         assertEquals(mListGridLayout.getSublist(0),
166                 mListGridLayout.getParentView(2, true, false));
167         assertEquals(mListGridLayout.getSublist(2),
168                 mListGridLayout.getParentView(3, true, false));
169         assertEquals(mListGridLayout.getSublist(1),
170                 mListGridLayout.getParentView(4, true, false));
171         assertEquals(mListGridLayout.getSublist(0),
172                 mListGridLayout.getParentView(5, true, false));
173         assertEquals(mListGridLayout.getSublist(2),
174                 mListGridLayout.getParentView(6, true, false));
175         assertEquals(mListGridLayout.getSublist(1),
176                 mListGridLayout.getParentView(7, true, false));
177         assertEquals(mListGridLayout.getSublist(0),
178                 mListGridLayout.getParentView(8, true, false));
179 
180         // above valid range
181         assertEquals(mListGridLayout.getSublist(0),
182                 mListGridLayout.getParentView(9, true, false));
183     }
184 
185     @Test
testGetParentView_swapRowsAndColumns()186     public void testGetParentView_swapRowsAndColumns() {
187         mListGridLayout.setExpectedCount(9);
188 
189         // below valid range
190         assertEquals(null,
191                 mListGridLayout.getParentView(-1, false, true));
192 
193         assertEquals(mListGridLayout.getSublist(0),
194                 mListGridLayout.getParentView(0, false, true));
195         assertEquals(mListGridLayout.getSublist(0),
196                 mListGridLayout.getParentView(1, false, true));
197         assertEquals(mListGridLayout.getSublist(0),
198                 mListGridLayout.getParentView(2, false, true));
199         assertEquals(mListGridLayout.getSublist(1),
200                 mListGridLayout.getParentView(3, false, true));
201         assertEquals(mListGridLayout.getSublist(1),
202                 mListGridLayout.getParentView(4, false, true));
203         assertEquals(mListGridLayout.getSublist(1),
204                 mListGridLayout.getParentView(5, false, true));
205         assertEquals(mListGridLayout.getSublist(2),
206                 mListGridLayout.getParentView(6, false, true));
207         assertEquals(mListGridLayout.getSublist(2),
208                 mListGridLayout.getParentView(7, false, true));
209         assertEquals(mListGridLayout.getSublist(2),
210                 mListGridLayout.getParentView(8, false, true));
211 
212         // above valid range
213         assertEquals(mListGridLayout.getSublist(2),
214                 mListGridLayout.getParentView(9, false, true));
215     }
216 
217     @Test
testGetParentView_swapRowsAndColumnsAndReverseSublists()218     public void testGetParentView_swapRowsAndColumnsAndReverseSublists() {
219         mListGridLayout.setExpectedCount(9);
220 
221         // below valid range
222         assertEquals(null,
223                 mListGridLayout.getParentView(-1, true, true));
224 
225         assertEquals(mListGridLayout.getSublist(2),
226                 mListGridLayout.getParentView(0, true, true));
227         assertEquals(mListGridLayout.getSublist(2),
228                 mListGridLayout.getParentView(1, true, true));
229         assertEquals(mListGridLayout.getSublist(2),
230                 mListGridLayout.getParentView(2, true, true));
231         assertEquals(mListGridLayout.getSublist(1),
232                 mListGridLayout.getParentView(3, true, true));
233         assertEquals(mListGridLayout.getSublist(1),
234                 mListGridLayout.getParentView(4, true, true));
235         assertEquals(mListGridLayout.getSublist(1),
236                 mListGridLayout.getParentView(5, true, true));
237         assertEquals(mListGridLayout.getSublist(0),
238                 mListGridLayout.getParentView(6, true, true));
239         assertEquals(mListGridLayout.getSublist(0),
240                 mListGridLayout.getParentView(7, true, true));
241         assertEquals(mListGridLayout.getSublist(0),
242                 mListGridLayout.getParentView(8, true, true));
243 
244         // above valid range
245         assertEquals(mListGridLayout.getSublist(0),
246                 mListGridLayout.getParentView(9, true, true));
247     }
248 
249     @Test
testRemoveAllItems()250     public void testRemoveAllItems() {
251         ViewGroup row1 = mListGridLayout.getSublist(0);
252         row1.setVisibility(View.VISIBLE);
253         ViewGroup row2 = mListGridLayout.getSublist(1);
254         row2.setVisibility(View.VISIBLE);
255         ViewGroup row3 = mListGridLayout.getSublist(2);
256         row3.setVisibility(View.VISIBLE);
257         View item1 = new View(mContext, null);
258         View item2 = new View(mContext, null);
259         View item3 = new View(mContext, null);
260 
261         row1.addView(item1);
262         row2.addView(item2);
263         row3.addView(item3);
264 
265         assertEquals(1, row1.getChildCount());
266         assertEquals(1, row2.getChildCount());
267         assertEquals(1, row3.getChildCount());
268 
269         mListGridLayout.removeAllItems();
270 
271         assertEquals(0, row1.getChildCount());
272         assertEquals(View.GONE, row1.getVisibility());
273         assertEquals(0, row2.getChildCount());
274         assertEquals(View.GONE, row2.getVisibility());
275         assertEquals(0, row3.getChildCount());
276         assertEquals(View.GONE, row3.getVisibility());
277     }
278 
279     @Test
testAddItem()280     public void testAddItem() {
281         mListGridLayout.setExpectedCount(4);
282 
283         View item1 = new View(mContext, null);
284         View item2 = new View(mContext, null);
285         View item3 = new View(mContext, null);
286         View item4 = new View(mContext, null);
287 
288         mListGridLayout.addItem(item1);
289         mListGridLayout.addItem(item2);
290         mListGridLayout.addItem(item3);
291         mListGridLayout.addItem(item4);
292         assertEquals(2, mListGridLayout.getSublist(0).getChildCount());
293         assertEquals(2, mListGridLayout.getSublist(1).getChildCount());
294         assertEquals(0, mListGridLayout.getSublist(2).getChildCount());
295 
296         mListGridLayout.removeAllItems();
297         mListGridLayout.addItem(item1);
298 
299         assertEquals(1, mListGridLayout.getSublist(0).getChildCount());
300         assertEquals(0, mListGridLayout.getSublist(1).getChildCount());
301         assertEquals(0, mListGridLayout.getSublist(2).getChildCount());
302     }
303 
304     @Test
testAddItem_reverseItems()305     public void testAddItem_reverseItems() {
306         mListGridLayout.setExpectedCount(3);
307 
308         View item1 = new View(mContext, null);
309         View item2 = new View(mContext, null);
310         View item3 = new View(mContext, null);
311 
312         mListGridLayout.addItem(item1);
313         mListGridLayout.addItem(item2);
314         mListGridLayout.addItem(item3);
315 
316         ViewGroup sublist = mListGridLayout.getSublist(0);
317 
318         assertEquals(item1, sublist.getChildAt(0));
319         assertEquals(item2, sublist.getChildAt(1));
320         assertEquals(item3, sublist.getChildAt(2));
321 
322 
323         mListGridLayout.removeAllItems();
324         mListGridLayout.setReverseItems(true);
325 
326         mListGridLayout.addItem(item1);
327         mListGridLayout.addItem(item2);
328         mListGridLayout.addItem(item3);
329 
330         assertEquals(item3, sublist.getChildAt(0));
331         assertEquals(item2, sublist.getChildAt(1));
332         assertEquals(item1, sublist.getChildAt(2));
333     }
334 }
335