OSDN Git Service

Removed always running preDrawListener
authorSelim Cinek <cinek@google.com>
Fri, 2 May 2014 10:01:36 +0000 (12:01 +0200)
committerSelim Cinek <cinek@google.com>
Fri, 2 May 2014 10:01:36 +0000 (12:01 +0200)
Replaced a always running preDrawListener with one which is just posted on
demand.

Change-Id: Ie7667302d848fe4a109c04dc91376f0b44d3acd3

packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java

index 4c0962e..0114f3c 100644 (file)
@@ -106,15 +106,14 @@ public class NotificationStackScrollLayout extends ViewGroup
     private ExpandableView.OnHeightChangedListener mOnHeightChangedListener;
     private boolean mChildHierarchyDirty;
     private boolean mIsExpanded = true;
-    private boolean mChildrenNeedUpdate;
-    private ViewTreeObserver.OnPreDrawListener mPreDrawListener
+    private boolean mChildrenUpdateRequested;
+    private ViewTreeObserver.OnPreDrawListener mChildrenUpdater
             = new ViewTreeObserver.OnPreDrawListener() {
         @Override
         public boolean onPreDraw() {
-            if (mChildrenNeedUpdate) {
-                updateChildren();
-                mChildrenNeedUpdate = false;
-            }
+            updateChildren();
+            mChildrenUpdateRequested = false;
+            getViewTreeObserver().removeOnPreDrawListener(this);
             return true;
         }
     };
@@ -181,7 +180,6 @@ public class NotificationStackScrollLayout extends ViewGroup
         mPaddingBetweenElements = context.getResources()
                 .getDimensionPixelSize(R.dimen.notification_padding);
         mStackScrollAlgorithm = new StackScrollAlgorithm(context);
-        getViewTreeObserver().addOnPreDrawListener(mPreDrawListener);
     }
 
     @Override
@@ -275,8 +273,11 @@ public class NotificationStackScrollLayout extends ViewGroup
     }
 
     private void requestChildrenUpdate() {
-        mChildrenNeedUpdate = true;
-        invalidate();
+        if (!mChildrenUpdateRequested) {
+            getViewTreeObserver().addOnPreDrawListener(mChildrenUpdater);
+            mChildrenUpdateRequested = true;
+            invalidate();
+        }
     }
 
     private boolean isCurrentlyAnimating() {