Merge "Handle charging state separately from temporary parole" into nyc-mr1-dev

This commit is contained in:
TreeHugger Robot
2016-09-15 22:01:39 +00:00
committed by Android (Google) Code Review

View File

@@ -94,7 +94,7 @@ public class UsageStatsService extends SystemService implements
static final String TAG = "UsageStatsService";
static final boolean DEBUG = false;
static final boolean DEBUG = false; // Never submit with true
static final boolean COMPRESS_TIME = false;
private static final long TEN_SECONDS = 10 * 1000;
@@ -139,8 +139,8 @@ public class UsageStatsService extends SystemService implements
long mSystemTimeSnapshot;
boolean mAppIdleEnabled;
boolean mAppIdleParoled;
private boolean mScreenOn;
boolean mAppIdleTempParoled;
boolean mCharging;
private long mLastAppIdleParoledTime;
private volatile boolean mPendingOneTimeCheckIdleStates;
@@ -191,7 +191,7 @@ public class UsageStatsService extends SystemService implements
mAppIdleEnabled = getContext().getResources().getBoolean(
com.android.internal.R.bool.config_enableAutoPowerModes);
if (mAppIdleEnabled) {
IntentFilter deviceStates = new IntentFilter(BatteryManager.ACTION_CHARGING);
IntentFilter deviceStates = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
deviceStates.addAction(BatteryManager.ACTION_DISCHARGING);
deviceStates.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED);
getContext().registerReceiver(new DeviceStateReceiver(), deviceStates);
@@ -237,7 +237,7 @@ public class UsageStatsService extends SystemService implements
mSystemServicesReady = true;
} else if (phase == PHASE_BOOT_COMPLETED) {
setAppIdleParoled(getContext().getSystemService(BatteryManager.class).isCharging());
setChargingState(getContext().getSystemService(BatteryManager.class).isCharging());
}
}
@@ -284,9 +284,8 @@ public class UsageStatsService extends SystemService implements
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (BatteryManager.ACTION_CHARGING.equals(action)
|| BatteryManager.ACTION_DISCHARGING.equals(action)) {
setAppIdleParoled(BatteryManager.ACTION_CHARGING.equals(action));
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
setChargingState(intent.getIntExtra("plugged", 0) != 0);
} else if (PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED.equals(action)) {
onDeviceIdleModeChanged();
}
@@ -376,12 +375,21 @@ public class UsageStatsService extends SystemService implements
}
}
void setChargingState(boolean charging) {
synchronized (mLock) {
if (mCharging != charging) {
mCharging = charging;
postParoleStateChanged();
}
}
}
/** Paroled here means temporary pardon from being inactive */
void setAppIdleParoled(boolean paroled) {
synchronized (mLock) {
if (mAppIdleParoled != paroled) {
mAppIdleParoled = paroled;
if (DEBUG) Slog.d(TAG, "Changing paroled to " + mAppIdleParoled);
if (mAppIdleTempParoled != paroled) {
mAppIdleTempParoled = paroled;
if (DEBUG) Slog.d(TAG, "Changing paroled to " + mAppIdleTempParoled);
if (paroled) {
postParoleEndTimeout();
} else {
@@ -393,6 +401,12 @@ public class UsageStatsService extends SystemService implements
}
}
boolean isParoledOrCharging() {
synchronized (mLock) {
return mAppIdleTempParoled || mCharging;
}
}
private void postNextParoleTimeout() {
if (DEBUG) Slog.d(TAG, "Posting MSG_CHECK_PAROLE_TIMEOUT");
mHandler.removeMessages(MSG_CHECK_PAROLE_TIMEOUT);
@@ -495,7 +509,7 @@ public class UsageStatsService extends SystemService implements
/** Check if it's been a while since last parole and let idle apps do some work */
void checkParoleTimeout() {
synchronized (mLock) {
if (!mAppIdleParoled) {
if (!mAppIdleTempParoled) {
final long timeSinceLastParole = checkAndGetTimeLocked() - mLastAppIdleParoledTime;
if (timeSinceLastParole > mAppIdleParoleIntervalMillis) {
if (DEBUG) Slog.d(TAG, "Crossed default parole interval");
@@ -786,7 +800,7 @@ public class UsageStatsService extends SystemService implements
}
boolean isAppIdleFilteredOrParoled(String packageName, int userId, long elapsedRealtime) {
if (mAppIdleParoled) {
if (isParoledOrCharging()) {
return false;
}
return isAppIdleFiltered(packageName, getAppId(packageName), userId, elapsedRealtime);
@@ -989,8 +1003,9 @@ public class UsageStatsService extends SystemService implements
}
void informParoleStateChanged() {
final boolean paroled = isParoledOrCharging();
for (AppIdleStateChangeListener listener : mPackageAccessListeners) {
listener.onParoleStateChanged(mAppIdleParoled);
listener.onParoleStateChanged(paroled);
}
}
@@ -1072,9 +1087,9 @@ public class UsageStatsService extends SystemService implements
pw.println();
pw.print("mAppIdleEnabled="); pw.print(mAppIdleEnabled);
pw.print(" mAppIdleParoled="); pw.print(mAppIdleParoled);
pw.print(" mScreenOn="); pw.println(mScreenOn);
pw.print("mLastAppIdleParoledTime=");
pw.print(" mAppIdleTempParoled="); pw.print(mAppIdleTempParoled);
pw.print(" mCharging="); pw.print(mCharging);
pw.print(" mLastAppIdleParoledTime=");
TimeUtils.formatDuration(mLastAppIdleParoledTime, pw);
pw.println();
}
@@ -1139,7 +1154,8 @@ public class UsageStatsService extends SystemService implements
break;
case MSG_PAROLE_STATE_CHANGED:
if (DEBUG) Slog.d(TAG, "Parole state changed: " + mAppIdleParoled);
if (DEBUG) Slog.d(TAG, "Parole state: " + mAppIdleTempParoled
+ ", Charging state:" + mCharging);
informParoleStateChanged();
break;
@@ -1466,7 +1482,7 @@ public class UsageStatsService extends SystemService implements
@Override
public boolean isAppIdleParoleOn() {
return mAppIdleParoled;
return isParoledOrCharging();
}
@Override