SysUI: Protect against crash in BatteryController

Change-Id: I850177b961b59b342dde4dbf67c018ac68a42960
Fixes: 30033957
This commit is contained in:
Jason Monk
2016-07-12 13:34:12 -04:00
parent 0171a6ef8b
commit 324a28fc64

View File

@@ -89,14 +89,18 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
@Override
public void addStateChangedCallback(BatteryController.BatteryStateChangeCallback cb) {
mChangeCallbacks.add(cb);
synchronized (mChangeCallbacks) {
mChangeCallbacks.add(cb);
}
cb.onBatteryLevelChanged(mLevel, mPluggedIn, mCharging);
cb.onPowerSaveChanged(mPowerSave);
}
@Override
public void removeStateChangedCallback(BatteryController.BatteryStateChangeCallback cb) {
mChangeCallbacks.remove(cb);
synchronized (mChangeCallbacks) {
mChangeCallbacks.remove(cb);
}
}
@Override
@@ -171,16 +175,20 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
}
protected void fireBatteryLevelChanged() {
final int N = mChangeCallbacks.size();
for (int i = 0; i < N; i++) {
mChangeCallbacks.get(i).onBatteryLevelChanged(mLevel, mPluggedIn, mCharging);
synchronized (mChangeCallbacks) {
final int N = mChangeCallbacks.size();
for (int i = 0; i < N; i++) {
mChangeCallbacks.get(i).onBatteryLevelChanged(mLevel, mPluggedIn, mCharging);
}
}
}
private void firePowerSaveChanged() {
final int N = mChangeCallbacks.size();
for (int i = 0; i < N; i++) {
mChangeCallbacks.get(i).onPowerSaveChanged(mPowerSave);
synchronized (mChangeCallbacks) {
final int N = mChangeCallbacks.size();
for (int i = 0; i < N; i++) {
mChangeCallbacks.get(i).onPowerSaveChanged(mPowerSave);
}
}
}