Storing the widget item views in Widget holder, to avoid looks on every bind/recycle

Change-Id: Ifad34f419b1b4f2bf97cc4ff533277867598a719
diff --git a/src/com/android/launcher3/widget/WidgetsListAdapter.java b/src/com/android/launcher3/widget/WidgetsListAdapter.java
index de966f9..e68450d 100644
--- a/src/com/android/launcher3/widget/WidgetsListAdapter.java
+++ b/src/com/android/launcher3/widget/WidgetsListAdapter.java
@@ -51,14 +51,13 @@
     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 @@
             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 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 @@
         }
 
         // 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 @@
 
     @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 long getItemId(int pos) {
         return pos;
     }
-
-    private WidgetPreviewLoader getWidgetPreviewLoader() {
-        if (mWidgetPreviewLoader == null) {
-            mWidgetPreviewLoader = LauncherAppState.getInstance().getWidgetCache();
-        }
-        return mWidgetPreviewLoader;
-    }
 }
diff --git a/src/com/android/launcher3/widget/WidgetsRecyclerView.java b/src/com/android/launcher3/widget/WidgetsRecyclerView.java
index 9c13b44..2e3cc1a 100644
--- a/src/com/android/launcher3/widget/WidgetsRecyclerView.java
+++ b/src/com/android/launcher3/widget/WidgetsRecyclerView.java
@@ -91,19 +91,14 @@
     @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 @@
     @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 @@
             return;
         }
 
-        synchronizeScrollBarThumbOffsetToViewScroll(mScrollPosState, rowCount);
+        synchronizeScrollBarThumbOffsetToViewScroll(mScrollPosState, mWidgets.getPackageSize());
     }
 
     /**
@@ -151,15 +139,10 @@
         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 @@
         View child = getChildAt(0);
         return child.getMeasuredHeight() * rowIndex;
     }
+
+    private boolean isModelNotReady() {
+        return mWidgets == null || mWidgets.getPackageSize() == 0;
+    }
 }
\ No newline at end of file
diff --git a/src/com/android/launcher3/widget/WidgetsRowViewHolder.java b/src/com/android/launcher3/widget/WidgetsRowViewHolder.java
index 19bc868..bc85db6 100644
--- a/src/com/android/launcher3/widget/WidgetsRowViewHolder.java
+++ b/src/com/android/launcher3/widget/WidgetsRowViewHolder.java
@@ -18,16 +18,18 @@
 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);
     }
 }