Loading core/java/android/app/ActivityManagerInternal.java +1 −1 Original line number Diff line number Diff line Loading @@ -207,7 +207,7 @@ public abstract class ActivityManagerInternal { /** * Allow DeviceIdleController to tell us about what apps are whitelisted. */ public abstract void setDeviceIdleWhitelist(int[] appids); public abstract void setDeviceIdleWhitelist(int[] allAppids, int[] exceptIdleAppids); /** * Update information about which app IDs are on the temp whitelist. Loading services/core/java/com/android/server/DeviceIdleController.java +4 −6 Original line number Diff line number Diff line Loading @@ -1535,7 +1535,8 @@ public class DeviceIdleController extends SystemService filter.addAction(Intent.ACTION_SCREEN_ON); getContext().registerReceiver(mInteractivityReceiver, filter); mLocalActivityManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray); mLocalActivityManager.setDeviceIdleWhitelist( mPowerSaveWhitelistAllAppIdArray, mPowerSaveWhitelistExceptIdleAppIdArray); mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray); mLocalActivityManager.registerScreenObserver(mScreenObserver); Loading Loading @@ -2576,11 +2577,8 @@ public class DeviceIdleController extends SystemService mPowerSaveWhitelistUserAppIdArray = buildAppIdArray(null, mPowerSaveWhitelistUserApps, mPowerSaveWhitelistUserAppIds); if (mLocalActivityManager != null) { if (DEBUG) { Slog.d(TAG, "Setting activity manager whitelist to " + Arrays.toString(mPowerSaveWhitelistAllAppIdArray)); } mLocalActivityManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray); mLocalActivityManager.setDeviceIdleWhitelist( mPowerSaveWhitelistAllAppIdArray, mPowerSaveWhitelistExceptIdleAppIdArray); } if (mLocalPowerManager != null) { if (DEBUG) { Loading services/core/java/com/android/server/am/ActivityManagerService.java +26 −10 Original line number Diff line number Diff line Loading @@ -1376,10 +1376,15 @@ public class ActivityManagerService extends IActivityManager.Stub DeviceIdleController.LocalService mLocalDeviceIdleController; /** * Set of app ids that are whitelisted for device idle and thus background check. * Power-save whitelisted app-ids (not including except-idle-whitelisted ones). */ int[] mDeviceIdleWhitelist = new int[0]; /** * Power-save whitelisted app-ids (including except-idle-whitelisted ones). */ int[] mDeviceIdleExceptIdleWhitelist = new int[0]; /** * Set of app ids that are temporarily allowed to escape bg check due to high-pri message */ Loading Loading @@ -9316,7 +9321,7 @@ public class ActivityManagerService extends IActivityManager.Stub // If force-background-check is enabled, restrict all apps that aren't whitelisted. if (mForceBackgroundCheck && !UserHandle.isCore(uid) && !isOnDeviceIdleWhitelistLocked(uid)) { !isOnDeviceIdleWhitelistLocked(uid, /*allowExceptIdleToo=*/ true)) { if (DEBUG_BACKGROUND_CHECK) { Slog.i(TAG, "Force background check: " + uid + "/" + packageName + " restricted"); Loading Loading @@ -9354,7 +9359,7 @@ public class ActivityManagerService extends IActivityManager.Stub } // Is this app on the battery whitelist? if (isOnDeviceIdleWhitelistLocked(uid)) { if (isOnDeviceIdleWhitelistLocked(uid, /*allowExceptIdleToo=*/ false)) { if (DEBUG_BACKGROUND_CHECK) { Slog.i(TAG, "App " + uid + "/" + packageName + " on idle whitelist; not restricted in background"); Loading Loading @@ -9396,9 +9401,12 @@ public class ActivityManagerService extends IActivityManager.Stub ? appRestrictedInBackgroundLocked(uid, packageName, packageTargetSdk) : appServicesRestrictedInBackgroundLocked(uid, packageName, packageTargetSdk); if (DEBUG_BACKGROUND_CHECK) Slog.d(TAG, "checkAllowBackground: uid=" + uid if (DEBUG_BACKGROUND_CHECK) { Slog.d(TAG, "checkAllowBackground: uid=" + uid + " pkg=" + packageName + " startMode=" + startMode + " onwhitelist=" + isOnDeviceIdleWhitelistLocked(uid)); + " onwhitelist=" + isOnDeviceIdleWhitelistLocked(uid, false) + " onwhitelist(ei)=" + isOnDeviceIdleWhitelistLocked(uid, true)); } if (startMode == ActivityManager.APP_START_MODE_DELAYED) { // This is an old app that has been forced into a "compatible as possible" // mode of background check. To increase compatibility, we will allow other Loading @@ -9425,9 +9433,14 @@ public class ActivityManagerService extends IActivityManager.Stub /** * @return whether a UID is in the system, user or temp doze whitelist. */ boolean isOnDeviceIdleWhitelistLocked(int uid) { boolean isOnDeviceIdleWhitelistLocked(int uid, boolean allowExceptIdleToo) { final int appId = UserHandle.getAppId(uid); return Arrays.binarySearch(mDeviceIdleWhitelist, appId) >= 0 final int[] whitelist = allowExceptIdleToo ? mDeviceIdleExceptIdleWhitelist : mDeviceIdleWhitelist; return Arrays.binarySearch(whitelist, appId) >= 0 || Arrays.binarySearch(mDeviceIdleTempWhitelist, appId) >= 0 || mPendingTempWhitelist.indexOfKey(uid) >= 0; } Loading Loading @@ -16969,6 +16982,8 @@ public class ActivityManagerService extends IActivityManager.Stub } } pw.println(" mDeviceIdleWhitelist=" + Arrays.toString(mDeviceIdleWhitelist)); pw.println(" mDeviceIdleExceptIdleWhitelist=" + Arrays.toString(mDeviceIdleExceptIdleWhitelist)); pw.println(" mDeviceIdleTempWhitelist=" + Arrays.toString(mDeviceIdleTempWhitelist)); if (mPendingTempWhitelist.size() > 0) { pw.println(" mPendingTempWhitelist:"); Loading Loading @@ -26421,9 +26436,10 @@ public class ActivityManagerService extends IActivityManager.Stub } @Override public void setDeviceIdleWhitelist(int[] appids) { public void setDeviceIdleWhitelist(int[] allAppids, int[] exceptIdleAppids) { synchronized (ActivityManagerService.this) { mDeviceIdleWhitelist = appids; mDeviceIdleWhitelist = allAppids; mDeviceIdleExceptIdleWhitelist = exceptIdleAppids; } } Loading
core/java/android/app/ActivityManagerInternal.java +1 −1 Original line number Diff line number Diff line Loading @@ -207,7 +207,7 @@ public abstract class ActivityManagerInternal { /** * Allow DeviceIdleController to tell us about what apps are whitelisted. */ public abstract void setDeviceIdleWhitelist(int[] appids); public abstract void setDeviceIdleWhitelist(int[] allAppids, int[] exceptIdleAppids); /** * Update information about which app IDs are on the temp whitelist. Loading
services/core/java/com/android/server/DeviceIdleController.java +4 −6 Original line number Diff line number Diff line Loading @@ -1535,7 +1535,8 @@ public class DeviceIdleController extends SystemService filter.addAction(Intent.ACTION_SCREEN_ON); getContext().registerReceiver(mInteractivityReceiver, filter); mLocalActivityManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray); mLocalActivityManager.setDeviceIdleWhitelist( mPowerSaveWhitelistAllAppIdArray, mPowerSaveWhitelistExceptIdleAppIdArray); mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray); mLocalActivityManager.registerScreenObserver(mScreenObserver); Loading Loading @@ -2576,11 +2577,8 @@ public class DeviceIdleController extends SystemService mPowerSaveWhitelistUserAppIdArray = buildAppIdArray(null, mPowerSaveWhitelistUserApps, mPowerSaveWhitelistUserAppIds); if (mLocalActivityManager != null) { if (DEBUG) { Slog.d(TAG, "Setting activity manager whitelist to " + Arrays.toString(mPowerSaveWhitelistAllAppIdArray)); } mLocalActivityManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray); mLocalActivityManager.setDeviceIdleWhitelist( mPowerSaveWhitelistAllAppIdArray, mPowerSaveWhitelistExceptIdleAppIdArray); } if (mLocalPowerManager != null) { if (DEBUG) { Loading
services/core/java/com/android/server/am/ActivityManagerService.java +26 −10 Original line number Diff line number Diff line Loading @@ -1376,10 +1376,15 @@ public class ActivityManagerService extends IActivityManager.Stub DeviceIdleController.LocalService mLocalDeviceIdleController; /** * Set of app ids that are whitelisted for device idle and thus background check. * Power-save whitelisted app-ids (not including except-idle-whitelisted ones). */ int[] mDeviceIdleWhitelist = new int[0]; /** * Power-save whitelisted app-ids (including except-idle-whitelisted ones). */ int[] mDeviceIdleExceptIdleWhitelist = new int[0]; /** * Set of app ids that are temporarily allowed to escape bg check due to high-pri message */ Loading Loading @@ -9316,7 +9321,7 @@ public class ActivityManagerService extends IActivityManager.Stub // If force-background-check is enabled, restrict all apps that aren't whitelisted. if (mForceBackgroundCheck && !UserHandle.isCore(uid) && !isOnDeviceIdleWhitelistLocked(uid)) { !isOnDeviceIdleWhitelistLocked(uid, /*allowExceptIdleToo=*/ true)) { if (DEBUG_BACKGROUND_CHECK) { Slog.i(TAG, "Force background check: " + uid + "/" + packageName + " restricted"); Loading Loading @@ -9354,7 +9359,7 @@ public class ActivityManagerService extends IActivityManager.Stub } // Is this app on the battery whitelist? if (isOnDeviceIdleWhitelistLocked(uid)) { if (isOnDeviceIdleWhitelistLocked(uid, /*allowExceptIdleToo=*/ false)) { if (DEBUG_BACKGROUND_CHECK) { Slog.i(TAG, "App " + uid + "/" + packageName + " on idle whitelist; not restricted in background"); Loading Loading @@ -9396,9 +9401,12 @@ public class ActivityManagerService extends IActivityManager.Stub ? appRestrictedInBackgroundLocked(uid, packageName, packageTargetSdk) : appServicesRestrictedInBackgroundLocked(uid, packageName, packageTargetSdk); if (DEBUG_BACKGROUND_CHECK) Slog.d(TAG, "checkAllowBackground: uid=" + uid if (DEBUG_BACKGROUND_CHECK) { Slog.d(TAG, "checkAllowBackground: uid=" + uid + " pkg=" + packageName + " startMode=" + startMode + " onwhitelist=" + isOnDeviceIdleWhitelistLocked(uid)); + " onwhitelist=" + isOnDeviceIdleWhitelistLocked(uid, false) + " onwhitelist(ei)=" + isOnDeviceIdleWhitelistLocked(uid, true)); } if (startMode == ActivityManager.APP_START_MODE_DELAYED) { // This is an old app that has been forced into a "compatible as possible" // mode of background check. To increase compatibility, we will allow other Loading @@ -9425,9 +9433,14 @@ public class ActivityManagerService extends IActivityManager.Stub /** * @return whether a UID is in the system, user or temp doze whitelist. */ boolean isOnDeviceIdleWhitelistLocked(int uid) { boolean isOnDeviceIdleWhitelistLocked(int uid, boolean allowExceptIdleToo) { final int appId = UserHandle.getAppId(uid); return Arrays.binarySearch(mDeviceIdleWhitelist, appId) >= 0 final int[] whitelist = allowExceptIdleToo ? mDeviceIdleExceptIdleWhitelist : mDeviceIdleWhitelist; return Arrays.binarySearch(whitelist, appId) >= 0 || Arrays.binarySearch(mDeviceIdleTempWhitelist, appId) >= 0 || mPendingTempWhitelist.indexOfKey(uid) >= 0; } Loading Loading @@ -16969,6 +16982,8 @@ public class ActivityManagerService extends IActivityManager.Stub } } pw.println(" mDeviceIdleWhitelist=" + Arrays.toString(mDeviceIdleWhitelist)); pw.println(" mDeviceIdleExceptIdleWhitelist=" + Arrays.toString(mDeviceIdleExceptIdleWhitelist)); pw.println(" mDeviceIdleTempWhitelist=" + Arrays.toString(mDeviceIdleTempWhitelist)); if (mPendingTempWhitelist.size() > 0) { pw.println(" mPendingTempWhitelist:"); Loading Loading @@ -26421,9 +26436,10 @@ public class ActivityManagerService extends IActivityManager.Stub } @Override public void setDeviceIdleWhitelist(int[] appids) { public void setDeviceIdleWhitelist(int[] allAppids, int[] exceptIdleAppids) { synchronized (ActivityManagerService.this) { mDeviceIdleWhitelist = appids; mDeviceIdleWhitelist = allAppids; mDeviceIdleExceptIdleWhitelist = exceptIdleAppids; } }