summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/IntentResolver.java2
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java2
-rw-r--r--services/java/com/android/server/am/BroadcastFilter.java16
3 files changed, 17 insertions, 3 deletions
diff --git a/services/java/com/android/server/IntentResolver.java b/services/java/com/android/server/IntentResolver.java
index 9b19008..8f703f0 100644
--- a/services/java/com/android/server/IntentResolver.java
+++ b/services/java/com/android/server/IntentResolver.java
@@ -609,7 +609,7 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> {
public int compare(Object o1, Object o2) {
final int q1 = ((IntentFilter) o1).getPriority();
final int q2 = ((IntentFilter) o2).getPriority();
- return (q1 > q2) ? -1 : ((q1 < q2) ? 1 : 0);
+ return (q1 > q2) ? -1 : ((q1 < q2) ? 1 : ((IntentFilter) o1).onCompareTie((IntentFilter) o2));
}
};
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;
+ }
}