Merge "Fix battery controller non-fire bug" into lmp-preview-dev
diff --git a/services/core/java/com/android/server/job/controllers/BatteryController.java b/services/core/java/com/android/server/job/controllers/BatteryController.java
index 010de5c..4aef2d31 100644
--- a/services/core/java/com/android/server/job/controllers/BatteryController.java
+++ b/services/core/java/com/android/server/job/controllers/BatteryController.java
@@ -37,6 +37,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
/**
@@ -45,7 +46,7 @@
* ACTION_BATTERY_OK.
*/
public class BatteryController extends StateController {
- private static final String TAG = "BatteryController";
+ private static final String TAG = "JobScheduler.Batt";
private static final Object sCreationLock = new Object();
private static volatile BatteryController sController;
@@ -87,12 +88,15 @@
@Override
public void maybeStartTrackingJob(JobStatus taskStatus) {
if (taskStatus.hasChargingConstraint()) {
+ final boolean isOnStablePower = mChargeTracker.isOnStablePower();
synchronized (mTrackedTasks) {
mTrackedTasks.add(taskStatus);
- taskStatus.chargingConstraintSatisfied.set(mChargeTracker.isOnStablePower());
+ taskStatus.chargingConstraintSatisfied.set(isOnStablePower);
+ }
+ if (isOnStablePower) {
+ mStateChangedListener.onControllerStateChanged();
}
}
-
}
@Override
@@ -106,6 +110,9 @@
private void maybeReportNewChargingState() {
final boolean stablePower = mChargeTracker.isOnStablePower();
+ if (DEBUG) {
+ Slog.d(TAG, "maybeReportNewChargingState: " + stablePower);
+ }
boolean reportChange = false;
synchronized (mTrackedTasks) {
for (JobStatus ts : mTrackedTasks) {
@@ -133,8 +140,7 @@
public ChargingTracker() {
mAlarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
- Intent intent = new Intent(ACTION_CHARGING_STABLE)
- .setComponent(new ComponentName(mContext, this.getClass()));
+ Intent intent = new Intent(ACTION_CHARGING_STABLE);
mStableChargingTriggerIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
}
@@ -147,6 +153,8 @@
// Charging/not charging.
filter.addAction(Intent.ACTION_POWER_CONNECTED);
filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
+ // Charging stable.
+ filter.addAction(ACTION_CHARGING_STABLE);
mContext.registerReceiver(this, filter);
// Initialise tracker state.
@@ -189,6 +197,10 @@
mBatteryHealthy = true;
maybeReportNewChargingState();
} else if (Intent.ACTION_POWER_CONNECTED.equals(action)) {
+ if (DEBUG) {
+ Slog.d(TAG, "Received charging intent, setting alarm for "
+ + STABLE_CHARGING_THRESHOLD_MILLIS);
+ }
// Set up an alarm for ACTION_CHARGING_STABLE - we don't want to kick off tasks
// here if the user unplugs the phone immediately.
mAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
@@ -196,6 +208,9 @@
mStableChargingTriggerIntent);
mCharging = true;
} else if (Intent.ACTION_POWER_DISCONNECTED.equals(action)) {
+ if (DEBUG) {
+ Slog.d(TAG, "Disconnected from power, cancelling any set alarms.");
+ }
// If an alarm is set, breathe a sigh of relief and cancel it - crisis averted.
mAlarm.cancel(mStableChargingTriggerIntent);
mCharging = false;
@@ -203,7 +218,8 @@
}else if (ACTION_CHARGING_STABLE.equals(action)) {
// Here's where we actually do the notify for a task being ready.
if (DEBUG) {
- Slog.d(TAG, "Battery connected fired @ " + SystemClock.elapsedRealtime());
+ Slog.d(TAG, "Battery connected fired @ " + SystemClock.elapsedRealtime()
+ + " charging: " + mCharging);
}
if (mCharging) { // Should never receive this intent if mCharging is false.
maybeReportNewChargingState();
@@ -214,6 +230,17 @@
@Override
public void dumpControllerState(PrintWriter pw) {
-
+ pw.println("Batt.");
+ pw.println("Stable power: " + mChargeTracker.isOnStablePower());
+ synchronized (mTrackedTasks) {
+ Iterator<JobStatus> it = mTrackedTasks.iterator();
+ if (it.hasNext()) {
+ pw.print(String.valueOf(it.next().hashCode()));
+ }
+ while (it.hasNext()) {
+ pw.print("," + String.valueOf(it.next().hashCode()));
+ }
+ pw.println();
+ }
}
}