OSDN Git Service

Don't measure GONE views.
authorVladimir Marko <vmarko@google.com>
Fri, 4 Oct 2013 15:42:17 +0000 (16:42 +0100)
committerVladimir Marko <vmarko@google.com>
Mon, 7 Oct 2013 14:06:20 +0000 (15:06 +0100)
Don't measure GONE views in ShortcutAndWidgetContainer and
PagedView. They will not be processed in onLayout anyway.
This is pre-requisite for avoiding costly onMeasure in GEL.

Bug: 10734110
Change-Id: I4c1bef41d9185af5eda42b43371546c60f341f87

src/com/android/launcher3/PagedView.java
src/com/android/launcher3/ShortcutAndWidgetContainer.java

index 96d8c19..003b2db 100644 (file)
@@ -827,48 +827,50 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
         for (int i = 0; i < childCount; i++) {
             // disallowing padding in paged view (just pass 0)
             final View child = getPageAt(i);
-            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+            if (child.getVisibility() != GONE) {
+                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
 
-            int childWidthMode;
-            int childHeightMode;
-            int childWidth;
-            int childHeight;
+                int childWidthMode;
+                int childHeightMode;
+                int childWidth;
+                int childHeight;
 
-            if (!lp.isFullScreenPage) {
-                if (lp.width == LayoutParams.WRAP_CONTENT) {
-                    childWidthMode = MeasureSpec.AT_MOST;
-                } else {
-                    childWidthMode = MeasureSpec.EXACTLY;
-                }
-
-                if (lp.height == LayoutParams.WRAP_CONTENT) {
-                    childHeightMode = MeasureSpec.AT_MOST;
-                } else {
-                    childHeightMode = MeasureSpec.EXACTLY;
-                }
+                if (!lp.isFullScreenPage) {
+                    if (lp.width == LayoutParams.WRAP_CONTENT) {
+                        childWidthMode = MeasureSpec.AT_MOST;
+                    } else {
+                        childWidthMode = MeasureSpec.EXACTLY;
+                    }
 
-                childWidth = widthSize - horizontalPadding;
-                childHeight = heightSize - verticalPadding - mInsets.top - mInsets.bottom;
-                mNormalChildHeight = childHeight;
+                    if (lp.height == LayoutParams.WRAP_CONTENT) {
+                        childHeightMode = MeasureSpec.AT_MOST;
+                    } else {
+                        childHeightMode = MeasureSpec.EXACTLY;
+                    }
 
-            } else {
-                childWidthMode = MeasureSpec.EXACTLY;
-                childHeightMode = MeasureSpec.EXACTLY;
+                    childWidth = widthSize - horizontalPadding;
+                    childHeight = heightSize - verticalPadding - mInsets.top - mInsets.bottom;
+                    mNormalChildHeight = childHeight;
 
-                if (mUseMinScale) {
-                    childWidth = getViewportWidth();
-                    childHeight = getViewportHeight();
                 } else {
-                    childWidth = widthSize - getPaddingLeft() - getPaddingRight();
-                    childHeight = heightSize - getPaddingTop() - getPaddingBottom();
+                    childWidthMode = MeasureSpec.EXACTLY;
+                    childHeightMode = MeasureSpec.EXACTLY;
+
+                    if (mUseMinScale) {
+                        childWidth = getViewportWidth();
+                        childHeight = getViewportHeight();
+                    } else {
+                        childWidth = widthSize - getPaddingLeft() - getPaddingRight();
+                        childHeight = heightSize - getPaddingTop() - getPaddingBottom();
+                    }
                 }
-            }
 
-            final int childWidthMeasureSpec =
-                    MeasureSpec.makeMeasureSpec(childWidth, childWidthMode);
-                final int childHeightMeasureSpec =
-                    MeasureSpec.makeMeasureSpec(childHeight, childHeightMode);
-            child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
+                final int childWidthMeasureSpec =
+                        MeasureSpec.makeMeasureSpec(childWidth, childWidthMode);
+                    final int childHeightMeasureSpec =
+                        MeasureSpec.makeMeasureSpec(childHeight, childHeightMode);
+                child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
+            }
         }
         setMeasuredDimension(scaledWidthSize, scaledHeightSize);
 
@@ -929,18 +931,18 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
 
         for (int i = startIndex; i != endIndex; i += delta) {
             final View child = getPageAt(i);
-            LayoutParams lp = (LayoutParams) child.getLayoutParams();
-            int childTop;
-            if (lp.isFullScreenPage) {
-                childTop = offsetY;
-            } else {
-                childTop = offsetY + getPaddingTop() + mInsets.top;
-                if (mCenterPagesVertically) {
-                    childTop += (getViewportHeight() - mInsets.top - mInsets.bottom - verticalPadding - child.getMeasuredHeight()) / 2;
+            if (child.getVisibility() != View.GONE) {
+                LayoutParams lp = (LayoutParams) child.getLayoutParams();
+                int childTop;
+                if (lp.isFullScreenPage) {
+                    childTop = offsetY;
+                } else {
+                    childTop = offsetY + getPaddingTop() + mInsets.top;
+                    if (mCenterPagesVertically) {
+                        childTop += (getViewportHeight() - mInsets.top - mInsets.bottom - verticalPadding - child.getMeasuredHeight()) / 2;
+                    }
                 }
-            }
 
-            if (child.getVisibility() != View.GONE) {
                 final int childWidth = child.getMeasuredWidth();
                 final int childHeight = child.getMeasuredHeight();
 
index b951100..fcd6f19 100644 (file)
@@ -103,7 +103,9 @@ public class ShortcutAndWidgetContainer extends ViewGroup {
 
         for (int i = 0; i < count; i++) {
             View child = getChildAt(i);
-            measureChild(child);
+            if (child.getVisibility() != GONE) {
+                measureChild(child);
+            }
         }
     }