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 {
|
} else {
|
||||||
parent.addView(v);
|
parent.addView(v);
|
||||||
}
|
}
|
||||||
|
parent.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
updateSnapPosition();
|
updateSnapPosition();
|
||||||
updateSeparatedButtonSize();
|
updateSeparatedButtonSize();
|
||||||
|
|||||||
@@ -41,6 +41,21 @@ public class ListGridLayout extends LinearLayout {
|
|||||||
private static final String TAG = "ListGridLayout";
|
private static final String TAG = "ListGridLayout";
|
||||||
private int mExpectedCount;
|
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) {
|
public ListGridLayout(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
}
|
}
|
||||||
@@ -53,19 +68,28 @@ public class ListGridLayout extends LinearLayout {
|
|||||||
ViewGroup subList = (ViewGroup) getChildAt(i);
|
ViewGroup subList = (ViewGroup) getChildAt(i);
|
||||||
if (subList != null) {
|
if (subList != null) {
|
||||||
subList.removeAllViews();
|
subList.removeAllViews();
|
||||||
|
subList.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the parent view associated with the item which should be placed at the given position.
|
* 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) {
|
public ViewGroup getParentView(int index, boolean reverseSublists, boolean swapRowsAndColumns) {
|
||||||
if (getRowCount() == 0) {
|
if (getRowCount() == 0 || index < 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
int column = getParentViewIndex(index, reverseSublists, swapRowsAndColumns);
|
int targetIndex = Math.min(index, getMaxElementCount() - 1);
|
||||||
return (ViewGroup) getChildAt(column);
|
int row = getParentViewIndex(targetIndex, reverseSublists, swapRowsAndColumns);
|
||||||
|
return (ViewGroup) getChildAt(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int reverseSublistIndex(int index) {
|
private int reverseSublistIndex(int index) {
|
||||||
@@ -74,7 +98,6 @@ public class ListGridLayout extends LinearLayout {
|
|||||||
|
|
||||||
private int getParentViewIndex(int index, boolean reverseSublists, boolean swapRowsAndColumns) {
|
private int getParentViewIndex(int index, boolean reverseSublists, boolean swapRowsAndColumns) {
|
||||||
int sublistIndex;
|
int sublistIndex;
|
||||||
ViewGroup row;
|
|
||||||
int rows = getRowCount();
|
int rows = getRowCount();
|
||||||
if (swapRowsAndColumns) {
|
if (swapRowsAndColumns) {
|
||||||
sublistIndex = (int) Math.floor(index / rows);
|
sublistIndex = (int) Math.floor(index / rows);
|
||||||
@@ -92,42 +115,31 @@ public class ListGridLayout extends LinearLayout {
|
|||||||
*/
|
*/
|
||||||
public void setExpectedCount(int count) {
|
public void setExpectedCount(int count) {
|
||||||
mExpectedCount = 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) {
|
private int getMaxElementCount() {
|
||||||
View subList = getChildAt(index);
|
return mConfigs.length - 1;
|
||||||
if (subList != null) {
|
|
||||||
subList.setVisibility(visible ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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.
|
* Get the number of rows which will be used to render children.
|
||||||
*/
|
*/
|
||||||
public int getRowCount() {
|
public int getRowCount() {
|
||||||
// special case for 3 to use a single row
|
return getConfig()[0];
|
||||||
if (mExpectedCount == 3) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return (int) Math.round(Math.sqrt(mExpectedCount));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the number of columns which will be used to render children.
|
* Get the number of columns which will be used to render children.
|
||||||
*/
|
*/
|
||||||
public int getColumnCount() {
|
public int getColumnCount() {
|
||||||
// special case for 3 to use a single row
|
return getConfig()[1];
|
||||||
if (mExpectedCount == 3) {
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
return (int) Math.ceil(Math.sqrt(mExpectedCount));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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