Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9121bc1 authored by Chet Haase's avatar Chet Haase Committed by Android (Google) Code Review
Browse files

Merge "Fix issue #5367164: memory leak in LayoutTransition"

parents bece9cb7 1a76dcd6
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.DecelerateInterpolator;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -615,10 +616,13 @@ public class LayoutTransition {
        observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            public boolean onPreDraw() {
                parent.getViewTreeObserver().removeOnPreDrawListener(this);
                int numChildren = parent.getChildCount();
                for (int i = 0; i < numChildren; ++i) {
                    final View child = parent.getChildAt(i);
                    child.removeOnLayoutChangeListener(layoutChangeListenerMap.get(child));
                int count = layoutChangeListenerMap.size();
                if (count > 0) {
                    Collection<View> views = layoutChangeListenerMap.keySet();
                    for (View view : views) {
                        View.OnLayoutChangeListener listener = layoutChangeListenerMap.get(view);
                        view.removeOnLayoutChangeListener(listener);
                    }
                }
                layoutChangeListenerMap.clear();
                return true;
+3 −1
Original line number Diff line number Diff line
@@ -3335,8 +3335,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
        if (mOnLayoutChangeListeners == null) {
            mOnLayoutChangeListeners = new ArrayList<OnLayoutChangeListener>();
        }
        if (!mOnLayoutChangeListeners.contains(listener)) {
            mOnLayoutChangeListeners.add(listener);
        }
    }
    /**
     * Remove a listener for layout changes.