From edbfdb38633f81b436804a793ca3b94c1f7de26c Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 25 Sep 2019 20:36:04 -0700 Subject: [PATCH] Prevent adding duplicate callbacks to the state controller - KeyguardBottomAreaView can add itself multiple times as a callback, which can leak a bitmap via that view if the state controller keeps an extra ref to it. Bug: 141555865 Bug: 140629244 Test: Change overlays multiple times, take heap dump and ensure no leaked bitmaps Change-Id: I8169eac24d8801ae71e4bdc60a16c68eb3896cc4 --- .../statusbar/policy/KeyguardStateControllerImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java index f8c7532ec281e..cc91bc0828718 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java @@ -101,7 +101,9 @@ public class KeyguardStateControllerImpl extends KeyguardUpdateMonitorCallback @Override public void addCallback(@NonNull Callback callback) { Preconditions.checkNotNull(callback, "Callback must not be null. b/128895449"); - mCallbacks.add(callback); + if (!mCallbacks.contains(callback)) { + mCallbacks.add(callback); + } if (mCallbacks.size() != 0 && !mListening) { mListening = true; mKeyguardUpdateMonitor.registerCallback(this);