diff options
Diffstat (limited to 'services/java/com/android/server/am')
| -rw-r--r-- | services/java/com/android/server/am/ActivityManagerService.java | 2 | ||||
| -rw-r--r-- | services/java/com/android/server/am/BroadcastFilter.java | 16 |
2 files changed, 16 insertions, 2 deletions
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 618f02c..d7f9eb4 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -11522,7 +11522,7 @@ public final class ActivityManagerService extends ActivityManagerNative + " was previously registered for user " + rl.userId); } BroadcastFilter bf = new BroadcastFilter(filter, rl, callerPackage, - permission, callingUid, userId); + permission, callingUid, userId, (callerApp.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0); rl.add(bf); if (!bf.debugCheck()) { Slog.w(TAG, "==> For Dynamic broadast"); diff --git a/services/java/com/android/server/am/BroadcastFilter.java b/services/java/com/android/server/am/BroadcastFilter.java index c631b6e..1d983c7 100644 --- a/services/java/com/android/server/am/BroadcastFilter.java +++ b/services/java/com/android/server/am/BroadcastFilter.java @@ -29,15 +29,17 @@ class BroadcastFilter extends IntentFilter { final String requiredPermission; final int owningUid; final int owningUserId; + final boolean isSystem; BroadcastFilter(IntentFilter _filter, ReceiverList _receiverList, - String _packageName, String _requiredPermission, int _owningUid, int _userId) { + String _packageName, String _requiredPermission, int _owningUid, int _userId, boolean _isSystem) { super(_filter); receiverList = _receiverList; packageName = _packageName; requiredPermission = _requiredPermission; owningUid = _owningUid; owningUserId = _userId; + isSystem = _isSystem; } public void dump(PrintWriter pw, String prefix) { @@ -71,4 +73,16 @@ class BroadcastFilter extends IntentFilter { sb.append('}'); return sb.toString(); } + + @Override + public int onCompareTie(IntentFilter other) { + // in case of a tie when sorting ordered broadcasts, + // favor system apps. + BroadcastFilter bf = (BroadcastFilter)other; + if (isSystem) + return -1; + if (bf.isSystem) + return 1; + return 0; + } } |
