From 3a1a0bbc3208d8967ed6e462c39d2527028339dc Mon Sep 17 00:00:00 2001 From: Nicolas Prevot Date: Wed, 22 Oct 2014 16:24:00 +0100 Subject: [PATCH] Add a cross-profile intent filter only if it wasn't previously added. BUG: 17996284 Change-Id: I3d087767983928dfb13af9aedb37d29c9940ba36 --- .../server/pm/CrossProfileIntentFilter.java | 7 +++++++ .../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 203d99025968d..6d18531896ecb 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 f9a85dfd49298..c75fb9a7a52b8 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 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); } }