Avoid crash when resetting defaults.
Tearing down means unregistering receivers, but if the receiver isn't registered, then the system will crash. Now, we make sure the receivers were registered before trying to unregister them. Bug: 158300259 Test: manual via developer options Change-Id: I3a022002e2f1286718e08fe1dddf83deda6290de
This commit is contained in:
@@ -76,6 +76,8 @@ class ChargingModifier extends Modifier {
|
||||
}
|
||||
|
||||
private final class ChargingTracker extends BroadcastReceiver {
|
||||
private boolean mIsSetup = false;
|
||||
|
||||
/**
|
||||
* Track whether we're "charging", where charging means that we're ready to commit to
|
||||
* doing work.
|
||||
@@ -83,6 +85,10 @@ class ChargingModifier extends Modifier {
|
||||
private volatile boolean mCharging;
|
||||
|
||||
public void startTracking(@NonNull Context context) {
|
||||
if (mIsSetup) {
|
||||
return;
|
||||
}
|
||||
|
||||
final IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(BatteryManager.ACTION_CHARGING);
|
||||
filter.addAction(BatteryManager.ACTION_DISCHARGING);
|
||||
@@ -91,10 +97,17 @@ class ChargingModifier extends Modifier {
|
||||
// Initialise tracker state.
|
||||
final BatteryManager batteryManager = context.getSystemService(BatteryManager.class);
|
||||
mCharging = batteryManager.isCharging();
|
||||
|
||||
mIsSetup = true;
|
||||
}
|
||||
|
||||
public void stopTracking(@NonNull Context context) {
|
||||
if (!mIsSetup) {
|
||||
return;
|
||||
}
|
||||
|
||||
context.unregisterReceiver(this);
|
||||
mIsSetup = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -72,6 +72,7 @@ class DeviceIdleModifier extends Modifier {
|
||||
}
|
||||
|
||||
private final class DeviceIdleTracker extends BroadcastReceiver {
|
||||
private boolean mIsSetup = false;
|
||||
|
||||
private volatile boolean mDeviceIdle;
|
||||
private volatile boolean mDeviceLightIdle;
|
||||
@@ -80,6 +81,10 @@ class DeviceIdleModifier extends Modifier {
|
||||
}
|
||||
|
||||
void startTracking(@NonNull Context context) {
|
||||
if (mIsSetup) {
|
||||
return;
|
||||
}
|
||||
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED);
|
||||
filter.addAction(PowerManager.ACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED);
|
||||
@@ -88,10 +93,17 @@ class DeviceIdleModifier extends Modifier {
|
||||
// Initialise tracker state.
|
||||
mDeviceIdle = mPowerManager.isDeviceIdleMode();
|
||||
mDeviceLightIdle = mPowerManager.isLightDeviceIdleMode();
|
||||
|
||||
mIsSetup = true;
|
||||
}
|
||||
|
||||
void stopTracking(@NonNull Context context) {
|
||||
if (!mIsSetup) {
|
||||
return;
|
||||
}
|
||||
|
||||
context.unregisterReceiver(this);
|
||||
mIsSetup = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -72,6 +72,8 @@ class PowerSaveModeModifier extends Modifier {
|
||||
|
||||
// TODO: migrate to relying on PowerSaveState and ServiceType.TARE
|
||||
private final class PowerSaveModeTracker extends BroadcastReceiver {
|
||||
private boolean mIsSetup = false;
|
||||
|
||||
private final PowerManager mPowerManager;
|
||||
private volatile boolean mPowerSaveModeEnabled;
|
||||
|
||||
@@ -80,16 +82,27 @@ class PowerSaveModeModifier extends Modifier {
|
||||
}
|
||||
|
||||
public void startTracking(@NonNull Context context) {
|
||||
if (mIsSetup) {
|
||||
return;
|
||||
}
|
||||
|
||||
final IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
|
||||
context.registerReceiver(this, filter);
|
||||
|
||||
// Initialise tracker state.
|
||||
mPowerSaveModeEnabled = mPowerManager.isPowerSaveMode();
|
||||
|
||||
mIsSetup = true;
|
||||
}
|
||||
|
||||
public void stopTracking(@NonNull Context context) {
|
||||
if (!mIsSetup) {
|
||||
return;
|
||||
}
|
||||
|
||||
context.unregisterReceiver(this);
|
||||
mIsSetup = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user