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

Commit 4c97b0a9 authored by Mady Mellor's avatar Mady Mellor
Browse files

Fix leak in NotificationStackScroller by nulling out translatingParent

Once a notification is removed we don’t need to keep reference to
mTranslatingParentView.

Fixes: 35323108
Test: runtest systemui
Change-Id: Ibbecfde4b4f1ee56e3c4e0ec59fadf1284f6c6ce
parent 1f8a47ca
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -1683,6 +1683,7 @@ public class StatusBar extends SystemUI implements DemoMode,

        if (entry != null && entry.row != null) {
            entry.row.setRemoved();
            mStackScroller.cleanUpViewState(entry.row);
        }
        // Let's remove the children if this was a summary
        handleGroupSummaryRemoved(key, ranking);
@@ -1739,12 +1740,6 @@ public class StatusBar extends SystemUI implements DemoMode,
                // animations
                toRemove.get(i).setRemoved();
            }
            for (int i = 0; i < toRemove.size(); i++) {
                removeNotification(toRemove.get(i).getStatusBarNotification().getKey(), ranking);
                // we need to ensure that the view is actually properly removed from the viewstate
                // as this won't happen anymore when kept in the parent.
                mStackScroller.removeViewStateForView(toRemove.get(i));
            }
        }
    }

+11 −9
Original line number Diff line number Diff line
@@ -2455,6 +2455,17 @@ public class NotificationStackScrollLayout extends ViewGroup
        }
    }

    /**
     * Called when a notification is removed from the shade. This cleans up the state for a given
     * view.
     */
    public void cleanUpViewState(View child) {
        if (child == mTranslatingParentView) {
            mTranslatingParentView = null;
        }
        mCurrentStackScrollState.removeViewStateForView(child);
    }

    @Override
    public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
        super.requestDisallowInterceptTouchEvent(disallowIntercept);
@@ -4039,15 +4050,6 @@ public class NotificationStackScrollLayout extends ViewGroup
        setFadingOut(alpha != 1.0f);
    }

    /**
     * Remove the a given view from the viewstate. This is currently used when the children are
     * kept in the parent artificially to have a nicer animation.
     * @param view the view to remove
     */
    public void removeViewStateForView(View view) {
        mCurrentStackScrollState.removeViewStateForView(view);
    }

    public void setQsExpanded(boolean qsExpanded) {
        mQsExpanded = qsExpanded;
        updateAlgorithmLayoutMinHeight();