diff options
-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); } } |