mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 11:18:21 +00:00
Storing the widget item views in Widget holder, to avoid looks on every bind/recycle
Change-Id: Ifad34f419b1b4f2bf97cc4ff533277867598a719
This commit is contained in:
@@ -51,14 +51,13 @@ public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
|
||||
private static final String TAG = "WidgetsListAdapter";
|
||||
private static final boolean DEBUG = false;
|
||||
|
||||
private Launcher mLauncher;
|
||||
private LayoutInflater mLayoutInflater;
|
||||
private final WidgetPreviewLoader mWidgetPreviewLoader;
|
||||
private final LayoutInflater mLayoutInflater;
|
||||
|
||||
private final View.OnClickListener mIconClickListener;
|
||||
private final View.OnLongClickListener mIconLongClickListener;
|
||||
|
||||
private WidgetsModel mWidgetsModel;
|
||||
private WidgetPreviewLoader mWidgetPreviewLoader;
|
||||
|
||||
private View.OnClickListener mIconClickListener;
|
||||
private View.OnLongClickListener mIconLongClickListener;
|
||||
|
||||
private final int mIndent;
|
||||
|
||||
@@ -66,10 +65,10 @@ public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
|
||||
View.OnLongClickListener iconLongClickListener,
|
||||
Launcher launcher) {
|
||||
mLayoutInflater = launcher.getLayoutInflater();
|
||||
mWidgetPreviewLoader = LauncherAppState.getInstance().getWidgetCache();
|
||||
|
||||
mIconClickListener = iconClickListener;
|
||||
mIconLongClickListener = iconLongClickListener;
|
||||
mLauncher = launcher;
|
||||
mIndent = launcher.getResources().getDimensionPixelSize(R.dimen.widget_section_indent);
|
||||
}
|
||||
|
||||
@@ -89,7 +88,7 @@ public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
|
||||
public void onBindViewHolder(WidgetsRowViewHolder holder, int pos) {
|
||||
List<WidgetItem> infoList = mWidgetsModel.getSortedWidgets(pos);
|
||||
|
||||
ViewGroup row = ((ViewGroup) holder.getContent().findViewById(R.id.widgets_cell_list));
|
||||
ViewGroup row = holder.cellContainer;
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, String.format(
|
||||
"onBindViewHolder [pos=%d, widget#=%d, row.getChildCount=%d]",
|
||||
@@ -122,14 +121,9 @@ public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
|
||||
}
|
||||
|
||||
// Bind the views in the application info section.
|
||||
PackageItemInfo infoOut = mWidgetsModel.getPackageItemInfo(pos);
|
||||
BubbleTextView tv = ((BubbleTextView) holder.getContent().findViewById(R.id.section));
|
||||
tv.applyFromPackageItemInfo(infoOut);
|
||||
holder.title.applyFromPackageItemInfo(mWidgetsModel.getPackageItemInfo(pos));
|
||||
|
||||
// Bind the view in the widget horizontal tray region.
|
||||
if (getWidgetPreviewLoader() == null) {
|
||||
return;
|
||||
}
|
||||
for (int i=0; i < infoList.size(); i++) {
|
||||
WidgetCell widget = (WidgetCell) row.getChildAt(i);
|
||||
widget.applyFromCellItem(infoList.get(i), mWidgetPreviewLoader);
|
||||
@@ -162,10 +156,9 @@ public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(WidgetsRowViewHolder holder) {
|
||||
ViewGroup row = ((ViewGroup) holder.getContent().findViewById(R.id.widgets_cell_list));
|
||||
|
||||
for (int i = 0; i < row.getChildCount(); i++) {
|
||||
WidgetCell widget = (WidgetCell) row.getChildAt(i);
|
||||
int total = holder.cellContainer.getChildCount();
|
||||
for (int i = 0; i < total; i++) {
|
||||
WidgetCell widget = (WidgetCell) holder.cellContainer.getChildAt(i);
|
||||
widget.clear();
|
||||
}
|
||||
}
|
||||
@@ -182,11 +175,4 @@ public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
|
||||
public long getItemId(int pos) {
|
||||
return pos;
|
||||
}
|
||||
|
||||
private WidgetPreviewLoader getWidgetPreviewLoader() {
|
||||
if (mWidgetPreviewLoader == null) {
|
||||
mWidgetPreviewLoader = LauncherAppState.getInstance().getWidgetCache();
|
||||
}
|
||||
return mWidgetPreviewLoader;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,19 +91,14 @@ public class WidgetsRecyclerView extends BaseRecyclerView {
|
||||
@Override
|
||||
public String scrollToPositionAtProgress(float touchFraction) {
|
||||
// Skip early if widgets are not bound.
|
||||
if (mWidgets == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// Skip early if there are no widgets.
|
||||
int rowCount = mWidgets.getPackageSize();
|
||||
if (rowCount == 0) {
|
||||
if (isModelNotReady()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// Stop the scroller if it is scrolling
|
||||
stopScroll();
|
||||
|
||||
int rowCount = mWidgets.getPackageSize();
|
||||
getCurScrollState(mScrollPosState, -1);
|
||||
float pos = rowCount * touchFraction;
|
||||
int availableScrollHeight = getAvailableScrollHeight(rowCount);
|
||||
@@ -121,14 +116,7 @@ public class WidgetsRecyclerView extends BaseRecyclerView {
|
||||
@Override
|
||||
public void onUpdateScrollbar(int dy) {
|
||||
// Skip early if widgets are not bound.
|
||||
if (mWidgets == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip early if there are no widgets.
|
||||
int rowCount = mWidgets.getPackageSize();
|
||||
if (rowCount == 0) {
|
||||
mScrollbar.setThumbOffset(-1, -1);
|
||||
if (isModelNotReady()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -139,7 +127,7 @@ public class WidgetsRecyclerView extends BaseRecyclerView {
|
||||
return;
|
||||
}
|
||||
|
||||
synchronizeScrollBarThumbOffsetToViewScroll(mScrollPosState, rowCount);
|
||||
synchronizeScrollBarThumbOffsetToViewScroll(mScrollPosState, mWidgets.getPackageSize());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -151,15 +139,10 @@ public class WidgetsRecyclerView extends BaseRecyclerView {
|
||||
stateOut.itemPos = -1;
|
||||
|
||||
// Skip early if widgets are not bound.
|
||||
if (mWidgets == null) {
|
||||
if (isModelNotReady()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Return early if there are no items
|
||||
int rowCount = mWidgets.getPackageSize();
|
||||
if (rowCount == 0) {
|
||||
return;
|
||||
}
|
||||
View child = getChildAt(0);
|
||||
int position = getChildPosition(child);
|
||||
|
||||
@@ -178,4 +161,8 @@ public class WidgetsRecyclerView extends BaseRecyclerView {
|
||||
View child = getChildAt(0);
|
||||
return child.getMeasuredHeight() * rowIndex;
|
||||
}
|
||||
|
||||
private boolean isModelNotReady() {
|
||||
return mWidgets == null || mWidgets.getPackageSize() == 0;
|
||||
}
|
||||
}
|
||||
@@ -18,16 +18,18 @@ package com.android.launcher3.widget;
|
||||
import android.support.v7.widget.RecyclerView.ViewHolder;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.android.launcher3.BubbleTextView;
|
||||
import com.android.launcher3.R;
|
||||
|
||||
public class WidgetsRowViewHolder extends ViewHolder {
|
||||
|
||||
ViewGroup mContent;
|
||||
public final ViewGroup cellContainer;
|
||||
public final BubbleTextView title;
|
||||
|
||||
public WidgetsRowViewHolder(ViewGroup v) {
|
||||
super(v);
|
||||
mContent = v;
|
||||
}
|
||||
|
||||
ViewGroup getContent() {
|
||||
return mContent;
|
||||
cellContainer = (ViewGroup) v.findViewById(R.id.widgets_cell_list);
|
||||
title = (BubbleTextView) v.findViewById(R.id.section);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user