summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKweku Adams <kwekua@google.com>2020-05-26 12:21:16 -0700
committerKweku Adams <kwekua@google.com>2020-05-27 21:48:50 +0000
commit52b52a6016b10b05ec518e06d74e57d6cc02d8c2 (patch)
treea9d9d843f3c6a852d2a86a4429294b7dd96b94a9
parent57e977a5859ff24f5ff909046dccde5bce341f6d (diff)
Fix app standby bugs.
1. Don't set app standby buckets when app idle is disabled. When the bucket is set when app idle is disabled, AppStandbyController notifies listeners, which then puts the listeners in an invalid state where they think some apps are exempted from things like battery saver. 2. Remove uninstalled packages from AppStateTracker's exempted package cache. Bug: 156868557 Test: make cts -j 64 && cts-tradefed run commandAndExit cts -m CtsBatterySavingTestCases -t android.os.cts.batterysaving.BatterySaverAlarmTest Test: make cts -j 64 && cts-tradefed run commandAndExit cts-on-gsi -m CtsBatterySavingTestCases -t android.os.cts.batterysaving.BatterySaverAlarmTest Change-Id: If62c75eff0bc56ef1750e109335ba7e47832c128 Merged-In: 2a94051c041dab180dc7f22e9a4f5ff36dd7d483
-rw-r--r--apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java2
-rw-r--r--services/core/java/com/android/server/AppStateTracker.java8
2 files changed, 10 insertions, 0 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
index 94e5d0b2591b..40328b300cee 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
@@ -1322,6 +1322,8 @@ public class AppStandbyController implements AppStandbyInternal {
private void setAppStandbyBucket(String packageName, int userId, @StandbyBuckets int newBucket,
int reason, long elapsedRealtime, boolean resetTimeout) {
+ if (!mAppIdleEnabled) return;
+
synchronized (mAppIdleLock) {
// If the package is not installed, don't allow the bucket to be set.
if (!mInjector.isPackageInstalled(packageName, 0, userId)) {
diff --git a/services/core/java/com/android/server/AppStateTracker.java b/services/core/java/com/android/server/AppStateTracker.java
index 72e170ff9532..b765d81d42b7 100644
--- a/services/core/java/com/android/server/AppStateTracker.java
+++ b/services/core/java/com/android/server/AppStateTracker.java
@@ -448,6 +448,7 @@ public class AppStateTracker {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_REMOVED);
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
+ filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
mContext.registerReceiver(new MyReceiver(), filter);
refreshForcedAppStandbyUidPackagesLocked();
@@ -688,6 +689,13 @@ public class AppStateTracker {
mIsPluggedIn = (intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0);
}
updateForceAllAppStandbyState();
+ } else if (Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())
+ && !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
+ final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+ final String pkgName = intent.getData().getSchemeSpecificPart();
+ if (mExemptedPackages.remove(userId, pkgName)) {
+ mHandler.notifyExemptChanged();
+ }
}
}
}