Always remove IconState in onViewRemoved, even if animations are off

Recent changes to avoid animating added a case where we can remove views
but not remove the actual IconState for that view, causing a leak

Fixes: 135180058
Test: heap dump?
Change-Id: If3e3924348a606484ac0968f644b4895871bd406
This commit is contained in:
Evan Laird
2019-06-13 16:29:20 -04:00
parent 7fc7f9ce22
commit fab34160d2

View File

@@ -315,10 +315,11 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
@Override
public void onViewRemoved(View child) {
super.onViewRemoved(child);
if (mAnimationsEnabled && child instanceof StatusBarIconView) {
if (child instanceof StatusBarIconView) {
boolean isReplacingIcon = isReplacingIcon(child);
final StatusBarIconView icon = (StatusBarIconView) child;
if (icon.getVisibleState() != StatusBarIconView.STATE_HIDDEN
if (mAnimationsEnabled && icon.getVisibleState() != StatusBarIconView.STATE_HIDDEN
&& child.getVisibility() == VISIBLE && isReplacingIcon) {
int animationStartIndex = findFirstViewIndexAfter(icon.getTranslationX());
if (mAddAnimationStartIndex < 0) {
@@ -329,7 +330,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
}
if (!mChangingViewPositions) {
mIconStates.remove(child);
if (!isReplacingIcon) {
if (mAnimationsEnabled && !isReplacingIcon) {
addTransientView(icon, 0);
boolean isIsolatedIcon = child == mIsolatedIcon;
icon.setVisibleState(StatusBarIconView.STATE_HIDDEN, true /* animate */,