Guard against crashes from data saver listeners

Change-Id: I85b127c38cc61ec6928aefbf323430051028fafc
Fixes: 28065072
This commit is contained in:
Jason Monk
2016-04-11 15:01:49 -04:00
parent 726959bf76
commit ca4cc55517

View File

@@ -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);
}
}
}