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:
Kweku Adams
2022-03-18 20:22:13 +00:00
parent 34fd7c525e
commit 9dd718547b
3 changed files with 38 additions and 0 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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