115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/*
215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2007 The Android Open Source Project
315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root *
415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License");
515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License.
615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at
715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root *
815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root *      http://www.apache.org/licenses/LICENSE-2.0
915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root *
1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software
1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS,
1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and
1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License.
1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */
1615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content.pm;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
196d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackbornimport android.content.ComponentName;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.IntentFilter;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
2488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevotimport android.os.UserHandle;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer;
2785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkeyimport android.util.Slog;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.text.Collator;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Comparator;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information that is returned from resolving an intent
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * against an IntentFilter. This partially corresponds to
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information collected from the AndroidManifest.xml's
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <intent> tags.
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ResolveInfo implements Parcelable {
3985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    private static final String TAG = "ResolveInfo";
4085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     * The activity or broadcast receiver that corresponds to this resolution
4385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     * match, if this resolution is for an activity or broadcast receiver.
4485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     * Exactly one of {@link #activityInfo}, {@link #serviceInfo}, or
4585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     * {@link #providerInfo} will be non-null.
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ActivityInfo activityInfo;
489ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     * The service that corresponds to this resolution match, if this resolution
5185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     * is for a service. Exactly one of {@link #activityInfo},
5285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     * {@link #serviceInfo}, or {@link #providerInfo} will be non-null.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ServiceInfo serviceInfo;
5585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey
5685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    /**
5785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     * The provider that corresponds to this resolution match, if this
5885f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     * resolution is for a provider. Exactly one of {@link #activityInfo},
5985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     * {@link #serviceInfo}, or {@link #providerInfo} will be non-null.
6085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey     */
6185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    public ProviderInfo providerInfo;
6285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The IntentFilter that was matched for this ResolveInfo.
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public IntentFilter filter;
679ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The declared priority of this match.  Comes from the "priority"
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute or, if not set, defaults to 0.  Higher values are a higher
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * priority.
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int priority;
749ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Order of result according to the user's preference.  If the user
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * has not set a preference for this result, the value is 0; higher
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values are a higher priority.
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int preferredOrder;
819ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The system's evaluation of how well the activity matches the
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * IntentFilter.  This is a match constant, a combination of
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link IntentFilter#MATCH_CATEGORY_MASK IntentFilter.MATCH_CATEGORY_MASK}
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and {@link IntentFilter#MATCH_ADJUSTMENT_MASK IntentFiler.MATCH_ADJUSTMENT_MASK}.
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int match;
899ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Only set when returned by
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#queryIntentActivityOptions}, this tells you
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which of the given specific intents this result came from.  0 is the
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * first in the list, < 0 means it came from the generic Intent query.
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int specificIndex = -1;
979ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This filter has specified the Intent.CATEGORY_DEFAULT, meaning it
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * would like to be considered a default action that the user can
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * perform on this data.
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean isDefault;
1049ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A string resource identifier (in the package's resources) of this
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * match's label.  From the "label" attribute or, if not set, 0.
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int labelRes;
1109ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The actual string retrieve from <var>labelRes</var> or null if none
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * was provided.
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public CharSequence nonLocalizedLabel;
1169ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A drawable resource identifier (in the package's resources) of this
1199ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     * match's icon.  From the "icon" attribute or, if not set, 0. It is
1209ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     * set only if the icon can be obtained by resource id alone.
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int icon;
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
125eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn     * Optional -- if non-null, the {@link #labelRes} and {@link #icon}
126eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn     * resources will be loaded from this package, rather than the one
127eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn     * containing the resolved component.
128eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn     */
129eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn    public String resolvePackageName;
130d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn
131d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn    /**
13288cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot     * If not equal to UserHandle.USER_CURRENT, then the intent will be forwarded to this user.
13388cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot     * @hide
13488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot     */
13588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot    public int targetUserId;
13688cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot
13788cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot    /**
1389ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     * Set to true if the icon cannot be obtained by resource ids alone.
1399ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     * It is set to true for ResolveInfos from the managed profile: They need to
1409ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     * have their icon badged, so it cannot be obtained by resource ids alone.
14188cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot     * @hide
14288cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot     */
1437f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot    public boolean noResourceId;
14488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot
14588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot    /**
1469ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     * Same as {@link #icon} but it will always correspond to "icon" attribute
1479ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     * regardless of {@link #noResourceId} value.
1489ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     * @hide
1499ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     */
1509ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka    public int iconResourceId;
1519ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
1529ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka    /**
153d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn     * @hide Target comes from system process?
154d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn     */
155d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn    public boolean system;
156d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn
1571c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio    /**
1587d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio     * @hide Does the associated IntentFilter comes from a Browser ?
1591c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio     */
1607d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio    public boolean handleAllWebDataURI;
1611c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio
16285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    private ComponentInfo getComponentInfo() {
16385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        if (activityInfo != null) return activityInfo;
16485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        if (serviceInfo != null) return serviceInfo;
16585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        if (providerInfo != null) return providerInfo;
16685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        throw new IllegalStateException("Missing ComponentInfo!");
16785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    }
16885f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey
169eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn    /**
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve the current textual label associated with this resolution.  This
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will call back on the given PackageManager to load the label from
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the application.
1739ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     *
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pm A PackageManager from which the label can be loaded; usually
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the PackageManager from which you originally retrieved this item.
1769ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     *
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a CharSequence containing the resolutions's label.  If the
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * item does not have a label, its name is returned.
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public CharSequence loadLabel(PackageManager pm) {
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (nonLocalizedLabel != null) {
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return nonLocalizedLabel;
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
184eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        CharSequence label;
185eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        if (resolvePackageName != null && labelRes != 0) {
186eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            label = pm.getText(resolvePackageName, labelRes, null);
187eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            if (label != null) {
1882aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy                return label.toString().trim();
189eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            }
190eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        }
19185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        ComponentInfo ci = getComponentInfo();
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ApplicationInfo ai = ci.applicationInfo;
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (labelRes != 0) {
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            label = pm.getText(ci.packageName, labelRes, ai);
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (label != null) {
1962aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy                return label.toString().trim();
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1992aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy
2002aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy        CharSequence data = ci.loadLabel(pm);
2012aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy        // Make the data safe
2022aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy        if (data != null) data = data.toString().trim();
2032aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy        return data;
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2059ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve the current graphical icon associated with this resolution.  This
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will call back on the given PackageManager to load the icon from
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the application.
2109ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     *
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pm A PackageManager from which the icon can be loaded; usually
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the PackageManager from which you originally retrieved this item.
2139ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka     *
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a Drawable containing the resolution's icon.  If the
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * item does not have an icon, the default activity icon is returned.
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Drawable loadIcon(PackageManager pm) {
2189ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka        Drawable dr = null;
2199ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka        if (resolvePackageName != null && iconResourceId != 0) {
2209ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka            dr = pm.getDrawable(resolvePackageName, iconResourceId, null);
221eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        }
22285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        ComponentInfo ci = getComponentInfo();
2239ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka        if (dr == null && iconResourceId != 0) {
2249ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka            ApplicationInfo ai = ci.applicationInfo;
2259ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka            dr = pm.getDrawable(ci.packageName, iconResourceId, ai);
2269ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka        }
2279ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka        if (dr != null) {
2289ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka            return pm.getUserBadgedIcon(dr, new UserHandle(UserHandle.myUserId()));
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return ci.loadIcon(pm);
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2321281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the icon resource identifier to use for this match.  If the
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * match defines an icon, that is used; else if the activity defines
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * an icon, that is used; else, the application icon is used.
2371281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai     * This function does not check noResourceId flag.
2381281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai     *
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The icon associated with this match.
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2411281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai    final int getIconResourceInternal() {
2429ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka        if (iconResourceId != 0) return iconResourceId;
24385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        final ComponentInfo ci = getComponentInfo();
2447f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot        if (ci != null) {
24588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot            return ci.getIconResource();
24688cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot        }
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2501281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai    /**
2511281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai     * Return the icon resource identifier to use for this match.  If the
2521281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai     * match defines an icon, that is used; else if the activity defines
2531281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai     * an icon, that is used; else, the application icon is used.
2541281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai     *
2551281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai     * @return The icon associated with this match.
2561281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai     */
2571281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai    public final int getIconResource() {
2581281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai        if (noResourceId) return 0;
2591281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai        return getIconResourceInternal();
2601281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai    }
2611281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void dump(Printer pw, String prefix) {
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (filter != null) {
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pw.println(prefix + "Filter:");
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            filter.dump(pw, prefix + "  ");
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        pw.println(prefix + "priority=" + priority
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " preferredOrder=" + preferredOrder
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " match=0x" + Integer.toHexString(match)
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " specificIndex=" + specificIndex
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " isDefault=" + isDefault);
272eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        if (resolvePackageName != null) {
273eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            pw.println(prefix + "resolvePackageName=" + resolvePackageName);
274eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        }
275eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        if (labelRes != 0 || nonLocalizedLabel != null || icon != 0) {
276eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            pw.println(prefix + "labelRes=0x" + Integer.toHexString(labelRes)
277eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn                    + " nonLocalizedLabel=" + nonLocalizedLabel
278eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn                    + " icon=0x" + Integer.toHexString(icon));
279eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        }
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (activityInfo != null) {
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pw.println(prefix + "ActivityInfo:");
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            activityInfo.dump(pw, prefix + "  ");
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (serviceInfo != null) {
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pw.println(prefix + "ServiceInfo:");
285eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            serviceInfo.dump(pw, prefix + "  ");
28685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        } else if (providerInfo != null) {
28785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey            pw.println(prefix + "ProviderInfo:");
28885f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey            providerInfo.dump(pw, prefix + "  ");
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ResolveInfo() {
29388cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot        targetUserId = UserHandle.USER_CURRENT;
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2968da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn    public ResolveInfo(ResolveInfo orig) {
2978da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        activityInfo = orig.activityInfo;
2988da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        serviceInfo = orig.serviceInfo;
29985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        providerInfo = orig.providerInfo;
3008da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        filter = orig.filter;
3018da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        priority = orig.priority;
3028da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        preferredOrder = orig.preferredOrder;
3038da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        match = orig.match;
3048da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        specificIndex = orig.specificIndex;
3058da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        labelRes = orig.labelRes;
3068da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        nonLocalizedLabel = orig.nonLocalizedLabel;
3078da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        icon = orig.icon;
3088da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        resolvePackageName = orig.resolvePackageName;
3099ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka        noResourceId = orig.noResourceId;
3109ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka        iconResourceId = orig.iconResourceId;
3118da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn        system = orig.system;
31288cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot        targetUserId = orig.targetUserId;
3137d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio        handleAllWebDataURI = orig.handleAllWebDataURI;
3148da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn    }
3158da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
31785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        final ComponentInfo ci = getComponentInfo();
3186d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        StringBuilder sb = new StringBuilder(128);
3196d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        sb.append("ResolveInfo{");
3206d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        sb.append(Integer.toHexString(System.identityHashCode(this)));
3216d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        sb.append(' ');
3226d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        ComponentName.appendShortString(sb, ci.packageName, ci.name);
3236d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        if (priority != 0) {
3246d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn            sb.append(" p=");
3256d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn            sb.append(priority);
3266d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        }
3276d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        if (preferredOrder != 0) {
3286d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn            sb.append(" o=");
3296d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn            sb.append(preferredOrder);
3306d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        }
3316d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        sb.append(" m=0x");
3326d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        sb.append(Integer.toHexString(match));
33388cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot        if (targetUserId != UserHandle.USER_CURRENT) {
33488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot            sb.append(" targetUserId=");
33588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot            sb.append(targetUserId);
33688cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot        }
3376d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        sb.append('}');
3386d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn        return sb.toString();
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int parcelableFlags) {
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (activityInfo != null) {
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(1);
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            activityInfo.writeToParcel(dest, parcelableFlags);
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (serviceInfo != null) {
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(2);
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            serviceInfo.writeToParcel(dest, parcelableFlags);
35285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        } else if (providerInfo != null) {
35385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey            dest.writeInt(3);
35485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey            providerInfo.writeToParcel(dest, parcelableFlags);
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(0);
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (filter != null) {
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(1);
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            filter.writeToParcel(dest, parcelableFlags);
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(0);
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(priority);
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(preferredOrder);
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(match);
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(specificIndex);
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(labelRes);
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TextUtils.writeToParcel(nonLocalizedLabel, dest, parcelableFlags);
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(icon);
371eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        dest.writeString(resolvePackageName);
37288cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot        dest.writeInt(targetUserId);
373d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn        dest.writeInt(system ? 1 : 0);
3747f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot        dest.writeInt(noResourceId ? 1 : 0);
3759ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka        dest.writeInt(iconResourceId);
3767d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio        dest.writeInt(handleAllWebDataURI ? 1 : 0);
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Creator<ResolveInfo> CREATOR
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            = new Creator<ResolveInfo>() {
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ResolveInfo createFromParcel(Parcel source) {
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new ResolveInfo(source);
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ResolveInfo[] newArray(int size) {
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new ResolveInfo[size];
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private ResolveInfo(Parcel source) {
39085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        activityInfo = null;
39185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        serviceInfo = null;
39285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        providerInfo = null;
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (source.readInt()) {
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case 1:
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                activityInfo = ActivityInfo.CREATOR.createFromParcel(source);
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case 2:
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                serviceInfo = ServiceInfo.CREATOR.createFromParcel(source);
39985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey                break;
40085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey            case 3:
40185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey                providerInfo = ProviderInfo.CREATOR.createFromParcel(source);
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default:
40485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey                Slog.w(TAG, "Missing ComponentInfo!");
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (source.readInt() != 0) {
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            filter = IntentFilter.CREATOR.createFromParcel(source);
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        priority = source.readInt();
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        preferredOrder = source.readInt();
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        match = source.readInt();
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        specificIndex = source.readInt();
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        labelRes = source.readInt();
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        nonLocalizedLabel
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        icon = source.readInt();
418eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        resolvePackageName = source.readString();
41988cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot        targetUserId = source.readInt();
420d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn        system = source.readInt() != 0;
4217f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot        noResourceId = source.readInt() != 0;
4229ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka        iconResourceId = source.readInt();
4237d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio        handleAllWebDataURI = source.readInt() != 0;
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4259ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class DisplayNameComparator
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            implements Comparator<ResolveInfo> {
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public DisplayNameComparator(PackageManager pm) {
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mPM = pm;
4300256c6f8d31c95f730d286b9e2ebae94736f7098Adam Powell            mCollator.setStrength(Collator.PRIMARY);
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public final int compare(ResolveInfo a, ResolveInfo b) {
43488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot            // We want to put the one targeted to another user at the end of the dialog.
43588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot            if (a.targetUserId != UserHandle.USER_CURRENT) {
43688cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot                return 1;
43788cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot            }
43888cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot            if (b.targetUserId != UserHandle.USER_CURRENT) {
43988cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot                return -1;
44088cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot            }
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CharSequence  sa = a.loadLabel(mPM);
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (sa == null) sa = a.activityInfo.name;
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CharSequence  sb = b.loadLabel(mPM);
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (sb == null) sb = b.activityInfo.name;
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4460256c6f8d31c95f730d286b9e2ebae94736f7098Adam Powell            return mCollator.compare(sa.toString(), sb.toString());
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4490256c6f8d31c95f730d286b9e2ebae94736f7098Adam Powell        private final Collator   mCollator = Collator.getInstance();
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private PackageManager   mPM;
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
453