Merge "Add a cross-profile intent filter only if it wasn\'t previously added." into lmp-mr1-dev

automerge: b9744c1

* commit 'b9744c1c1f5e8cc936da7f1832665f77ad5bb18f':
  Add a cross-profile intent filter only if it wasn't previously added.
This commit is contained in:
Nicolas Prevot
2014-11-06 10:22:13 +00:00
committed by android-build-merger
2 changed files with 21 additions and 2 deletions

View File

@@ -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;
}
}

View File

@@ -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);
}
}