diff options
| author | Louis Chang <louischang@google.com> | 2019-09-02 14:25:15 +0800 |
|---|---|---|
| committer | Louis Chang <louischang@google.com> | 2019-09-24 17:41:28 +0800 |
| commit | 9c5a3300a5c02d95f79ea71bc4b7383879fc9b73 (patch) | |
| tree | 5a238d5367df57bd51ee9b969dcce040b7599e8b /core/java/android | |
| parent | e76e96bd1f729c4accdd59230c64a00c23927e99 (diff) | |
Do not check package if package-equivalent components have set
Two intents that can be resolved to the same component were
evaluated as different intent filters, because one had the package
name set while the other one did not(null).
Skip performing package check if both two intents have components which
equals to its set package.
Bug: 64108432
Test: manual
Change-Id: I8163cbb6b56366ebbecaede7fa04ab3eab7cfe9f
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/content/Intent.java | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 3418b7be42d6..72204daf01ef 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -10004,7 +10004,10 @@ public class Intent implements Parcelable, Cloneable { if (!Objects.equals(this.mData, other.mData)) return false; if (!Objects.equals(this.mType, other.mType)) return false; if (!Objects.equals(this.mIdentifier, other.mIdentifier)) return false; - if (!Objects.equals(this.mPackage, other.mPackage)) return false; + if (!(this.hasPackageEquivalentComponent() && other.hasPackageEquivalentComponent()) + && !Objects.equals(this.mPackage, other.mPackage)) { + return false; + } if (!Objects.equals(this.mComponent, other.mComponent)) return false; if (!Objects.equals(this.mCategories, other.mCategories)) return false; @@ -10012,6 +10015,15 @@ public class Intent implements Parcelable, Cloneable { } /** + * Return {@code true} if the component name is not null and is in the same package that this + * intent limited to. otherwise return {@code false}. + */ + private boolean hasPackageEquivalentComponent() { + return mComponent != null + && (mPackage == null || mPackage.equals(mComponent.getPackageName())); + } + + /** * Generate hash code that matches semantics of filterEquals(). * * @return Returns the hash value of the action, data, type, class, and |
