Merge "Add unit tests to ListGridLayout." into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
862db88cb2
@@ -117,6 +117,7 @@ public class GlobalActionsGridLayout extends MultiListLayout {
|
||||
} else {
|
||||
parent.addView(v);
|
||||
}
|
||||
parent.setVisibility(View.VISIBLE);
|
||||
}
|
||||
updateSnapPosition();
|
||||
updateSeparatedButtonSize();
|
||||
|
||||
@@ -41,6 +41,21 @@ public class ListGridLayout extends LinearLayout {
|
||||
private static final String TAG = "ListGridLayout";
|
||||
private int mExpectedCount;
|
||||
|
||||
// number of rows and columns to use for different numbers of items
|
||||
private final int[][] mConfigs = {
|
||||
// {rows, columns}
|
||||
{0, 0}, // 0 items
|
||||
{1, 1}, // 1 item
|
||||
{1, 2}, // 2 items
|
||||
{1, 3}, // 3 items
|
||||
{2, 2}, // 4 items
|
||||
{2, 3}, // 5 items
|
||||
{2, 3}, // 6 items
|
||||
{3, 3}, // 7 items
|
||||
{3, 3}, // 8 items
|
||||
{3, 3} // 9 items
|
||||
};
|
||||
|
||||
public ListGridLayout(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
@@ -53,19 +68,28 @@ public class ListGridLayout extends LinearLayout {
|
||||
ViewGroup subList = (ViewGroup) getChildAt(i);
|
||||
if (subList != null) {
|
||||
subList.removeAllViews();
|
||||
subList.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the parent view associated with the item which should be placed at the given position.
|
||||
* @param index The index of the item.
|
||||
* @param reverseSublists Reverse the order of sublists. Ordinarily, sublists fill from first to
|
||||
* last, whereas setting this to true will fill them last to first.
|
||||
* @param swapRowsAndColumns Swap the order in which rows and columns are filled. By default,
|
||||
* columns fill first, adding one item to each row. Setting this to
|
||||
* true will cause rows to fill first, adding one item to each column.
|
||||
* @return
|
||||
*/
|
||||
public ViewGroup getParentView(int index, boolean reverseSublists, boolean swapRowsAndColumns) {
|
||||
if (getRowCount() == 0) {
|
||||
if (getRowCount() == 0 || index < 0) {
|
||||
return null;
|
||||
}
|
||||
int column = getParentViewIndex(index, reverseSublists, swapRowsAndColumns);
|
||||
return (ViewGroup) getChildAt(column);
|
||||
int targetIndex = Math.min(index, getMaxElementCount() - 1);
|
||||
int row = getParentViewIndex(targetIndex, reverseSublists, swapRowsAndColumns);
|
||||
return (ViewGroup) getChildAt(row);
|
||||
}
|
||||
|
||||
private int reverseSublistIndex(int index) {
|
||||
@@ -74,7 +98,6 @@ public class ListGridLayout extends LinearLayout {
|
||||
|
||||
private int getParentViewIndex(int index, boolean reverseSublists, boolean swapRowsAndColumns) {
|
||||
int sublistIndex;
|
||||
ViewGroup row;
|
||||
int rows = getRowCount();
|
||||
if (swapRowsAndColumns) {
|
||||
sublistIndex = (int) Math.floor(index / rows);
|
||||
@@ -92,42 +115,31 @@ public class ListGridLayout extends LinearLayout {
|
||||
*/
|
||||
public void setExpectedCount(int count) {
|
||||
mExpectedCount = count;
|
||||
|
||||
for (int i = 0; i < getChildCount(); i++) {
|
||||
if (i <= getColumnCount()) {
|
||||
setSublistVisibility(i, true);
|
||||
} else {
|
||||
setSublistVisibility(i, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setSublistVisibility(int index, boolean visible) {
|
||||
View subList = getChildAt(index);
|
||||
if (subList != null) {
|
||||
subList.setVisibility(visible ? View.VISIBLE : View.GONE);
|
||||
private int getMaxElementCount() {
|
||||
return mConfigs.length - 1;
|
||||
}
|
||||
|
||||
private int[] getConfig() {
|
||||
if (mExpectedCount < 0) {
|
||||
return mConfigs[0];
|
||||
}
|
||||
int targetElements = Math.min(getMaxElementCount(), mExpectedCount);
|
||||
return mConfigs[targetElements];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of rows which will be used to render children.
|
||||
*/
|
||||
public int getRowCount() {
|
||||
// special case for 3 to use a single row
|
||||
if (mExpectedCount == 3) {
|
||||
return 1;
|
||||
}
|
||||
return (int) Math.round(Math.sqrt(mExpectedCount));
|
||||
return getConfig()[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of columns which will be used to render children.
|
||||
*/
|
||||
public int getColumnCount() {
|
||||
// special case for 3 to use a single row
|
||||
if (mExpectedCount == 3) {
|
||||
return 3;
|
||||
}
|
||||
return (int) Math.ceil(Math.sqrt(mExpectedCount));
|
||||
return getConfig()[1];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,271 @@
|
||||
/*
|
||||
* Copyright (C) 2019 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.globalactions;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
/**
|
||||
* Tests for {@link ListGridLayout}.
|
||||
*/
|
||||
@SmallTest
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
public class ListGridLayoutTest extends SysuiTestCase {
|
||||
|
||||
private ListGridLayout mListGridLayout;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
GlobalActionsGridLayout globalActions = (GlobalActionsGridLayout)
|
||||
LayoutInflater.from(mContext).inflate(R.layout.global_actions_grid, null);
|
||||
mListGridLayout = globalActions.getListView();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInflation() {
|
||||
assertEquals(3, mListGridLayout.getChildCount());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRowCount() {
|
||||
// above expected range
|
||||
mListGridLayout.setExpectedCount(99);
|
||||
assertEquals(3, mListGridLayout.getRowCount());
|
||||
|
||||
mListGridLayout.setExpectedCount(9);
|
||||
assertEquals(3, mListGridLayout.getRowCount());
|
||||
mListGridLayout.setExpectedCount(8);
|
||||
assertEquals(3, mListGridLayout.getRowCount());
|
||||
mListGridLayout.setExpectedCount(7);
|
||||
assertEquals(3, mListGridLayout.getRowCount());
|
||||
mListGridLayout.setExpectedCount(6);
|
||||
assertEquals(2, mListGridLayout.getRowCount());
|
||||
mListGridLayout.setExpectedCount(5);
|
||||
assertEquals(2, mListGridLayout.getRowCount());
|
||||
mListGridLayout.setExpectedCount(4);
|
||||
assertEquals(2, mListGridLayout.getRowCount());
|
||||
mListGridLayout.setExpectedCount(3);
|
||||
assertEquals(1, mListGridLayout.getRowCount());
|
||||
mListGridLayout.setExpectedCount(2);
|
||||
assertEquals(1, mListGridLayout.getRowCount());
|
||||
mListGridLayout.setExpectedCount(1);
|
||||
assertEquals(1, mListGridLayout.getRowCount());
|
||||
mListGridLayout.setExpectedCount(0);
|
||||
assertEquals(0, mListGridLayout.getRowCount());
|
||||
|
||||
// below expected range
|
||||
mListGridLayout.setExpectedCount(-1);
|
||||
assertEquals(0, mListGridLayout.getRowCount());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetColumnCount() {
|
||||
// above expected range
|
||||
mListGridLayout.setExpectedCount(99);
|
||||
|
||||
assertEquals(3, mListGridLayout.getColumnCount());
|
||||
mListGridLayout.setExpectedCount(9);
|
||||
assertEquals(3, mListGridLayout.getColumnCount());
|
||||
mListGridLayout.setExpectedCount(8);
|
||||
assertEquals(3, mListGridLayout.getColumnCount());
|
||||
mListGridLayout.setExpectedCount(7);
|
||||
assertEquals(3, mListGridLayout.getColumnCount());
|
||||
mListGridLayout.setExpectedCount(6);
|
||||
assertEquals(3, mListGridLayout.getColumnCount());
|
||||
mListGridLayout.setExpectedCount(5);
|
||||
assertEquals(3, mListGridLayout.getColumnCount());
|
||||
mListGridLayout.setExpectedCount(4);
|
||||
assertEquals(2, mListGridLayout.getColumnCount());
|
||||
mListGridLayout.setExpectedCount(3);
|
||||
assertEquals(3, mListGridLayout.getColumnCount());
|
||||
mListGridLayout.setExpectedCount(2);
|
||||
assertEquals(2, mListGridLayout.getColumnCount());
|
||||
mListGridLayout.setExpectedCount(1);
|
||||
assertEquals(1, mListGridLayout.getColumnCount());
|
||||
mListGridLayout.setExpectedCount(0);
|
||||
assertEquals(0, mListGridLayout.getColumnCount());
|
||||
|
||||
// below expected range
|
||||
mListGridLayout.setExpectedCount(-1);
|
||||
assertEquals(0, mListGridLayout.getColumnCount());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetParentView_default() {
|
||||
mListGridLayout.setExpectedCount(9);
|
||||
|
||||
// below valid range
|
||||
assertEquals(null,
|
||||
mListGridLayout.getParentView(-1, false, false));
|
||||
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(0, false, false));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(1, false, false));
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(2, false, false));
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(3, false, false));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(4, false, false));
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(5, false, false));
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(6, false, false));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(7, false, false));
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(8, false, false));
|
||||
|
||||
// above valid range
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(9, false, false));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetParentView_reverseSublists() {
|
||||
mListGridLayout.setExpectedCount(9);
|
||||
|
||||
// below valid range
|
||||
assertEquals(null,
|
||||
mListGridLayout.getParentView(-1, true, false));
|
||||
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(0, true, false));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(1, true, false));
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(2, true, false));
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(3, true, false));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(4, true, false));
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(5, true, false));
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(6, true, false));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(7, true, false));
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(8, true, false));
|
||||
|
||||
// above valid range
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(9, true, false));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetParentView_swapRowsAndColumns() {
|
||||
mListGridLayout.setExpectedCount(9);
|
||||
|
||||
// below valid range
|
||||
assertEquals(null,
|
||||
mListGridLayout.getParentView(-1, false, true));
|
||||
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(0, false, true));
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(1, false, true));
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(2, false, true));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(3, false, true));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(4, false, true));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(5, false, true));
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(6, false, true));
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(7, false, true));
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(8, false, true));
|
||||
|
||||
// above valid range
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(9, false, true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetParentView_swapRowsAndColumnsAndReverseSublists() {
|
||||
mListGridLayout.setExpectedCount(9);
|
||||
|
||||
// below valid range
|
||||
assertEquals(null,
|
||||
mListGridLayout.getParentView(-1, true, true));
|
||||
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(0, true, true));
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(1, true, true));
|
||||
assertEquals(mListGridLayout.getChildAt(2),
|
||||
mListGridLayout.getParentView(2, true, true));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(3, true, true));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(4, true, true));
|
||||
assertEquals(mListGridLayout.getChildAt(1),
|
||||
mListGridLayout.getParentView(5, true, true));
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(6, true, true));
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(7, true, true));
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(8, true, true));
|
||||
|
||||
// above valid range
|
||||
assertEquals(mListGridLayout.getChildAt(0),
|
||||
mListGridLayout.getParentView(9, true, true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoveAllItems() {
|
||||
ViewGroup row1 = (ViewGroup) mListGridLayout.getChildAt(0);
|
||||
ViewGroup row2 = (ViewGroup) mListGridLayout.getChildAt(1);
|
||||
ViewGroup row3 = (ViewGroup) mListGridLayout.getChildAt(2);
|
||||
View item1 = new View(mContext, null);
|
||||
View item2 = new View(mContext, null);
|
||||
View item3 = new View(mContext, null);
|
||||
|
||||
row1.addView(item1);
|
||||
row2.addView(item2);
|
||||
row3.addView(item3);
|
||||
|
||||
assertEquals(1, row1.getChildCount());
|
||||
assertEquals(1, row2.getChildCount());
|
||||
assertEquals(1, row3.getChildCount());
|
||||
|
||||
mListGridLayout.removeAllItems();
|
||||
|
||||
assertEquals(0, row1.getChildCount());
|
||||
assertEquals(0, row2.getChildCount());
|
||||
assertEquals(0, row2.getChildCount());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user