diff options
author | 2014-11-06 09:42:44 +0000 | |
---|---|---|
committer | 2014-11-06 09:42:47 +0000 | |
commit | b9744c1c1f5e8cc936da7f1832665f77ad5bb18f (patch) | |
tree | 0a3af83f67b3d37d51c8a99b9b3ee934c27df69e | |
parent | 03611473bc1d13f8e55ac92e37a9716c2fd8e412 (diff) | |
parent | 3a1a0bbc3208d8967ed6e462c39d2527028339dc (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.java | 7 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 16 |
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); } } |