Remove observer when QSBH is detached

When QuickStatusBarHeader is detached (for example, when QSFragment is
destroyed) remove the LiveData observer.

Test: ahat, after dark mode (triggers re-inflate), there's only one QSBH
observer
Fixes: 155425341

Change-Id: Ic92367ea786228dfefb9808d9cad7d73197b4967
This commit is contained in:
Fabian Kozynski
2020-05-01 10:19:14 -04:00
parent 8e47f58e6b
commit 9ebcda07be

View File

@@ -138,6 +138,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
private Clock mClockView;
private DateView mDateView;
private BatteryMeterView mBatteryRemainingIcon;
private RingerModeTracker mRingerModeTracker;
// Used for RingerModeTracker
private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);
@@ -159,10 +160,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
mDualToneHandler = new DualToneHandler(
new ContextThemeWrapper(context, R.style.QSHeaderTheme));
mCommandQueue = commandQueue;
ringerModeTracker.getRingerModeInternal().observe(this, ringer -> {
mRingerMode = ringer;
updateStatusText();
});
mRingerModeTracker = ringerModeTracker;
}
@Override
@@ -429,6 +427,10 @@ public class QuickStatusBarHeader extends RelativeLayout implements
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
mRingerModeTracker.getRingerModeInternal().observe(this, ringer -> {
mRingerMode = ringer;
updateStatusText();
});
mStatusBarIconController.addIconGroup(mIconManager);
requestApplyInsets();
}
@@ -466,6 +468,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
@VisibleForTesting
public void onDetachedFromWindow() {
setListening(false);
mRingerModeTracker.getRingerModeInternal().removeObservers(this);
mStatusBarIconController.removeIconGroup(mIconManager);
super.onDetachedFromWindow();
}