Merge "Account for header margin depending on which header is selected" into sc-dev

This commit is contained in:
Stevie Kideckel
2021-06-12 21:47:01 +00:00
committed by Android (Google) Code Review
2 changed files with 17 additions and 4 deletions

View File

@@ -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.

View File

@@ -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 {