summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/am/BroadcastQueueModernImpl.java12
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java41
2 files changed, 40 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
index 93fb91ab8cdd..e47e617db8c4 100644
--- a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
+++ b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
@@ -1554,11 +1554,15 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
refreshProcessQueuesLocked(uid);
}
}
+ }, ActivityManager.UID_OBSERVER_PROCSTATE,
+ ActivityManager.PROCESS_STATE_TOP, "android");
+ mService.registerUidObserver(new UidObserver() {
@Override
- public void onUidCachedChanged(int uid, boolean cached) {
+ public void onUidStateChanged(int uid, int procState, long procStateSeq,
+ int capability) {
synchronized (mService) {
- if (cached) {
+ if (procState > ActivityManager.PROCESS_STATE_LAST_ACTIVITY) {
mUidCached.put(uid, true);
} else {
mUidCached.delete(uid);
@@ -1566,8 +1570,8 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
refreshProcessQueuesLocked(uid);
}
}
- }, ActivityManager.UID_OBSERVER_PROCSTATE | ActivityManager.UID_OBSERVER_CACHED,
- ActivityManager.PROCESS_STATE_TOP, "android");
+ }, ActivityManager.UID_OBSERVER_PROCSTATE,
+ ActivityManager.PROCESS_STATE_LAST_ACTIVITY, "android");
// Kick off periodic health checks
mLocalHandler.sendEmptyMessage(MSG_CHECK_HEALTH);
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
index 03231ecfb723..671af0b564c5 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
@@ -171,6 +171,7 @@ public class BroadcastQueueTest {
BroadcastConstants mConstants;
private BroadcastSkipPolicy mSkipPolicy;
private UidObserver mUidObserver;
+ private UidObserver mUidCachedStateObserver;
/**
* Desired behavior of the next
@@ -315,7 +316,13 @@ public class BroadcastQueueTest {
doAnswer((invocation) -> {
mUidObserver = invocation.getArgument(0);
return null;
- }).when(mAms).registerUidObserver(any(), anyInt(), anyInt(), any());
+ }).when(mAms).registerUidObserver(any(), anyInt(),
+ eq(ActivityManager.PROCESS_STATE_TOP), any());
+ doAnswer((invocation) -> {
+ mUidCachedStateObserver = invocation.getArgument(0);
+ return null;
+ }).when(mAms).registerUidObserver(any(), anyInt(),
+ eq(ActivityManager.PROCESS_STATE_LAST_ACTIVITY), any());
mConstants = new BroadcastConstants(Settings.Global.BROADCAST_FG_CONSTANTS);
mConstants.TIMEOUT = 100;
@@ -1713,8 +1720,12 @@ public class BroadcastQueueTest {
final ProcessRecord receiverYellowApp = makeActiveProcessRecord(PACKAGE_YELLOW);
final ProcessRecord receiverOrangeApp = makeActiveProcessRecord(PACKAGE_ORANGE);
- mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_GREEN), true);
- mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_BLUE), true);
+ mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_GREEN),
+ ActivityManager.PROCESS_STATE_CACHED_ACTIVITY, 0,
+ ActivityManager.PROCESS_CAPABILITY_NONE);
+ mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_BLUE),
+ ActivityManager.PROCESS_STATE_CACHED_EMPTY, 0,
+ ActivityManager.PROCESS_CAPABILITY_NONE);
final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK);
final BroadcastOptions opts = BroadcastOptions.makeBasic()
@@ -1758,12 +1769,16 @@ public class BroadcastQueueTest {
eq(UserHandle.USER_SYSTEM), anyInt(), anyInt(), any());
// Shift blue to be active and confirm that deferred broadcast is delivered
- mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_BLUE), false);
+ mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_BLUE),
+ ActivityManager.PROCESS_STATE_TOP, 0,
+ ActivityManager.PROCESS_CAPABILITY_NONE);
waitForIdle();
verifyScheduleRegisteredReceiver(times(1), receiverBlueApp, timeTick);
// Shift green to be active and confirm that deferred broadcast is delivered
- mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_GREEN), false);
+ mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_GREEN),
+ ActivityManager.PROCESS_STATE_SERVICE, 0,
+ ActivityManager.PROCESS_CAPABILITY_NONE);
waitForIdle();
verifyScheduleRegisteredReceiver(times(1), receiverGreenApp, timeTick);
}
@@ -2188,9 +2203,15 @@ public class BroadcastQueueTest {
final ProcessRecord receiverBlueApp = makeActiveProcessRecord(PACKAGE_BLUE);
final ProcessRecord receiverYellowApp = makeActiveProcessRecord(PACKAGE_YELLOW);
- mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_GREEN), true);
- mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_BLUE), true);
- mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_YELLOW), false);
+ mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_GREEN),
+ ActivityManager.PROCESS_STATE_CACHED_ACTIVITY, 0,
+ ActivityManager.PROCESS_CAPABILITY_NONE);
+ mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_BLUE),
+ ActivityManager.PROCESS_STATE_CACHED_EMPTY, 0,
+ ActivityManager.PROCESS_CAPABILITY_NONE);
+ mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_YELLOW),
+ ActivityManager.PROCESS_STATE_SERVICE, 0,
+ ActivityManager.PROCESS_CAPABILITY_NONE);
final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
final BroadcastOptions opts = BroadcastOptions.makeBasic()
@@ -2213,7 +2234,9 @@ public class BroadcastQueueTest {
verifyScheduleRegisteredReceiver(times(1), receiverYellowApp, airplane);
// Shift green to be active and confirm that deferred broadcast is delivered
- mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_GREEN), false);
+ mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_GREEN),
+ ActivityManager.PROCESS_STATE_TOP_SLEEPING, 0,
+ ActivityManager.PROCESS_CAPABILITY_NONE);
waitForIdle();
verifyScheduleRegisteredReceiver(times(1), receiverGreenApp, airplane);
}