Loading core/java/com/android/internal/logging/MetricsConstants.java +1 −0 Original line number Diff line number Diff line Loading @@ -281,6 +281,7 @@ public interface MetricsConstants { public static final int ACTION_DOUBLE_TAP_POWER_CAMERA_GESTURE = 255; public static final int ACTION_WIGGLE_CAMERA_GESTURE = 256; public static final int QS_WORKMODE = 257; public static final int BACKGROUND_CHECK_SUMMARY = 258; // These constants must match those in the analytic pipeline, do not edit. // Add temporary values to the top of MetricsLogger instead. Loading services/core/java/com/android/server/am/ActiveServices.java +3 −2 Original line number Diff line number Diff line Loading @@ -1240,8 +1240,9 @@ public final class ActiveServices { try { // Before going further -- if this app is not allowed to run in the // background, then at this point we aren't going to let it period. if (!mAm.checkAllowBackgroundLocked(sInfo.applicationInfo.uid, sInfo.packageName, callingPid)) { final int allowed = mAm.checkAllowBackgroundLocked( sInfo.applicationInfo.uid, sInfo.packageName, callingPid); if (allowed != ActivityManager.APP_START_MODE_NORMAL) { Slog.w(TAG, "Background execution not allowed: service " + r.intent + " to " + name.flattenToShortString() + " from pid=" + callingPid + " uid=" + callingUid Loading services/core/java/com/android/server/am/ActivityManagerService.java +5 −7 Original line number Diff line number Diff line Loading @@ -7463,13 +7463,11 @@ public final class ActivityManagerService extends ActivityManagerNative public int getAppStartMode(int uid, String packageName) { synchronized (this) { boolean bg = checkAllowBackgroundLocked(uid, packageName, -1); return bg ? ActivityManager.APP_START_MODE_NORMAL : ActivityManager.APP_START_MODE_DISABLED; return checkAllowBackgroundLocked(uid, packageName, -1); } } boolean checkAllowBackgroundLocked(int uid, String packageName, int callingPid) { int checkAllowBackgroundLocked(int uid, String packageName, int callingPid) { UidRecord uidRec = mActiveUids.get(uid); if (uidRec == null || uidRec.idle) { if (callingPid >= 0) { Loading @@ -7480,15 +7478,15 @@ public final class ActivityManagerService extends ActivityManagerNative if (proc != null && proc.curProcState < ActivityManager.PROCESS_STATE_RECEIVER) { // Whoever is instigating this is in the foreground, so we will allow it // to go through. return true; return ActivityManager.APP_START_MODE_NORMAL; } } if (mAppOpsService.noteOperation(AppOpsManager.OP_RUN_IN_BACKGROUND, uid, packageName) != AppOpsManager.MODE_ALLOWED) { return false; return ActivityManager.APP_START_MODE_DELAYED; } } return true; return ActivityManager.APP_START_MODE_NORMAL; } private ProviderInfo getProviderInfoLocked(String authority, int userHandle) { Loading services/core/java/com/android/server/am/BroadcastQueue.java +25 −14 Original line number Diff line number Diff line Loading @@ -562,8 +562,9 @@ public final class BroadcastQueue { skip = true; } if (!skip) { if (!mService.checkAllowBackgroundLocked(filter.receiverList.uid, filter.packageName, -1)) { final int allowed = mService.checkAllowBackgroundLocked(filter.receiverList.uid, filter.packageName, -1); if (allowed == ActivityManager.APP_START_MODE_DISABLED) { Slog.w(TAG, "Background execution not allowed: receiving " + r.intent + " to " + filter.receiverList.app Loading Loading @@ -1012,15 +1013,6 @@ public final class BroadcastQueue { + " (uid " + r.callingUid + ")"); skip = true; } if (!skip) { if (!mService.checkAllowBackgroundLocked(info.activityInfo.applicationInfo.uid, info.activityInfo.packageName, -1)) { Slog.w(TAG, "Background execution not allowed: receiving " + r.intent + " to " + component.flattenToShortString()); skip = true; } } if (!skip) { skip = !mService.mIntentFirewall.checkBroadcast(r.intent, r.callingUid, r.callingPid, r.resolvedType, info.activityInfo.applicationInfo.uid); Loading Loading @@ -1083,6 +1075,28 @@ public final class BroadcastQueue { } } String targetProcess = info.activityInfo.processName; ProcessRecord app = mService.getProcessRecordLocked(targetProcess, info.activityInfo.applicationInfo.uid, false); if (!skip) { final int allowed = mService.checkAllowBackgroundLocked( info.activityInfo.applicationInfo.uid, info.activityInfo.packageName, -1); if (allowed != ActivityManager.APP_START_MODE_NORMAL) { // We won't allow this receiver to be launched if the app has been // completely disabled from launches, or it is delayed and the broadcast // was not explicitly sent to it and this would result in a new process // for it being created. if (allowed == ActivityManager.APP_START_MODE_DISABLED || (r.intent.getComponent() == null && r.intent.getPackage() == null && app == null)) { Slog.w(TAG, "Background execution not allowed: receiving " + r.intent + " to " + component.flattenToShortString()); skip = true; } } } if (skip) { if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST, "Skipping delivery of ordered [" + mQueueName + "] " Loading @@ -1095,7 +1109,6 @@ public final class BroadcastQueue { } r.state = BroadcastRecord.APP_RECEIVE; String targetProcess = info.activityInfo.processName; r.curComponent = component; final int receiverUid = info.activityInfo.applicationInfo.uid; // If it's a singleton, it needs to be the same app or a special app Loading Loading @@ -1126,8 +1139,6 @@ public final class BroadcastQueue { } // Is this receiver's application already running? ProcessRecord app = mService.getProcessRecordLocked(targetProcess, info.activityInfo.applicationInfo.uid, false); if (app != null && app.thread != null) { try { app.addPackage(info.activityInfo.packageName, Loading Loading
core/java/com/android/internal/logging/MetricsConstants.java +1 −0 Original line number Diff line number Diff line Loading @@ -281,6 +281,7 @@ public interface MetricsConstants { public static final int ACTION_DOUBLE_TAP_POWER_CAMERA_GESTURE = 255; public static final int ACTION_WIGGLE_CAMERA_GESTURE = 256; public static final int QS_WORKMODE = 257; public static final int BACKGROUND_CHECK_SUMMARY = 258; // These constants must match those in the analytic pipeline, do not edit. // Add temporary values to the top of MetricsLogger instead. Loading
services/core/java/com/android/server/am/ActiveServices.java +3 −2 Original line number Diff line number Diff line Loading @@ -1240,8 +1240,9 @@ public final class ActiveServices { try { // Before going further -- if this app is not allowed to run in the // background, then at this point we aren't going to let it period. if (!mAm.checkAllowBackgroundLocked(sInfo.applicationInfo.uid, sInfo.packageName, callingPid)) { final int allowed = mAm.checkAllowBackgroundLocked( sInfo.applicationInfo.uid, sInfo.packageName, callingPid); if (allowed != ActivityManager.APP_START_MODE_NORMAL) { Slog.w(TAG, "Background execution not allowed: service " + r.intent + " to " + name.flattenToShortString() + " from pid=" + callingPid + " uid=" + callingUid Loading
services/core/java/com/android/server/am/ActivityManagerService.java +5 −7 Original line number Diff line number Diff line Loading @@ -7463,13 +7463,11 @@ public final class ActivityManagerService extends ActivityManagerNative public int getAppStartMode(int uid, String packageName) { synchronized (this) { boolean bg = checkAllowBackgroundLocked(uid, packageName, -1); return bg ? ActivityManager.APP_START_MODE_NORMAL : ActivityManager.APP_START_MODE_DISABLED; return checkAllowBackgroundLocked(uid, packageName, -1); } } boolean checkAllowBackgroundLocked(int uid, String packageName, int callingPid) { int checkAllowBackgroundLocked(int uid, String packageName, int callingPid) { UidRecord uidRec = mActiveUids.get(uid); if (uidRec == null || uidRec.idle) { if (callingPid >= 0) { Loading @@ -7480,15 +7478,15 @@ public final class ActivityManagerService extends ActivityManagerNative if (proc != null && proc.curProcState < ActivityManager.PROCESS_STATE_RECEIVER) { // Whoever is instigating this is in the foreground, so we will allow it // to go through. return true; return ActivityManager.APP_START_MODE_NORMAL; } } if (mAppOpsService.noteOperation(AppOpsManager.OP_RUN_IN_BACKGROUND, uid, packageName) != AppOpsManager.MODE_ALLOWED) { return false; return ActivityManager.APP_START_MODE_DELAYED; } } return true; return ActivityManager.APP_START_MODE_NORMAL; } private ProviderInfo getProviderInfoLocked(String authority, int userHandle) { Loading
services/core/java/com/android/server/am/BroadcastQueue.java +25 −14 Original line number Diff line number Diff line Loading @@ -562,8 +562,9 @@ public final class BroadcastQueue { skip = true; } if (!skip) { if (!mService.checkAllowBackgroundLocked(filter.receiverList.uid, filter.packageName, -1)) { final int allowed = mService.checkAllowBackgroundLocked(filter.receiverList.uid, filter.packageName, -1); if (allowed == ActivityManager.APP_START_MODE_DISABLED) { Slog.w(TAG, "Background execution not allowed: receiving " + r.intent + " to " + filter.receiverList.app Loading Loading @@ -1012,15 +1013,6 @@ public final class BroadcastQueue { + " (uid " + r.callingUid + ")"); skip = true; } if (!skip) { if (!mService.checkAllowBackgroundLocked(info.activityInfo.applicationInfo.uid, info.activityInfo.packageName, -1)) { Slog.w(TAG, "Background execution not allowed: receiving " + r.intent + " to " + component.flattenToShortString()); skip = true; } } if (!skip) { skip = !mService.mIntentFirewall.checkBroadcast(r.intent, r.callingUid, r.callingPid, r.resolvedType, info.activityInfo.applicationInfo.uid); Loading Loading @@ -1083,6 +1075,28 @@ public final class BroadcastQueue { } } String targetProcess = info.activityInfo.processName; ProcessRecord app = mService.getProcessRecordLocked(targetProcess, info.activityInfo.applicationInfo.uid, false); if (!skip) { final int allowed = mService.checkAllowBackgroundLocked( info.activityInfo.applicationInfo.uid, info.activityInfo.packageName, -1); if (allowed != ActivityManager.APP_START_MODE_NORMAL) { // We won't allow this receiver to be launched if the app has been // completely disabled from launches, or it is delayed and the broadcast // was not explicitly sent to it and this would result in a new process // for it being created. if (allowed == ActivityManager.APP_START_MODE_DISABLED || (r.intent.getComponent() == null && r.intent.getPackage() == null && app == null)) { Slog.w(TAG, "Background execution not allowed: receiving " + r.intent + " to " + component.flattenToShortString()); skip = true; } } } if (skip) { if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST, "Skipping delivery of ordered [" + mQueueName + "] " Loading @@ -1095,7 +1109,6 @@ public final class BroadcastQueue { } r.state = BroadcastRecord.APP_RECEIVE; String targetProcess = info.activityInfo.processName; r.curComponent = component; final int receiverUid = info.activityInfo.applicationInfo.uid; // If it's a singleton, it needs to be the same app or a special app Loading Loading @@ -1126,8 +1139,6 @@ public final class BroadcastQueue { } // Is this receiver's application already running? ProcessRecord app = mService.getProcessRecordLocked(targetProcess, info.activityInfo.applicationInfo.uid, false); if (app != null && app.thread != null) { try { app.addPackage(info.activityInfo.packageName, Loading