summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/jobscheduler/service/java/com/android/server/tare/ChargingModifier.java13
-rw-r--r--apex/jobscheduler/service/java/com/android/server/tare/DeviceIdleModifier.java12
-rw-r--r--apex/jobscheduler/service/java/com/android/server/tare/PowerSaveModeModifier.java13
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