diff --git a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java index 150bd9902f..e89aea7507 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java +++ b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java @@ -298,6 +298,12 @@ public class WidgetsListAdapter extends Adapter 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. diff --git a/src/com/android/launcher3/widget/picker/WidgetsRecyclerView.java b/src/com/android/launcher3/widget/picker/WidgetsRecyclerView.java index 090362ba33..4f4f1a3566 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsRecyclerView.java +++ b/src/com/android/launcher3/widget/picker/WidgetsRecyclerView.java @@ -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 {