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

Commit f1614a6e authored by Selim Cinek's avatar Selim Cinek
Browse files

Fixed a few memory leaks in SystemUI

Fist of all we made the statemap a weak hashmap in order never
to leak any views anymore.

Another leak could occur because predrawlisteners were added twice
but removal only removes one. A view was then leaked in case it was detached
before predraw.

Also fixed a leak when transforming the header because a state wasn't
nulled.

Change-Id: I2573a506c307196ef60c905dc823ea8a95e91a16
Fixes: 28945863
parent 0db3ad24
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -359,7 +359,9 @@ public class NotificationContentView extends FrameLayout {

    private void setVisible(final boolean isVisible) {
        if (isVisible) {

            // This call can happen multiple times, but removing only removes a single one.
            // We therefore need to remove the old one.
            getViewTreeObserver().removeOnPreDrawListener(mEnableAnimationPredrawListener);
            // We only animate if we are drawn at least once, otherwise the view might animate when
            // it's shown the first time
            getViewTreeObserver().addOnPreDrawListener(mEnableAnimationPredrawListener);
+4 −3
Original line number Diff line number Diff line
@@ -109,9 +109,6 @@ public class HeaderTransformState extends TransformState {
    @Override
    public void recycle() {
        super.recycle();
        if (mWorkProfileState != null) {
            mWorkProfileState.recycle();
        }
        sInstancePool.release(this);
    }

@@ -120,6 +117,10 @@ public class HeaderTransformState extends TransformState {
        super.reset();
        mExpandButton = null;
        mWorkProfileState = null;
        if (mWorkProfileState != null) {
            mWorkProfileState.recycle();
            mWorkProfileState = null;
        }
    }

    public void setVisible(boolean visible) {
+3 −4
Original line number Diff line number Diff line
@@ -26,9 +26,8 @@ import com.android.systemui.statusbar.EmptyShadeView;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.ExpandableView;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.WeakHashMap;

/**
 * A state of a {@link com.android.systemui.statusbar.stack.NotificationStackScrollLayout} which
@@ -39,12 +38,12 @@ public class StackScrollState {
    private static final String CHILD_NOT_FOUND_TAG = "StackScrollStateNoSuchChild";

    private final ViewGroup mHostView;
    private Map<ExpandableView, StackViewState> mStateMap;
    private WeakHashMap<ExpandableView, StackViewState> mStateMap;
    private final int mClearAllTopPadding;

    public StackScrollState(ViewGroup hostView) {
        mHostView = hostView;
        mStateMap = new HashMap<ExpandableView, StackViewState>();
        mStateMap = new WeakHashMap<>();
        mClearAllTopPadding = hostView.getContext().getResources().getDimensionPixelSize(
                R.dimen.clear_all_padding_top);
    }