Fix: Remove the updateListeners from QSIconViewImpl.java which was causing memory leak in the SystemUI process.
Bug: 327078684
Flag: com.android.systemui.removeUpdateListenerInQsIconViewImpl
Test: Manually tested by dumping the java heap and view that heap profile in perfetto ui.
Change-Id: Ie5a0d36724303d74f614f0f6991616ab3b9bbf69
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index 97a45fb..c3e62cd 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -1189,6 +1189,16 @@
}
flag {
+ namespace: "systemui"
+ name: "remove_update_listener_in_qs_icon_view_impl"
+ description: "Remove update listeners in QsIconViewImpl class to avoid memory leak."
+ bug: "327078684"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "sim_pin_race_condition_on_restart"
namespace: "systemui"
description: "The SIM PIN screen may be shown incorrectly on reboot"
@@ -1206,4 +1216,4 @@
metadata {
purpose: PURPOSE_BUGFIX
}
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java
index 720120b..5ea8c21 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java
@@ -14,6 +14,8 @@
package com.android.systemui.qs.tileimpl;
+import static com.android.systemui.Flags.removeUpdateListenerInQsIconViewImpl;
+
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ArgbEvaluator;
@@ -204,6 +206,9 @@
values.setEvaluator(ArgbEvaluator.getInstance());
mColorAnimator.setValues(values);
mColorAnimator.removeAllListeners();
+ if (removeUpdateListenerInQsIconViewImpl()) {
+ mColorAnimator.removeAllUpdateListeners();
+ }
mColorAnimator.addUpdateListener(animation -> {
setTint(iv, (int) animation.getAnimatedValue());
});