Fix issue where All Apps tab bar was too small

Change-Id: I702ca5ce32a6346f09c61765aa63625d3d50cc92
diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java
index 28f44e4..fd5979f 100644
--- a/src/com/android/launcher2/AllAppsPagedView.java
+++ b/src/com/android/launcher2/AllAppsPagedView.java
@@ -122,8 +122,7 @@
             mCellCountY = determineCellCountY(height, layout);
             mLastMeasureWidth = width;
             mLastMeasureHeight = height;
-            removeAllViews();
-            invalidatePageData();
+            postInvalidatePageData(true);
         }
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     }
@@ -132,12 +131,7 @@
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         if (mWaitingToInitPages) {
             mWaitingToInitPages = false;
-            invalidatePageData();
-
-            // invalidatePageData() is what causes the child pages to be created. We need the
-            // children to be measured before layout, so force a new measure here.
-            measure(MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY));
+            postInvalidatePageData(false);
         }
         super.onLayout(changed, left, top, right, bottom);
     }
diff --git a/src/com/android/launcher2/AllAppsTabbed.java b/src/com/android/launcher2/AllAppsTabbed.java
index e11113f..27e78d8 100644
--- a/src/com/android/launcher2/AllAppsTabbed.java
+++ b/src/com/android/launcher2/AllAppsTabbed.java
@@ -163,18 +163,28 @@
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         if (mFirstLayout) {
             mFirstLayout = false;
-            // Set the width of the tab bar properly
-            int pageWidth = mAllApps.getPageContentWidth();
-            TabWidget tabWidget = (TabWidget) findViewById(com.android.internal.R.id.tabs);
-            View allAppsTabBar = (View) findViewById(R.id.all_apps_tab_bar);
-            if (allAppsTabBar == null) throw new Resources.NotFoundException();
-            int tabWidgetPadding = 0;
-            final int childCount = tabWidget.getChildCount();
-            if (childCount > 0) {
-                tabWidgetPadding += tabWidget.getChildAt(0).getPaddingLeft() * 2;
-            }
-            allAppsTabBar.getLayoutParams().width = pageWidth + tabWidgetPadding;
         }
+        // Set the width of the tab bar properly
+        int pageWidth = mAllApps.getPageContentWidth();
+        TabWidget tabWidget = (TabWidget) findViewById(com.android.internal.R.id.tabs);
+        View allAppsTabBar = (View) findViewById(R.id.all_apps_tab_bar);
+        if (allAppsTabBar == null) throw new Resources.NotFoundException();
+        int tabWidgetPadding = 0;
+        final int childCount = tabWidget.getChildCount();
+        if (childCount > 0) {
+            tabWidgetPadding += tabWidget.getChildAt(0).getPaddingLeft() * 2;
+        }
+
+        int newWidth = Math.min(getMeasuredWidth(), pageWidth + tabWidgetPadding);
+        if (newWidth != allAppsTabBar.getLayoutParams().width) {
+            allAppsTabBar.getLayoutParams().width = newWidth;
+            post(new Runnable() {
+                    public void run() {
+                        requestLayout();
+                    }
+                });
+        }
+
         super.onLayout(changed, l, t, r, b);
     }
 
diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java
index f803856..d3779c4 100644
--- a/src/com/android/launcher2/CustomizePagedView.java
+++ b/src/com/android/launcher2/CustomizePagedView.java
@@ -210,8 +210,7 @@
             mPageContentWidth = layout.getContentWidth();
             mPageContentHeight = layout.getContentHeight();
             mMinPageWidth = layout.getWidthBeforeFirstLayout();
-            removeAllViews();
-            invalidatePageData();
+            postInvalidatePageData(true);
         }
         if (mPageContentHeight > 0) {
             // Lock our height to the size of the page content
@@ -226,12 +225,7 @@
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         if (mWaitingToInitPages) {
             mWaitingToInitPages = false;
-            invalidatePageData();
-
-            // invalidatePageData() is what causes the child pages to be created. We need the
-            // children to be measured before layout, so force a new measure here.
-            measure(MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY));
+            postInvalidatePageData(false);
         }
         super.onLayout(changed, left, top, right, bottom);
         mFirstLayout = false;
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index aa6bef4..01b3d8e 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -1514,6 +1514,18 @@
      */
     public abstract void syncPageItems(int page);
 
+    protected void postInvalidatePageData(final boolean clearViews) {
+        post(new Runnable() {
+                // post the call to avoid a call to requestLayout from a layout pass
+                public void run() {
+                    if (clearViews) {
+                        removeAllViews();
+                    }
+                    invalidatePageData();
+                }
+            });
+    }
+
     protected void invalidatePageData() {
         if (mContentIsRefreshable) {
             // Update all the pages