11c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio/*
21c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * Copyright (C) 2015 The Android Open Source Project
31c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio *
41c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * Licensed under the Apache License, Version 2.0 (the "License");
51c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * you may not use this file except in compliance with the License.
61c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * You may obtain a copy of the License at
71c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio *
81c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio *      http://www.apache.org/licenses/LICENSE-2.0
91c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio *
101c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * Unless required by applicable law or agreed to in writing, software
111c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * distributed under the License is distributed on an "AS IS" BASIS,
121c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * See the License for the specific language governing permissions and
141c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * limitations under the License.
151c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio */
161c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
171c1b47125da018b44240739db75f8898e064a948Fabrice Di Megliopackage android.content.pm;
181c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
191c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
201c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK;
211c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS;
2256f0ff3c48c88b969d9bf5e62eb1ee590e03e461Christopher Tateimport static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK;
231c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER;
241c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
256fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacherimport android.annotation.SystemApi;
261c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport android.os.Parcel;
271c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport android.os.Parcelable;
281c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport android.text.TextUtils;
290788595e0c9bc5e8c1907c63db595010006ef5b4Fabrice Di Meglioimport android.util.ArraySet;
301c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport android.util.Log;
31f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate
321c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport com.android.internal.util.XmlUtils;
33f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate
341c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport org.xmlpull.v1.XmlPullParser;
351c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport org.xmlpull.v1.XmlPullParserException;
361c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport org.xmlpull.v1.XmlSerializer;
371c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
381c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport java.io.IOException;
391c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport java.util.ArrayList;
406fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacherimport java.util.Set;
411c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
421c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio/**
431c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * The {@link com.android.server.pm.PackageManagerService} maintains some
447d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio * {@link IntentFilterVerificationInfo}s for each domain / package name.
451c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio *
461c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio * @hide
471c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio */
486fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher@SystemApi
491c1b47125da018b44240739db75f8898e064a948Fabrice Di Megliopublic final class IntentFilterVerificationInfo implements Parcelable {
501c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    private static final String TAG = IntentFilterVerificationInfo.class.getName();
511c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
521c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    private static final String TAG_DOMAIN = "domain";
531c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    private static final String ATTR_DOMAIN_NAME = "name";
541c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    private static final String ATTR_PACKAGE_NAME = "packageName";
551c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    private static final String ATTR_STATUS = "status";
561c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
571de3f0dcafb0c5ceb3d9bec96a5c630bb8d4a515Fabrice Di Meglio    private ArraySet<String> mDomains = new ArraySet<>();
581c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    private String mPackageName;
591c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    private int mMainStatus;
601c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
616fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
621c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public IntentFilterVerificationInfo() {
631c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        mPackageName = null;
641c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        mMainStatus = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
651c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
661c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
676fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
68788c8423d19972389b82a23dec297eb27d819c86Todd Kennedy    public IntentFilterVerificationInfo(String packageName, ArraySet<String> domains) {
691c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        mPackageName = packageName;
70788c8423d19972389b82a23dec297eb27d819c86Todd Kennedy        mDomains = domains;
711c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        mMainStatus = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
721c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
731c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
746fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
751c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public IntentFilterVerificationInfo(XmlPullParser parser)
761c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            throws IOException, XmlPullParserException {
771c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        readFromXml(parser);
781c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
791c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
806fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
811c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public IntentFilterVerificationInfo(Parcel source) {
821c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        readFromParcel(source);
831c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
841c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
851c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public String getPackageName() {
861c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        return mPackageName;
871c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
881c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
891c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public int getStatus() {
901c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        return mMainStatus;
911c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
921c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
936fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
941c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public void setStatus(int s) {
951c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        if (s >= INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED &&
961c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                s <= INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER) {
971c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            mMainStatus = s;
981c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        } else {
991c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            Log.w(TAG, "Trying to set a non supported status: " + s);
1001c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        }
1011c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
1021c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
1036fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    public Set<String> getDomains() {
1041de3f0dcafb0c5ceb3d9bec96a5c630bb8d4a515Fabrice Di Meglio        return mDomains;
1051de3f0dcafb0c5ceb3d9bec96a5c630bb8d4a515Fabrice Di Meglio    }
1061de3f0dcafb0c5ceb3d9bec96a5c630bb8d4a515Fabrice Di Meglio
1076fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
108788c8423d19972389b82a23dec297eb27d819c86Todd Kennedy    public void setDomains(ArraySet<String> list) {
109788c8423d19972389b82a23dec297eb27d819c86Todd Kennedy        mDomains = list;
1101de3f0dcafb0c5ceb3d9bec96a5c630bb8d4a515Fabrice Di Meglio    }
1111de3f0dcafb0c5ceb3d9bec96a5c630bb8d4a515Fabrice Di Meglio
1126fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
1131c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public String getDomainsString() {
1141c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        StringBuilder sb = new StringBuilder();
1151c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        for (String str : mDomains) {
1161c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            if (sb.length() > 0) {
1171c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                sb.append(" ");
1181c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            }
1191c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            sb.append(str);
1201c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        }
1211c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        return sb.toString();
1221c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
1231c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
1241c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    String getStringFromXml(XmlPullParser parser, String attribute, String defaultValue) {
1251c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        String value = parser.getAttributeValue(null, attribute);
1261c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        if (value == null) {
1271c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            String msg = "Missing element under " + TAG +": " + attribute + " at " +
1281c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                    parser.getPositionDescription();
1291c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            Log.w(TAG, msg);
1301c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            return defaultValue;
1311c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        } else {
1321c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            return value;
1331c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        }
1341c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
1351c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
1361c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    int getIntFromXml(XmlPullParser parser, String attribute, int defaultValue) {
1371c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        String value = parser.getAttributeValue(null, attribute);
1381c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        if (TextUtils.isEmpty(value)) {
1391c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            String msg = "Missing element under " + TAG +": " + attribute + " at " +
1401c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                    parser.getPositionDescription();
1411c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            Log.w(TAG, msg);
1421c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            return defaultValue;
1431c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        } else {
1441c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            return Integer.parseInt(value);
1451c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        }
1461c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
1471c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
1486fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
1491c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public void readFromXml(XmlPullParser parser) throws XmlPullParserException,
1501c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            IOException {
1511c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        mPackageName = getStringFromXml(parser, ATTR_PACKAGE_NAME, null);
1521c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        if (mPackageName == null) {
1531c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            Log.e(TAG, "Package name cannot be null!");
1541c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        }
1551c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        int status = getIntFromXml(parser, ATTR_STATUS, -1);
1561c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        if (status == -1) {
1571c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            Log.e(TAG, "Unknown status value: " + status);
1581c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        }
1591c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        mMainStatus = status;
1601c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
1611c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        int outerDepth = parser.getDepth();
1621c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        int type;
1631c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
1641c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                && (type != XmlPullParser.END_TAG
1651c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                || parser.getDepth() > outerDepth)) {
1661c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            if (type == XmlPullParser.END_TAG
1671c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                    || type == XmlPullParser.TEXT) {
1681c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                continue;
1691c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            }
1701c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
1711c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            String tagName = parser.getName();
1721c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            if (tagName.equals(TAG_DOMAIN)) {
1731c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                String name = getStringFromXml(parser, ATTR_DOMAIN_NAME, null);
1741c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                if (!TextUtils.isEmpty(name)) {
1750788595e0c9bc5e8c1907c63db595010006ef5b4Fabrice Di Meglio                    mDomains.add(name);
1761c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                }
1771c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            } else {
1781c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                Log.w(TAG, "Unknown tag parsing IntentFilter: " + tagName);
1791c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            }
1801c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            XmlUtils.skipCurrentTag(parser);
1811c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        }
1821c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
1831c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
1846fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
1851c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public void writeToXml(XmlSerializer serializer) throws IOException {
1861c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        serializer.attribute(null, ATTR_PACKAGE_NAME, mPackageName);
1871c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        serializer.attribute(null, ATTR_STATUS, String.valueOf(mMainStatus));
1881c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        for (String str : mDomains) {
1891c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            serializer.startTag(null, TAG_DOMAIN);
1901c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            serializer.attribute(null, ATTR_DOMAIN_NAME, str);
1911c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            serializer.endTag(null, TAG_DOMAIN);
1921c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        }
1931c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
1941c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
1956fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
1961c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public String getStatusString() {
1973decab60ac992093dbb731eb71588737e7d835daChristopher Tate        return getStatusStringFromValue(((long)mMainStatus) << 32);
1981c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
1991c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
2006fd90ed96190c0e8668cc001c8d79753065498b4Jeff Schumacher    /** @hide */
201f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate    public static String getStatusStringFromValue(long val) {
202f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate        StringBuilder sb = new StringBuilder();
203f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate        switch ((int)(val >> 32)) {
204f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate            case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS:
205f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate                sb.append("always : ");
206f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate                sb.append(Long.toHexString(val & 0x00000000FFFFFFFF));
207f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate                break;
208f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate
209f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate            case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK:
210f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate                sb.append("ask");
211f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate                break;
212f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate
213f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate            case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER:
214f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate                sb.append("never");
215f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate                break;
216f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate
21756f0ff3c48c88b969d9bf5e62eb1ee590e03e461Christopher Tate            case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK:
21856f0ff3c48c88b969d9bf5e62eb1ee590e03e461Christopher Tate                sb.append("always-ask");
21956f0ff3c48c88b969d9bf5e62eb1ee590e03e461Christopher Tate                break;
22056f0ff3c48c88b969d9bf5e62eb1ee590e03e461Christopher Tate
221f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate            case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED:
2221c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            default:
223f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate                sb.append("undefined");
224f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate                break;
2251c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        }
226f0d6cb38c47ee37583034dc3a68238ed13c91742Christopher Tate        return sb.toString();
2271c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
2281c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
2291c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    @Override
2301c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public int describeContents() {
2311c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        return 0;
2321c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
2331c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
2341c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    private void readFromParcel(Parcel source) {
2351c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        mPackageName = source.readString();
2361c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        mMainStatus = source.readInt();
2371de3f0dcafb0c5ceb3d9bec96a5c630bb8d4a515Fabrice Di Meglio        ArrayList<String> list = new ArrayList<>();
2381de3f0dcafb0c5ceb3d9bec96a5c630bb8d4a515Fabrice Di Meglio        source.readStringList(list);
2391de3f0dcafb0c5ceb3d9bec96a5c630bb8d4a515Fabrice Di Meglio        mDomains.addAll(list);
2401c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
2411c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
2421c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    @Override
2431c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public void writeToParcel(Parcel dest, int flags) {
2441c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        dest.writeString(mPackageName);
2451c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio        dest.writeInt(mMainStatus);
2461de3f0dcafb0c5ceb3d9bec96a5c630bb8d4a515Fabrice Di Meglio        dest.writeStringList(new ArrayList<>(mDomains));
2471c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    }
2481c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
2491c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    public static final Creator<IntentFilterVerificationInfo> CREATOR =
2501c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            new Creator<IntentFilterVerificationInfo>() {
2511c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                public IntentFilterVerificationInfo createFromParcel(Parcel source) {
2521c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                    return new IntentFilterVerificationInfo(source);
2531c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                }
2541c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                public IntentFilterVerificationInfo[] newArray(int size) {
2551c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                    return new IntentFilterVerificationInfo[size];
2561c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio                }
2571c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio            };
2581c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio}
259