Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 862db88c authored by Aaron Heuckroth's avatar Aaron Heuckroth Committed by Android (Google) Code Review
Browse files

Merge "Add unit tests to ListGridLayout." into qt-dev

parents aac2e8c6 fcb633f9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -117,6 +117,7 @@ public class GlobalActionsGridLayout extends MultiListLayout {
            } else {
                parent.addView(v);
            }
            parent.setVisibility(View.VISIBLE);
        }
        updateSnapPosition();
        updateSeparatedButtonSize();
+37 −25
Original line number Diff line number Diff line
@@ -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 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];
    }
}
+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());
    }
}