diff options
3 files changed, 38 insertions, 0 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/tare/ChargingModifier.java b/apex/jobscheduler/service/java/com/android/server/tare/ChargingModifier.java index 712e13eb14e2..2b48d49e3052 100644 --- a/apex/jobscheduler/service/java/com/android/server/tare/ChargingModifier.java +++ b/apex/jobscheduler/service/java/com/android/server/tare/ChargingModifier.java @@ -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 diff --git a/apex/jobscheduler/service/java/com/android/server/tare/DeviceIdleModifier.java b/apex/jobscheduler/service/java/com/android/server/tare/DeviceIdleModifier.java index 8a64238f1f17..47ff307deda6 100644 --- a/apex/jobscheduler/service/java/com/android/server/tare/DeviceIdleModifier.java +++ b/apex/jobscheduler/service/java/com/android/server/tare/DeviceIdleModifier.java @@ -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 diff --git a/apex/jobscheduler/service/java/com/android/server/tare/PowerSaveModeModifier.java b/apex/jobscheduler/service/java/com/android/server/tare/PowerSaveModeModifier.java index 4aaa9f449b4f..542bfd12e5c7 100644 --- a/apex/jobscheduler/service/java/com/android/server/tare/PowerSaveModeModifier.java +++ b/apex/jobscheduler/service/java/com/android/server/tare/PowerSaveModeModifier.java @@ -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 |