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
This commit is contained in:
Louis Chang
2019-09-02 14:25:15 +08:00
parent e76e96bd1f
commit 9c5a3300a5

View File

@@ -10004,13 +10004,25 @@ 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;
return true;
}
/**
* 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().
*