summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nicolas Prevot <nprevot@google.com> 2014-11-06 09:42:44 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2014-11-06 09:42:47 +0000
commitb9744c1c1f5e8cc936da7f1832665f77ad5bb18f (patch)
tree0a3af83f67b3d37d51c8a99b9b3ee934c27df69e
parent03611473bc1d13f8e55ac92e37a9716c2fd8e412 (diff)
parent3a1a0bbc3208d8967ed6e462c39d2527028339dc (diff)
Merge "Add a cross-profile intent filter only if it wasn't previously added." into lmp-mr1-dev
-rw-r--r--services/core/java/com/android/server/pm/CrossProfileIntentFilter.java7
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java16
2 files changed, 21 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/CrossProfileIntentFilter.java b/services/core/java/com/android/server/pm/CrossProfileIntentFilter.java
index 203d99025968..6d18531896ec 100644
--- a/services/core/java/com/android/server/pm/CrossProfileIntentFilter.java
+++ b/services/core/java/com/android/server/pm/CrossProfileIntentFilter.java
@@ -141,4 +141,11 @@ class CrossProfileIntentFilter extends IntentFilter {
return "CrossProfileIntentFilter{0x" + Integer.toHexString(System.identityHashCode(this))
+ " " + Integer.toString(mTargetUserId) + "}";
}
+
+ boolean equalsIgnoreFilter(CrossProfileIntentFilter other) {
+ return mTargetUserId == other.mTargetUserId
+ && mOwnerUserId == other.mOwnerUserId
+ && mOwnerPackage.equals(other.mOwnerPackage)
+ && mFlags == other.mFlags;
+ }
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index f9a85dfd4929..c75fb9a7a52b 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -11844,9 +11844,21 @@ public class PackageManagerService extends IPackageManager.Stub {
return;
}
synchronized (mPackages) {
- CrossProfileIntentFilter filter = new CrossProfileIntentFilter(intentFilter,
+ CrossProfileIntentFilter newFilter = new CrossProfileIntentFilter(intentFilter,
ownerPackage, UserHandle.getUserId(callingUid), targetUserId, flags);
- mSettings.editCrossProfileIntentResolverLPw(sourceUserId).addFilter(filter);
+ CrossProfileIntentResolver resolver =
+ mSettings.editCrossProfileIntentResolverLPw(sourceUserId);
+ ArrayList<CrossProfileIntentFilter> existing = resolver.findFilters(intentFilter);
+ // We have all those whose filter is equal. Now checking if the rest is equal as well.
+ if (existing != null) {
+ int size = existing.size();
+ for (int i = 0; i < size; i++) {
+ if (newFilter.equalsIgnoreFilter(existing.get(i))) {
+ return;
+ }
+ }
+ }
+ resolver.addFilter(newFilter);
scheduleWritePackageRestrictionsLocked(sourceUserId);
}
}