Loading services/core/java/com/android/server/AlarmManagerService.java +15 −8 Original line number Original line Diff line number Diff line Loading @@ -3528,10 +3528,15 @@ class AlarmManagerService extends SystemService { public static final int REPORT_ALARMS_ACTIVE = 4; public static final int REPORT_ALARMS_ACTIVE = 4; public static final int APP_STANDBY_BUCKET_CHANGED = 5; public static final int APP_STANDBY_BUCKET_CHANGED = 5; public static final int APP_STANDBY_PAROLE_CHANGED = 6; public static final int APP_STANDBY_PAROLE_CHANGED = 6; public static final int REMOVE_FOR_STOPPED = 7; public AlarmHandler() { public AlarmHandler() { } } public void postRemoveForStopped(int uid) { obtainMessage(REMOVE_FOR_STOPPED, uid, 0).sendToTarget(); } public void handleMessage(Message msg) { public void handleMessage(Message msg) { switch (msg.what) { switch (msg.what) { case ALARM_EVENT: { case ALARM_EVENT: { Loading Loading @@ -3594,6 +3599,12 @@ class AlarmManagerService extends SystemService { } } break; break; case REMOVE_FOR_STOPPED: synchronized (mLock) { removeForStoppedLocked(msg.arg1); } break; default: default: // nope, just ignore it // nope, just ignore it break; break; Loading Loading @@ -3783,10 +3794,8 @@ class AlarmManagerService extends SystemService { } } @Override public void onUidGone(int uid, boolean disabled) { @Override public void onUidGone(int uid, boolean disabled) { synchronized (mLock) { if (disabled) { if (disabled) { removeForStoppedLocked(uid); mHandler.postRemoveForStopped(uid); } } } } } Loading @@ -3794,10 +3803,8 @@ class AlarmManagerService extends SystemService { } } @Override public void onUidIdle(int uid, boolean disabled) { @Override public void onUidIdle(int uid, boolean disabled) { synchronized (mLock) { if (disabled) { if (disabled) { removeForStoppedLocked(uid); mHandler.postRemoveForStopped(uid); } } } } } Loading services/core/java/com/android/server/ForceAppStandbyTracker.java +82 −32 Original line number Original line Diff line number Diff line Loading @@ -614,48 +614,22 @@ public class ForceAppStandbyTracker { private final class UidObserver extends IUidObserver.Stub { private final class UidObserver extends IUidObserver.Stub { @Override @Override public void onUidStateChanged(int uid, int procState, long procStateSeq) { public void onUidStateChanged(int uid, int procState, long procStateSeq) { synchronized (mLock) { mHandler.onUidStateChanged(uid, procState); if (procState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) { if (removeUidFromArray(mForegroundUids, uid, false)) { mHandler.notifyUidForegroundStateChanged(uid); } } else { if (addUidToArray(mForegroundUids, uid)) { mHandler.notifyUidForegroundStateChanged(uid); } } } } } @Override @Override public void onUidGone(int uid, boolean disabled) { public void onUidActive(int uid) { removeUid(uid, true); mHandler.onUidActive(uid); } } @Override @Override public void onUidActive(int uid) { public void onUidGone(int uid, boolean disabled) { synchronized (mLock) { mHandler.onUidGone(uid, disabled); if (addUidToArray(mActiveUids, uid)) { mHandler.notifyUidActiveStateChanged(uid); } } } } @Override @Override public void onUidIdle(int uid, boolean disabled) { public void onUidIdle(int uid, boolean disabled) { // Just to avoid excessive memcpy, don't remove from the array in this case. mHandler.onUidIdle(uid, disabled); removeUid(uid, false); } private void removeUid(int uid, boolean remove) { synchronized (mLock) { if (removeUidFromArray(mActiveUids, uid, remove)) { mHandler.notifyUidActiveStateChanged(uid); } if (removeUidFromArray(mForegroundUids, uid, remove)) { mHandler.notifyUidForegroundStateChanged(uid); } } } } @Override @Override Loading Loading @@ -740,6 +714,11 @@ public class ForceAppStandbyTracker { private static final int MSG_FORCE_APP_STANDBY_FEATURE_FLAG_CHANGED = 9; private static final int MSG_FORCE_APP_STANDBY_FEATURE_FLAG_CHANGED = 9; private static final int MSG_EXEMPT_CHANGED = 10; private static final int MSG_EXEMPT_CHANGED = 10; private static final int MSG_ON_UID_STATE_CHANGED = 11; private static final int MSG_ON_UID_ACTIVE = 12; private static final int MSG_ON_UID_GONE = 13; private static final int MSG_ON_UID_IDLE = 14; public MyHandler(Looper looper) { public MyHandler(Looper looper) { super(looper); super(looper); } } Loading Loading @@ -790,6 +769,22 @@ public class ForceAppStandbyTracker { obtainMessage(MSG_USER_REMOVED, userId, 0).sendToTarget(); obtainMessage(MSG_USER_REMOVED, userId, 0).sendToTarget(); } } public void onUidStateChanged(int uid, int procState) { obtainMessage(MSG_ON_UID_STATE_CHANGED, uid, procState).sendToTarget(); } public void onUidActive(int uid) { obtainMessage(MSG_ON_UID_ACTIVE, uid, 0).sendToTarget(); } public void onUidGone(int uid, boolean disabled) { obtainMessage(MSG_ON_UID_GONE, uid, disabled ? 1 : 0).sendToTarget(); } public void onUidIdle(int uid, boolean disabled) { obtainMessage(MSG_ON_UID_IDLE, uid, disabled ? 1 : 0).sendToTarget(); } @Override @Override public void handleMessage(Message msg) { public void handleMessage(Message msg) { switch (msg.what) { switch (msg.what) { Loading Loading @@ -883,6 +878,61 @@ public class ForceAppStandbyTracker { case MSG_USER_REMOVED: case MSG_USER_REMOVED: handleUserRemoved(msg.arg1); handleUserRemoved(msg.arg1); return; return; case MSG_ON_UID_STATE_CHANGED: handleUidStateChanged(msg.arg1, msg.arg2); return; case MSG_ON_UID_ACTIVE: handleUidActive(msg.arg1); return; case MSG_ON_UID_GONE: handleUidGone(msg.arg1, msg.arg1 != 0); return; case MSG_ON_UID_IDLE: handleUidIdle(msg.arg1, msg.arg1 != 0); return; } } public void handleUidStateChanged(int uid, int procState) { synchronized (mLock) { if (procState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) { if (removeUidFromArray(mForegroundUids, uid, false)) { mHandler.notifyUidForegroundStateChanged(uid); } } else { if (addUidToArray(mForegroundUids, uid)) { mHandler.notifyUidForegroundStateChanged(uid); } } } } public void handleUidActive(int uid) { synchronized (mLock) { if (addUidToArray(mActiveUids, uid)) { mHandler.notifyUidActiveStateChanged(uid); } } } public void handleUidGone(int uid, boolean disabled) { removeUid(uid, true); } public void handleUidIdle(int uid, boolean disabled) { // Just to avoid excessive memcpy, don't remove from the array in this case. removeUid(uid, false); } private void removeUid(int uid, boolean remove) { synchronized (mLock) { if (removeUidFromArray(mActiveUids, uid, remove)) { mHandler.notifyUidActiveStateChanged(uid); } if (removeUidFromArray(mForegroundUids, uid, remove)) { mHandler.notifyUidForegroundStateChanged(uid); } } } } } } } Loading services/tests/servicestests/src/com/android/server/ForceAppStandbyTrackerTest.java +13 −0 Original line number Original line Diff line number Diff line Loading @@ -343,6 +343,7 @@ public class ForceAppStandbyTrackerTest { assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_1); waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, NONE); areRestricted(instance, UID_1, PACKAGE_1, NONE); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); Loading @@ -350,6 +351,7 @@ public class ForceAppStandbyTrackerTest { assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); mIUidObserver.onUidGone(UID_1, /*disable=*/ false); mIUidObserver.onUidGone(UID_1, /*disable=*/ false); waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, JOBS_AND_ALARMS); areRestricted(instance, UID_1, PACKAGE_1, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); Loading @@ -357,11 +359,13 @@ public class ForceAppStandbyTrackerTest { assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_1); waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, NONE); areRestricted(instance, UID_1, PACKAGE_1, NONE); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); mIUidObserver.onUidIdle(UID_1, /*disable=*/ false); mIUidObserver.onUidIdle(UID_1, /*disable=*/ false); waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, JOBS_AND_ALARMS); areRestricted(instance, UID_1, PACKAGE_1, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); Loading Loading @@ -467,6 +471,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_1); waitUntilMainHandlerDrain(); assertTrue(instance.isUidActive(UID_1)); assertTrue(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -479,6 +484,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidStateChanged(UID_2, mIUidObserver.onUidStateChanged(UID_2, ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE, 0); ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE, 0); waitUntilMainHandlerDrain(); assertTrue(instance.isUidActive(UID_1)); assertTrue(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -491,6 +497,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidStateChanged(UID_1, mIUidObserver.onUidStateChanged(UID_1, ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 0); ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 0); waitUntilMainHandlerDrain(); assertTrue(instance.isUidActive(UID_1)); assertTrue(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -501,6 +508,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidGone(UID_1, true); mIUidObserver.onUidGone(UID_1, true); waitUntilMainHandlerDrain(); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -511,6 +519,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidIdle(UID_2, true); mIUidObserver.onUidIdle(UID_2, true); waitUntilMainHandlerDrain(); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -522,6 +531,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidStateChanged(UID_1, mIUidObserver.onUidStateChanged(UID_1, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 0); ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 0); waitUntilMainHandlerDrain(); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -533,6 +543,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidStateChanged(UID_1, mIUidObserver.onUidStateChanged(UID_1, ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND, 0); ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND, 0); waitUntilMainHandlerDrain(); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading Loading @@ -1037,6 +1048,8 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_10_1); mIUidObserver.onUidActive(UID_10_1); waitUntilMainHandlerDrain(); setAppOps(UID_2, PACKAGE_2, true); setAppOps(UID_2, PACKAGE_2, true); setAppOps(UID_10_2, PACKAGE_2, true); setAppOps(UID_10_2, PACKAGE_2, true); Loading Loading
services/core/java/com/android/server/AlarmManagerService.java +15 −8 Original line number Original line Diff line number Diff line Loading @@ -3528,10 +3528,15 @@ class AlarmManagerService extends SystemService { public static final int REPORT_ALARMS_ACTIVE = 4; public static final int REPORT_ALARMS_ACTIVE = 4; public static final int APP_STANDBY_BUCKET_CHANGED = 5; public static final int APP_STANDBY_BUCKET_CHANGED = 5; public static final int APP_STANDBY_PAROLE_CHANGED = 6; public static final int APP_STANDBY_PAROLE_CHANGED = 6; public static final int REMOVE_FOR_STOPPED = 7; public AlarmHandler() { public AlarmHandler() { } } public void postRemoveForStopped(int uid) { obtainMessage(REMOVE_FOR_STOPPED, uid, 0).sendToTarget(); } public void handleMessage(Message msg) { public void handleMessage(Message msg) { switch (msg.what) { switch (msg.what) { case ALARM_EVENT: { case ALARM_EVENT: { Loading Loading @@ -3594,6 +3599,12 @@ class AlarmManagerService extends SystemService { } } break; break; case REMOVE_FOR_STOPPED: synchronized (mLock) { removeForStoppedLocked(msg.arg1); } break; default: default: // nope, just ignore it // nope, just ignore it break; break; Loading Loading @@ -3783,10 +3794,8 @@ class AlarmManagerService extends SystemService { } } @Override public void onUidGone(int uid, boolean disabled) { @Override public void onUidGone(int uid, boolean disabled) { synchronized (mLock) { if (disabled) { if (disabled) { removeForStoppedLocked(uid); mHandler.postRemoveForStopped(uid); } } } } } Loading @@ -3794,10 +3803,8 @@ class AlarmManagerService extends SystemService { } } @Override public void onUidIdle(int uid, boolean disabled) { @Override public void onUidIdle(int uid, boolean disabled) { synchronized (mLock) { if (disabled) { if (disabled) { removeForStoppedLocked(uid); mHandler.postRemoveForStopped(uid); } } } } } Loading
services/core/java/com/android/server/ForceAppStandbyTracker.java +82 −32 Original line number Original line Diff line number Diff line Loading @@ -614,48 +614,22 @@ public class ForceAppStandbyTracker { private final class UidObserver extends IUidObserver.Stub { private final class UidObserver extends IUidObserver.Stub { @Override @Override public void onUidStateChanged(int uid, int procState, long procStateSeq) { public void onUidStateChanged(int uid, int procState, long procStateSeq) { synchronized (mLock) { mHandler.onUidStateChanged(uid, procState); if (procState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) { if (removeUidFromArray(mForegroundUids, uid, false)) { mHandler.notifyUidForegroundStateChanged(uid); } } else { if (addUidToArray(mForegroundUids, uid)) { mHandler.notifyUidForegroundStateChanged(uid); } } } } } @Override @Override public void onUidGone(int uid, boolean disabled) { public void onUidActive(int uid) { removeUid(uid, true); mHandler.onUidActive(uid); } } @Override @Override public void onUidActive(int uid) { public void onUidGone(int uid, boolean disabled) { synchronized (mLock) { mHandler.onUidGone(uid, disabled); if (addUidToArray(mActiveUids, uid)) { mHandler.notifyUidActiveStateChanged(uid); } } } } @Override @Override public void onUidIdle(int uid, boolean disabled) { public void onUidIdle(int uid, boolean disabled) { // Just to avoid excessive memcpy, don't remove from the array in this case. mHandler.onUidIdle(uid, disabled); removeUid(uid, false); } private void removeUid(int uid, boolean remove) { synchronized (mLock) { if (removeUidFromArray(mActiveUids, uid, remove)) { mHandler.notifyUidActiveStateChanged(uid); } if (removeUidFromArray(mForegroundUids, uid, remove)) { mHandler.notifyUidForegroundStateChanged(uid); } } } } @Override @Override Loading Loading @@ -740,6 +714,11 @@ public class ForceAppStandbyTracker { private static final int MSG_FORCE_APP_STANDBY_FEATURE_FLAG_CHANGED = 9; private static final int MSG_FORCE_APP_STANDBY_FEATURE_FLAG_CHANGED = 9; private static final int MSG_EXEMPT_CHANGED = 10; private static final int MSG_EXEMPT_CHANGED = 10; private static final int MSG_ON_UID_STATE_CHANGED = 11; private static final int MSG_ON_UID_ACTIVE = 12; private static final int MSG_ON_UID_GONE = 13; private static final int MSG_ON_UID_IDLE = 14; public MyHandler(Looper looper) { public MyHandler(Looper looper) { super(looper); super(looper); } } Loading Loading @@ -790,6 +769,22 @@ public class ForceAppStandbyTracker { obtainMessage(MSG_USER_REMOVED, userId, 0).sendToTarget(); obtainMessage(MSG_USER_REMOVED, userId, 0).sendToTarget(); } } public void onUidStateChanged(int uid, int procState) { obtainMessage(MSG_ON_UID_STATE_CHANGED, uid, procState).sendToTarget(); } public void onUidActive(int uid) { obtainMessage(MSG_ON_UID_ACTIVE, uid, 0).sendToTarget(); } public void onUidGone(int uid, boolean disabled) { obtainMessage(MSG_ON_UID_GONE, uid, disabled ? 1 : 0).sendToTarget(); } public void onUidIdle(int uid, boolean disabled) { obtainMessage(MSG_ON_UID_IDLE, uid, disabled ? 1 : 0).sendToTarget(); } @Override @Override public void handleMessage(Message msg) { public void handleMessage(Message msg) { switch (msg.what) { switch (msg.what) { Loading Loading @@ -883,6 +878,61 @@ public class ForceAppStandbyTracker { case MSG_USER_REMOVED: case MSG_USER_REMOVED: handleUserRemoved(msg.arg1); handleUserRemoved(msg.arg1); return; return; case MSG_ON_UID_STATE_CHANGED: handleUidStateChanged(msg.arg1, msg.arg2); return; case MSG_ON_UID_ACTIVE: handleUidActive(msg.arg1); return; case MSG_ON_UID_GONE: handleUidGone(msg.arg1, msg.arg1 != 0); return; case MSG_ON_UID_IDLE: handleUidIdle(msg.arg1, msg.arg1 != 0); return; } } public void handleUidStateChanged(int uid, int procState) { synchronized (mLock) { if (procState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) { if (removeUidFromArray(mForegroundUids, uid, false)) { mHandler.notifyUidForegroundStateChanged(uid); } } else { if (addUidToArray(mForegroundUids, uid)) { mHandler.notifyUidForegroundStateChanged(uid); } } } } public void handleUidActive(int uid) { synchronized (mLock) { if (addUidToArray(mActiveUids, uid)) { mHandler.notifyUidActiveStateChanged(uid); } } } public void handleUidGone(int uid, boolean disabled) { removeUid(uid, true); } public void handleUidIdle(int uid, boolean disabled) { // Just to avoid excessive memcpy, don't remove from the array in this case. removeUid(uid, false); } private void removeUid(int uid, boolean remove) { synchronized (mLock) { if (removeUidFromArray(mActiveUids, uid, remove)) { mHandler.notifyUidActiveStateChanged(uid); } if (removeUidFromArray(mForegroundUids, uid, remove)) { mHandler.notifyUidForegroundStateChanged(uid); } } } } } } } Loading
services/tests/servicestests/src/com/android/server/ForceAppStandbyTrackerTest.java +13 −0 Original line number Original line Diff line number Diff line Loading @@ -343,6 +343,7 @@ public class ForceAppStandbyTrackerTest { assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_1); waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, NONE); areRestricted(instance, UID_1, PACKAGE_1, NONE); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); Loading @@ -350,6 +351,7 @@ public class ForceAppStandbyTrackerTest { assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); mIUidObserver.onUidGone(UID_1, /*disable=*/ false); mIUidObserver.onUidGone(UID_1, /*disable=*/ false); waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, JOBS_AND_ALARMS); areRestricted(instance, UID_1, PACKAGE_1, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); Loading @@ -357,11 +359,13 @@ public class ForceAppStandbyTrackerTest { assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_1); waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, NONE); areRestricted(instance, UID_1, PACKAGE_1, NONE); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); mIUidObserver.onUidIdle(UID_1, /*disable=*/ false); mIUidObserver.onUidIdle(UID_1, /*disable=*/ false); waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, JOBS_AND_ALARMS); areRestricted(instance, UID_1, PACKAGE_1, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); Loading Loading @@ -467,6 +471,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_1); waitUntilMainHandlerDrain(); assertTrue(instance.isUidActive(UID_1)); assertTrue(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -479,6 +484,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidStateChanged(UID_2, mIUidObserver.onUidStateChanged(UID_2, ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE, 0); ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE, 0); waitUntilMainHandlerDrain(); assertTrue(instance.isUidActive(UID_1)); assertTrue(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -491,6 +497,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidStateChanged(UID_1, mIUidObserver.onUidStateChanged(UID_1, ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 0); ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 0); waitUntilMainHandlerDrain(); assertTrue(instance.isUidActive(UID_1)); assertTrue(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -501,6 +508,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidGone(UID_1, true); mIUidObserver.onUidGone(UID_1, true); waitUntilMainHandlerDrain(); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -511,6 +519,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidIdle(UID_2, true); mIUidObserver.onUidIdle(UID_2, true); waitUntilMainHandlerDrain(); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -522,6 +531,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidStateChanged(UID_1, mIUidObserver.onUidStateChanged(UID_1, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 0); ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 0); waitUntilMainHandlerDrain(); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading @@ -533,6 +543,7 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidStateChanged(UID_1, mIUidObserver.onUidStateChanged(UID_1, ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND, 0); ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND, 0); waitUntilMainHandlerDrain(); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); Loading Loading @@ -1037,6 +1048,8 @@ public class ForceAppStandbyTrackerTest { mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_10_1); mIUidObserver.onUidActive(UID_10_1); waitUntilMainHandlerDrain(); setAppOps(UID_2, PACKAGE_2, true); setAppOps(UID_2, PACKAGE_2, true); setAppOps(UID_10_2, PACKAGE_2, true); setAppOps(UID_10_2, PACKAGE_2, true); Loading