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

Commit b3bd1acb authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Revert "Revert "Restore preferred activity filter if it not inside""" am: 406e3a06

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1504108

Change-Id: I9bd9ca1917bf093ddbdcfb92fb6453878aa8269a
parents 9a496e9e 406e3a06
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -254,6 +254,37 @@ public class PreferredComponent {
        return numMatch == NS;
    }

    public boolean sameSet(PreferredComponent pc) {
        if (mSetPackages == null || pc == null || pc.mSetPackages == null
                || !sameComponent(pc.mComponent)) {
            return false;
        }
        final int otherPackageCount = pc.mSetPackages.length;
        final int packageCount = mSetPackages.length;
        if (otherPackageCount != packageCount) {
            return false;
        }
        for (int i = 0; i < packageCount; i++) {
            if (!mSetPackages[i].equals(pc.mSetPackages[i])
                    || !mSetClasses[i].equals(pc.mSetClasses[i])) {
                return false;
            }
        }
        return true;
    }

    /** Returns true if the preferred component represents the provided ComponentName. */
    private boolean sameComponent(ComponentName comp) {
        if (mComponent == null || comp == null) {
            return false;
        }
        if (mComponent.getPackageName().equals(comp.getPackageName())
                && mComponent.getClassName().equals(comp.getClassName())) {
            return true;
        }
        return false;
    }

    public boolean isSuperset(List<ResolveInfo> query, boolean excludeSetupWizardPackage) {
        if (mSetPackages == null) {
            return query == null;
+21 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.IntentFilter;
import java.io.PrintWriter;

import com.android.server.IntentResolver;
import java.util.ArrayList;

public class PreferredIntentResolver
        extends IntentResolver<PreferredActivity, PreferredActivity> {
@@ -45,4 +46,24 @@ public class PreferredIntentResolver
    protected IntentFilter getIntentFilter(@NonNull PreferredActivity input) {
        return input;
    }

    public boolean shouldAddPreferredActivity(PreferredActivity pa) {
        ArrayList<PreferredActivity> pal = findFilters(pa);
        if (pal == null || pal.isEmpty()) {
            return true;
        }
        if (!pa.mPref.mAlways) {
            return false;
        }
        final int activityCount = pal.size();
        for (int i = 0; i < activityCount; i++) {
            PreferredActivity cur = pal.get(i);
            if (cur.mPref.mAlways
                    && cur.mPref.mMatch == (pa.mPref.mMatch & IntentFilter.MATCH_CATEGORY_MASK)
                    && cur.mPref.sameSet(pa.mPref)) {
                return false;
            }
        }
        return true;
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -1410,8 +1410,7 @@ public final class Settings {
                PreferredActivity pa = new PreferredActivity(parser);
                if (pa.mPref.getParseError() == null) {
                    final PreferredIntentResolver resolver = editPreferredActivitiesLPw(userId);
                    ArrayList<PreferredActivity> pal = resolver.findFilters(pa);
                    if (pal == null || pal.size() == 0 || pa.mPref.mAlways) {
                    if (resolver.shouldAddPreferredActivity(pa)) {
                        resolver.addFilter(pa);
                    }
                } else {