Loading packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java +1 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,7 @@ public class GlobalActionsGridLayout extends MultiListLayout { } else { parent.addView(v); } parent.setVisibility(View.VISIBLE); } updateSnapPosition(); updateSeparatedButtonSize(); Loading packages/SystemUI/src/com/android/systemui/globalactions/ListGridLayout.java +37 −25 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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) { Loading @@ -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); Loading @@ -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 int getMaxElementCount() { return mConfigs.length - 1; } private void setSublistVisibility(int index, boolean visible) { View subList = getChildAt(index); 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. */ 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]; } } packages/SystemUI/tests/src/com/android/systemui/globalactions/ListGridLayoutTest.java 0 → 100644 +271 −0 Original line number Diff line number Diff line /* * 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()); } } Loading
packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java +1 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,7 @@ public class GlobalActionsGridLayout extends MultiListLayout { } else { parent.addView(v); } parent.setVisibility(View.VISIBLE); } updateSnapPosition(); updateSeparatedButtonSize(); Loading
packages/SystemUI/src/com/android/systemui/globalactions/ListGridLayout.java +37 −25 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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) { Loading @@ -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); Loading @@ -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 int getMaxElementCount() { return mConfigs.length - 1; } private void setSublistVisibility(int index, boolean visible) { View subList = getChildAt(index); 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. */ 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]; } }
packages/SystemUI/tests/src/com/android/systemui/globalactions/ListGridLayoutTest.java 0 → 100644 +271 −0 Original line number Diff line number Diff line /* * 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()); } }