Merge "Guard against crashes from data saver listeners" into nyc-dev

This commit is contained in:
Jason Monk
2016-04-12 15:39:07 +00:00
committed by Android (Google) Code Review

View File

@@ -33,24 +33,29 @@ public class DataSaverController {
} }
private void handleRestrictBackgroundChanged(boolean isDataSaving) { private void handleRestrictBackgroundChanged(boolean isDataSaving) {
final int N = mListeners.size(); synchronized (mListeners) {
for (int i = 0; i < N; i++) { for (int i = 0; i < mListeners.size(); i++) {
mListeners.get(i).onDataSaverChanged(isDataSaving); mListeners.get(i).onDataSaverChanged(isDataSaving);
}
} }
} }
public void addListener(Listener listener) { public void addListener(Listener listener) {
mListeners.add(listener); synchronized (mListeners) {
if (mListeners.size() == 1) { mListeners.add(listener);
mPolicyManager.registerListener(mPolicyListener); if (mListeners.size() == 1) {
mPolicyManager.registerListener(mPolicyListener);
}
} }
listener.onDataSaverChanged(isDataSaverEnabled()); listener.onDataSaverChanged(isDataSaverEnabled());
} }
public void remListener(Listener listener) { public void remListener(Listener listener) {
mListeners.remove(listener); synchronized (mListeners) {
if (mListeners.size() == 0) { mListeners.remove(listener);
mPolicyManager.unregisterListener(mPolicyListener); if (mListeners.size() == 0) {
mPolicyManager.unregisterListener(mPolicyListener);
}
} }
} }