From ca4cc5551792eefa15f93f53fcb300d0ab305270 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Mon, 11 Apr 2016 15:01:49 -0400 Subject: [PATCH] Guard against crashes from data saver listeners Change-Id: I85b127c38cc61ec6928aefbf323430051028fafc Fixes: 28065072 --- .../statusbar/policy/DataSaverController.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java index 6dd196b8b0c09..c4c64e7995aef 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java @@ -33,24 +33,29 @@ public class DataSaverController { } private void handleRestrictBackgroundChanged(boolean isDataSaving) { - final int N = mListeners.size(); - for (int i = 0; i < N; i++) { - mListeners.get(i).onDataSaverChanged(isDataSaving); + synchronized (mListeners) { + for (int i = 0; i < mListeners.size(); i++) { + mListeners.get(i).onDataSaverChanged(isDataSaving); + } } } public void addListener(Listener listener) { - mListeners.add(listener); - if (mListeners.size() == 1) { - mPolicyManager.registerListener(mPolicyListener); + synchronized (mListeners) { + mListeners.add(listener); + if (mListeners.size() == 1) { + mPolicyManager.registerListener(mPolicyListener); + } } listener.onDataSaverChanged(isDataSaverEnabled()); } public void remListener(Listener listener) { - mListeners.remove(listener); - if (mListeners.size() == 0) { - mPolicyManager.unregisterListener(mPolicyListener); + synchronized (mListeners) { + mListeners.remove(listener); + if (mListeners.size() == 0) { + mPolicyManager.unregisterListener(mPolicyListener); + } } }