Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c5a3300 authored by Louis Chang's avatar Louis Chang
Browse files

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
parent e76e96bd
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -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().
     *