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

Commit 1059c30f authored by Stevie Kideckel's avatar Stevie Kideckel
Browse files

Account for header margin depending on which header is selected

This removes jitter from incorrectly counting or not the margins for the
headers near the top of the widget picker list.

Bug: 189956230
Test: verified locally
Change-Id: I3eeddbf8a1fb7cca31fe2a12c28b0eb444de631b
parent 8f3d9eba
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -298,6 +298,12 @@ public class WidgetsListAdapter extends Adapter<ViewHolder> implements OnHeaderC
        scrollToPositionAndMaintainOffset(positionForPackageUserKey, topForPackageUserKey);
    }

    /** Returns the position of the currently expanded header, or empty if it's not present. */
    public OptionalInt getSelectedHeaderPosition() {
        if (mWidgetsContentVisiblePackageUserKey == null) return OptionalInt.empty();
        return getPositionForPackageUserKey(mWidgetsContentVisiblePackageUserKey);
    }

    /**
     * Returns the position of {@code key} in {@link #mVisibleEntries}, or  empty if it's not
     * present.
+11 −4
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ public class WidgetsRecyclerView extends BaseRecyclerView implements OnItemTouch
    private HeaderViewDimensionsProvider mHeaderViewDimensionsProvider;
    private int mLastVisibleWidgetContentTableHeight = 0;
    private int mWidgetHeaderHeight = 0;
    private final int mCollapsedHeaderBottomMarginSize;
    @Nullable private OnContentChangeListener mOnContentChangeListener;

    public WidgetsRecyclerView(Context context) {
@@ -71,6 +72,10 @@ public class WidgetsRecyclerView extends BaseRecyclerView implements OnItemTouch

        ActivityContext activity = ActivityContext.lookupContext(getContext());
        DeviceProfile grid = activity.getDeviceProfile();

        // The bottom margin used when the header is not expanded.
        mCollapsedHeaderBottomMarginSize =
                getResources().getDimensionPixelSize(R.dimen.widget_list_entry_bottom_margin);
    }

    @Override
@@ -182,10 +187,7 @@ public class WidgetsRecyclerView extends BaseRecyclerView implements OnItemTouch
                    && mLastVisibleWidgetContentTableHeight == 0
                    && view.getMeasuredHeight() > 0) {
                // This assumes all header views are of the same height.
                RecyclerView.LayoutParams layoutParams =
                        (RecyclerView.LayoutParams) view.getLayoutParams();
                mWidgetHeaderHeight = view.getMeasuredHeight() + layoutParams.topMargin
                    + layoutParams.bottomMargin;
                mWidgetHeaderHeight = view.getMeasuredHeight();
            }
        }

@@ -279,12 +281,17 @@ public class WidgetsRecyclerView extends BaseRecyclerView implements OnItemTouch
        if (untilIndex > mAdapter.getItems().size()) {
            untilIndex = mAdapter.getItems().size();
        }
        int expandedHeaderPosition = mAdapter.getSelectedHeaderPosition().orElse(-1);
        int totalItemsHeight = 0;
        for (int i = 0; i < untilIndex; i++) {
            WidgetsListBaseEntry entry = mAdapter.getItems().get(i);
            if (entry instanceof WidgetsListHeaderEntry
                    || entry instanceof WidgetsListSearchHeaderEntry) {
                totalItemsHeight += mWidgetHeaderHeight;
                if (expandedHeaderPosition != i) {
                    // If the header is collapsed, include the bottom margin it will use.
                    totalItemsHeight += mCollapsedHeaderBottomMarginSize;
                }
            } else if (entry instanceof WidgetsListContentEntry) {
                totalItemsHeight += mLastVisibleWidgetContentTableHeight;
            } else {