diff options
author | Fabrice Di Meglio <fdimeglio@google.com> | 2015-04-06 19:41:28 -0700 |
---|---|---|
committer | Fabrice Di Meglio <fdimeglio@google.com> | 2015-04-07 17:13:32 -0700 |
commit | 0788595e0c9bc5e8c1907c63db595010006ef5b4 (patch) | |
tree | 1f44f98341a3ed4c1e4f81bf597f67d25edbbc88 /core/java/android/content | |
parent | 37c905e64655d5bfc5ba06fa0bbee10c1fdc6010 (diff) | |
download | frameworks_base-0788595e0c9bc5e8c1907c63db595010006ef5b4.zip frameworks_base-0788595e0c9bc5e8c1907c63db595010006ef5b4.tar.gz frameworks_base-0788595e0c9bc5e8c1907c63db595010006ef5b4.tar.bz2 |
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
Diffstat (limited to 'core/java/android/content')
-rw-r--r-- | core/java/android/content/pm/IPackageManager.aidl | 1 | ||||
-rw-r--r-- | core/java/android/content/pm/IntentFilterVerificationInfo.java | 27 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageManager.java | 20 |
3 files changed, 33 insertions, 15 deletions
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index eed0df5..55c990f 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -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(); diff --git a/core/java/android/content/pm/IntentFilterVerificationInfo.java b/core/java/android/content/pm/IntentFilterVerificationInfo.java index 60cb4a8..28cbaa8 100644 --- a/core/java/android/content/pm/IntentFilterVerificationInfo.java +++ b/core/java/android/content/pm/IntentFilterVerificationInfo.java @@ -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 = diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 4c99d09..303b709 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -3635,13 +3635,29 @@ public abstract class PackageManager { * @param packageName the package name. When this parameter is set to a non null value, * the results will be filtered by the package name provided. * Otherwise, there will be no filtering and it will return a list - * corresponding for all packages for the provided userId. - * @return a list of IntentFilterVerificationInfo for a specific package and User. + * corresponding for all packages + * + * @return a list of IntentFilterVerificationInfo for a specific package. + * + * @hide */ public abstract List<IntentFilterVerificationInfo> getIntentFilterVerifications( String packageName); /** + * Get the list of IntentFilter for a specific package. + * + * @param packageName the package name. This parameter is set to a non null value, + * the list will contain all the IntentFilter for that package. + * Otherwise, the list will be empty. + * + * @return a list of IntentFilter for a specific package. + * + * @hide + */ + public abstract List<IntentFilter> getAllIntentFilters(String packageName); + + /** * Change the installer associated with a given package. There are limitations * on how the installer package can be changed; in particular: * <ul> |