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

Commit fc6837bb authored by Alina Zaidi's avatar Alina Zaidi
Browse files

Do not reorder recommended widgets in widget picker.

This is to show them in ranking order sent by aiai.

Bug: b/201079509
Test: Added unit test in WidgetsTableUtilTest

Change-Id: I366ecaee8bc157aca185f633462d95fbd1dd180b
parent 494bd4e8
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -183,7 +183,8 @@ public class WidgetsBottomSheet extends BaseWidgetSheet {
        TableLayout widgetsTable = findViewById(R.id.widgets_table);
        widgetsTable.removeAllViews();

        WidgetsTableUtils.groupWidgetItemsIntoTable(widgets, mMaxHorizontalSpan).forEach(row -> {
        WidgetsTableUtils.groupWidgetItemsIntoTableWithReordering(widgets, mMaxHorizontalSpan)
                .forEach(row -> {
                    TableRow tableRow = new TableRow(getContext());
                    tableRow.setGravity(Gravity.TOP);
                    row.forEach(widgetItem -> {
+2 −2
Original line number Diff line number Diff line
@@ -535,8 +535,8 @@ public class WidgetsFullSheet extends BaseWidgetSheet
                    - noWidgetsViewHeight) * RECOMMENDATION_TABLE_HEIGHT_RATIO;

            List<ArrayList<WidgetItem>> recommendedWidgetsInTable =
                    WidgetsTableUtils.groupWidgetItemsIntoTable(recommendedWidgets,
                            mMaxSpansPerRow);
                    WidgetsTableUtils.groupWidgetItemsIntoTableWithoutReordering(
                            recommendedWidgets, mMaxSpansPerRow);
            table.setRecommendedWidgets(recommendedWidgetsInTable, maxTableHeight);
        } else {
            table.setVisibility(GONE);
+1 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ public final class WidgetsListTableViewHolderBinder
        }
        table.setListDrawableState(((position & POSITION_LAST) != 0) ? LAST : MIDDLE);
        List<ArrayList<WidgetItem>> widgetItemsTable =
                WidgetsTableUtils.groupWidgetItemsIntoTable(
                WidgetsTableUtils.groupWidgetItemsIntoTableWithReordering(
                        entry.mWidgets, entry.getMaxSpanSizeInCells());
        recycleTableBeforeBinding(table, widgetItemsTable);

+15 −5
Original line number Diff line number Diff line
@@ -45,9 +45,20 @@ public final class WidgetsTableUtils {
        return item.spanX > otherItem.spanX ? 1 : -1;
    };

    /**
     * Groups {@code widgetItems} items into a 2D array which matches their appearance in a UI
     * table. This takes liberty to rearrange widgets to make the table visually appealing.
     */
    public static List<ArrayList<WidgetItem>> groupWidgetItemsIntoTableWithReordering(
            List<WidgetItem> widgetItems, final int maxSpansPerRow) {
        List<WidgetItem> sortedWidgetItems = widgetItems.stream().sorted(WIDGET_SHORTCUT_COMPARATOR)
                .collect(Collectors.toList());
        return groupWidgetItemsIntoTableWithoutReordering(sortedWidgetItems, maxSpansPerRow);
    }

    /**
     * Groups widgets items into a 2D array which matches their appearance in a UI table.
     * Groups {@code widgetItems} into a 2D array which matches their appearance in a UI table while
     * maintaining their order.
     *
     * <p>Grouping:
     * 1. Widgets and shortcuts never group together in the same row.
@@ -64,13 +75,12 @@ public final class WidgetsTableUtils {
     * should be moved to a new row.
     * Example 3: Row 1: 6x4. This is okay because this is the only item in the row.
     */
    public static List<ArrayList<WidgetItem>> groupWidgetItemsIntoTable(
    public static List<ArrayList<WidgetItem>> groupWidgetItemsIntoTableWithoutReordering(
            List<WidgetItem> widgetItems, final int maxSpansPerRow) {
        List<WidgetItem> sortedWidgetItems = widgetItems.stream().sorted(WIDGET_SHORTCUT_COMPARATOR)
                .collect(Collectors.toList());

        List<ArrayList<WidgetItem>> widgetItemsTable = new ArrayList<>();
        ArrayList<WidgetItem> widgetItemsAtRow = null;
        for (WidgetItem widgetItem : sortedWidgetItems) {
        for (WidgetItem widgetItem : widgetItems) {
            if (widgetItemsAtRow == null) {
                widgetItemsAtRow = new ArrayList<>();
                widgetItemsTable.add(widgetItemsAtRow);
+30 −9
Original line number Diff line number Diff line
@@ -92,11 +92,12 @@ public final class WidgetsTableUtilsTest {


    @Test
    public void groupWidgetItemsIntoTable_widgetsOnly_maxSpansPerRow5_shouldGroupWidgetsInTable() {
    public void groupWidgetItemsIntoTableWithReordering_widgetsOnly_maxSpansPerRow5_shouldGroupWidgetsInTable() {
        List<WidgetItem> widgetItems = List.of(mWidget4x4, mWidget2x3, mWidget1x1, mWidget2x4,
                mWidget2x2);

        List<ArrayList<WidgetItem>> widgetItemInTable = WidgetsTableUtils.groupWidgetItemsIntoTable(
        List<ArrayList<WidgetItem>> widgetItemInTable =
                WidgetsTableUtils.groupWidgetItemsIntoTableWithReordering(
                        widgetItems, /* maxSpansPerRow= */ 5);

        // Row 0: 1x1, 2x2
@@ -109,11 +110,12 @@ public final class WidgetsTableUtilsTest {
    }

    @Test
    public void groupWidgetItemsIntoTable_widgetsOnly_maxSpansPerRow4_shouldGroupWidgetsInTable() {
    public void groupWidgetItemsIntoTableWithReordering_widgetsOnly_maxSpansPerRow4_shouldGroupWidgetsInTable() {
        List<WidgetItem> widgetItems = List.of(mWidget4x4, mWidget2x3, mWidget1x1, mWidget2x4,
                mWidget2x2);

        List<ArrayList<WidgetItem>> widgetItemInTable = WidgetsTableUtils.groupWidgetItemsIntoTable(
        List<ArrayList<WidgetItem>> widgetItemInTable =
                WidgetsTableUtils.groupWidgetItemsIntoTableWithReordering(
                        widgetItems, /* maxSpansPerRow= */ 4);

        // Row 0: 1x1, 2x2
@@ -128,11 +130,12 @@ public final class WidgetsTableUtilsTest {
    }

    @Test
    public void groupWidgetItemsIntoTable_mixItems_maxSpansPerRow4_shouldGroupWidgetsInTable() {
    public void groupWidgetItemsIntoTableWithReordering_mixItems_maxSpansPerRow4_shouldGroupWidgetsInTable() {
        List<WidgetItem> widgetItems = List.of(mWidget4x4, mShortcut3, mWidget2x3, mShortcut1,
                mWidget1x1, mShortcut2, mWidget2x4, mWidget2x2);

        List<ArrayList<WidgetItem>> widgetItemInTable = WidgetsTableUtils.groupWidgetItemsIntoTable(
        List<ArrayList<WidgetItem>> widgetItemInTable =
                WidgetsTableUtils.groupWidgetItemsIntoTableWithReordering(
                        widgetItems, /* maxSpansPerRow= */ 4);

        // Row 0: 1x1, 2x2
@@ -148,6 +151,24 @@ public final class WidgetsTableUtilsTest {
        assertThat(widgetItemInTable.get(4)).containsExactly(mShortcut3, mShortcut2, mShortcut1);
    }

    @Test
    public void groupWidgetItemsIntoTableWithoutReordering_shouldMaintainTheOrder() {
        List<WidgetItem> widgetItems =
                List.of(mWidget4x4, mWidget2x3, mWidget1x1, mWidget2x4, mWidget2x2);

        List<ArrayList<WidgetItem>> widgetItemInTable =
                WidgetsTableUtils.groupWidgetItemsIntoTableWithoutReordering(
                        widgetItems, /* maxSpansPerRow= */ 5);

        // Row 0: 4x4
        // Row 1: 2x3, 1x1
        // Row 2: 2x4, 2x2
        assertThat(widgetItemInTable).hasSize(3);
        assertThat(widgetItemInTable.get(0)).containsExactly(mWidget4x4);
        assertThat(widgetItemInTable.get(1)).containsExactly(mWidget2x3, mWidget1x1);
        assertThat(widgetItemInTable.get(2)).containsExactly(mWidget2x4, mWidget2x2);
    }

    private void initTestWidgets() {
        List<Point> widgetSizes = List.of(new Point(1, 1), new Point(2, 2), new Point(2, 3),
                new Point(2, 4), new Point(4, 4));