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

Commit 0788595e authored by Fabrice Di Meglio's avatar Fabrice Di Meglio
Browse files

Add IntentFilter auto verification - part 3

- add private API PackageManager.getAllIntentFilters(String)
for getting all IntentFilters from a given package
- update IntentFilterVerificationInfo to use an ArrayList<String>
for domains instead of a String[]
- if you make an App a default domain handler then make the
others as non default
- create an IntentVerificationInfo even if the App IntentFilters
do not need to be verified. This would be done only if the App
has some domain URLs defined and would allow to make it the
default handler for a domain
- a few code optimizations here and there

Change-Id: I4535372a0bb1a2c8e662e1485be8ca700003e9b3
parent 37c905e6
Loading
Loading
Loading
Loading
+1 −21
Original line number Diff line number Diff line
@@ -8857,25 +8857,6 @@ package android.content.pm {
    field public java.lang.String targetPackage;
  }
  public final class IntentFilterVerificationInfo implements android.os.Parcelable {
    ctor public IntentFilterVerificationInfo();
    ctor public IntentFilterVerificationInfo(java.lang.String, java.lang.String[]);
    ctor public IntentFilterVerificationInfo(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
    ctor public IntentFilterVerificationInfo(android.os.Parcel);
    method public int describeContents();
    method public java.lang.String[] getDomains();
    method public java.lang.String getDomainsString();
    method public java.lang.String getPackageName();
    method public int getStatus();
    method public java.lang.String getStatusString();
    method public static java.lang.String getStatusStringFromValue(int);
    method public void readFromXml(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
    method public void setStatus(int);
    method public void writeToParcel(android.os.Parcel, int);
    method public void writeToXml(org.xmlpull.v1.XmlSerializer) throws java.io.IOException;
    field public static final android.os.Parcelable.Creator<android.content.pm.IntentFilterVerificationInfo> CREATOR;
  }
  public class LabeledIntent extends android.content.Intent {
    ctor public LabeledIntent(android.content.Intent, java.lang.String, int, int);
    ctor public LabeledIntent(android.content.Intent, java.lang.String, java.lang.CharSequence, int);
@@ -9104,7 +9085,6 @@ package android.content.pm {
    method public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
    method public abstract java.lang.String getInstallerPackageName(java.lang.String);
    method public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String);
    method public abstract android.content.Intent getLaunchIntentForPackage(java.lang.String);
    method public abstract android.content.Intent getLeanbackLaunchIntentForPackage(java.lang.String);
    method public abstract java.lang.String getNameForUid(int);
@@ -30655,6 +30635,7 @@ package android.test.mock {
    method public android.content.pm.ActivityInfo getActivityInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
    method public android.graphics.drawable.Drawable getActivityLogo(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
    method public android.graphics.drawable.Drawable getActivityLogo(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
    method public java.util.List<android.content.IntentFilter> getAllIntentFilters(java.lang.String);
    method public java.util.List<android.content.pm.PermissionGroupInfo> getAllPermissionGroups(int);
    method public android.graphics.drawable.Drawable getApplicationBanner(android.content.pm.ApplicationInfo);
    method public android.graphics.drawable.Drawable getApplicationBanner(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
@@ -30672,7 +30653,6 @@ package android.test.mock {
    method public java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
    method public java.lang.String getInstallerPackageName(java.lang.String);
    method public android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
    method public java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String);
    method public android.content.Intent getLaunchIntentForPackage(java.lang.String);
    method public android.content.Intent getLeanbackLaunchIntentForPackage(java.lang.String);
    method public java.lang.String getNameForUid(int);
+1 −21
Original line number Diff line number Diff line
@@ -9101,25 +9101,6 @@ package android.content.pm {
    field public java.lang.String targetPackage;
  }
  public final class IntentFilterVerificationInfo implements android.os.Parcelable {
    ctor public IntentFilterVerificationInfo();
    ctor public IntentFilterVerificationInfo(java.lang.String, java.lang.String[]);
    ctor public IntentFilterVerificationInfo(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
    ctor public IntentFilterVerificationInfo(android.os.Parcel);
    method public int describeContents();
    method public java.lang.String[] getDomains();
    method public java.lang.String getDomainsString();
    method public java.lang.String getPackageName();
    method public int getStatus();
    method public java.lang.String getStatusString();
    method public static java.lang.String getStatusStringFromValue(int);
    method public void readFromXml(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
    method public void setStatus(int);
    method public void writeToParcel(android.os.Parcel, int);
    method public void writeToXml(org.xmlpull.v1.XmlSerializer) throws java.io.IOException;
    field public static final android.os.Parcelable.Creator<android.content.pm.IntentFilterVerificationInfo> CREATOR;
  }
  public class LabeledIntent extends android.content.Intent {
    ctor public LabeledIntent(android.content.Intent, java.lang.String, int, int);
    ctor public LabeledIntent(android.content.Intent, java.lang.String, java.lang.CharSequence, int);
@@ -9354,7 +9335,6 @@ package android.content.pm {
    method public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
    method public abstract java.lang.String getInstallerPackageName(java.lang.String);
    method public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String);
    method public abstract android.content.Intent getLaunchIntentForPackage(java.lang.String);
    method public abstract android.content.Intent getLeanbackLaunchIntentForPackage(java.lang.String);
    method public abstract java.lang.String getNameForUid(int);
@@ -33202,6 +33182,7 @@ package android.test.mock {
    method public android.content.pm.ActivityInfo getActivityInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
    method public android.graphics.drawable.Drawable getActivityLogo(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
    method public android.graphics.drawable.Drawable getActivityLogo(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
    method public java.util.List<android.content.IntentFilter> getAllIntentFilters(java.lang.String);
    method public java.util.List<android.content.pm.PermissionGroupInfo> getAllPermissionGroups(int);
    method public android.graphics.drawable.Drawable getApplicationBanner(android.content.pm.ApplicationInfo);
    method public android.graphics.drawable.Drawable getApplicationBanner(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
@@ -33219,7 +33200,6 @@ package android.test.mock {
    method public java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
    method public java.lang.String getInstallerPackageName(java.lang.String);
    method public android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
    method public java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String);
    method public android.content.Intent getLaunchIntentForPackage(java.lang.String);
    method public android.content.Intent getLeanbackLaunchIntentForPackage(java.lang.String);
    method public java.lang.String getNameForUid(int);
+10 −0
Original line number Diff line number Diff line
@@ -1348,6 +1348,16 @@ final class ApplicationPackageManager extends PackageManager {
        }
    }

    @Override
    public List<IntentFilter> getAllIntentFilters(String packageName) {
        try {
            return mPM.getAllIntentFilters(packageName);
        } catch (RemoteException e) {
            // Should never happen!
            return null;
        }
    }

    @Override
    public void setInstallerPackageName(String targetPackage,
            String installerPackageName) {
+1 −0
Original line number Diff line number Diff line
@@ -448,6 +448,7 @@ interface IPackageManager {
    int getIntentVerificationStatus(String packageName, int userId);
    boolean updateIntentVerificationStatus(String packageName, int status, int userId);
    List<IntentFilterVerificationInfo> getIntentFilterVerifications(String packageName);
    List<IntentFilter> getAllIntentFilters(String packageName);

    VerifierDeviceIdentity getVerifierDeviceIdentity();

+14 −13
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATIO
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
import com.android.internal.util.XmlUtils;
import org.xmlpull.v1.XmlPullParser;
@@ -47,17 +48,17 @@ public final class IntentFilterVerificationInfo implements Parcelable {
    private static final String ATTR_PACKAGE_NAME = "packageName";
    private static final String ATTR_STATUS = "status";

    private String[] mDomains;
    private ArrayList<String> mDomains;
    private String mPackageName;
    private int mMainStatus;

    public IntentFilterVerificationInfo() {
        mPackageName = null;
        mDomains = new String[0];
        mDomains = new ArrayList<>();
        mMainStatus = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
    }

    public IntentFilterVerificationInfo(String packageName, String[] domains) {
    public IntentFilterVerificationInfo(String packageName, ArrayList<String> domains) {
        mPackageName = packageName;
        mDomains = domains;
        mMainStatus = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
@@ -72,10 +73,14 @@ public final class IntentFilterVerificationInfo implements Parcelable {
        readFromParcel(source);
    }

    public String[] getDomains() {
    public ArrayList<String> getDomains() {
        return mDomains;
    }

    public ArraySet<String> getDomainsSet() {
        return new ArraySet<>(mDomains);
    }

    public String getPackageName() {
        return mPackageName;
    }
@@ -140,7 +145,7 @@ public final class IntentFilterVerificationInfo implements Parcelable {
        }
        mMainStatus = status;

        ArrayList<String> list = new ArrayList<>();
        mDomains = new ArrayList<>();
        int outerDepth = parser.getDepth();
        int type;
        while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
@@ -155,18 +160,13 @@ public final class IntentFilterVerificationInfo implements Parcelable {
            if (tagName.equals(TAG_DOMAIN)) {
                String name = getStringFromXml(parser, ATTR_DOMAIN_NAME, null);
                if (!TextUtils.isEmpty(name)) {
                    if (list == null) {
                        list = new ArrayList<>();
                    }
                    list.add(name);
                    mDomains.add(name);
                }
            } else {
                Log.w(TAG, "Unknown tag parsing IntentFilter: " + tagName);
            }
            XmlUtils.skipCurrentTag(parser);
        }

        mDomains = list.toArray(new String[list.size()]);
    }

    public void writeToXml(XmlSerializer serializer) throws IOException {
@@ -201,14 +201,15 @@ public final class IntentFilterVerificationInfo implements Parcelable {
    private void readFromParcel(Parcel source) {
        mPackageName = source.readString();
        mMainStatus = source.readInt();
        mDomains = source.readStringArray();
        mDomains = new ArrayList<>();
        source.readStringList(mDomains);
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(mPackageName);
        dest.writeInt(mMainStatus);
        dest.writeStringArray(mDomains);
        dest.writeStringList(mDomains);
    }

    public static final Creator<IntentFilterVerificationInfo> CREATOR =
Loading