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
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.XmlResourceParser;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.text.Collator;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Comparator;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Base class containing information common to all package items held by
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the package manager.  This provides a very common basic set of attributes:
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a label, icon, and meta-data.  This class is not intended
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to be used by itself; it is simply here to share common definitions
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between all items returned by the package manager.  As such, it does not
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * itself implement Parcelable, but does provide convenience methods to assist
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the implementation of Parcelable in subclasses.
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PackageItemInfo {
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Public name of this item. From the "android:name" attribute.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String name;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Name of the package that this item is in.
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String packageName;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A string resource identifier (in the package's resources) of this
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * component's label.  From the "label" attribute or, if not set, 0.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int labelRes;
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The string provided in the AndroidManifest file, if any.  You
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * probably don't want to use this.  You probably want
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#getApplicationLabel}
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public CharSequence nonLocalizedLabel;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A drawable resource identifier (in the package's resources) of this
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * component's icon.  From the "icon" attribute or, if not set, 0.
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int icon;
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7081cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * A drawable resource identifier (in the package's resources) of this
7181cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * component's logo. Logos may be larger/wider than icons and are
7281cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * displayed by certain UI elements in place of a name or name/icon
7381cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * combination. From the "logo" attribute or, if not set, 0.
7481cd2e90ccdda498234384c8207afe2213714e60Adam Powell     */
7581cd2e90ccdda498234384c8207afe2213714e60Adam Powell    public int logo;
7681cd2e90ccdda498234384c8207afe2213714e60Adam Powell
7781cd2e90ccdda498234384c8207afe2213714e60Adam Powell    /**
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Additional meta-data associated with this component.  This field
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will only be filled in if you set the
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_META_DATA} flag when requesting the info.
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Bundle metaData;
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public PackageItemInfo() {
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public PackageItemInfo(PackageItemInfo orig) {
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        name = orig.name;
892aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy        if (name != null) name = name.trim();
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        packageName = orig.packageName;
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        labelRes = orig.labelRes;
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        nonLocalizedLabel = orig.nonLocalizedLabel;
932aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy        if (nonLocalizedLabel != null) nonLocalizedLabel = nonLocalizedLabel.toString().trim();
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        icon = orig.icon;
9581cd2e90ccdda498234384c8207afe2213714e60Adam Powell        logo = orig.logo;
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        metaData = orig.metaData;
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve the current textual label associated with this item.  This
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will call back on the given PackageManager to load the label from
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the application.
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pm A PackageManager from which the label can be loaded; usually
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the PackageManager from which you originally retrieved this item.
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a CharSequence containing the item's label.  If the
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * item does not have a label, its name is returned.
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public CharSequence loadLabel(PackageManager pm) {
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (nonLocalizedLabel != null) {
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return nonLocalizedLabel;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (labelRes != 0) {
11507330791116513710d879c45b2f095cd314cbfd0Jeff Brown            CharSequence label = pm.getText(packageName, labelRes, getApplicationInfo());
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (label != null) {
1172aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy                return label.toString().trim();
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1202aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy        if (name != null) {
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return name;
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return packageName;
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve the current graphical icon associated with this item.  This
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will call back on the given PackageManager to load the icon from
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the application.
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pm A PackageManager from which the icon can be loaded; usually
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the PackageManager from which you originally retrieved this item.
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a Drawable containing the item's icon.  If the
13507330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * item does not have an icon, the item's default icon is returned
13607330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * such as the default activity icon.
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Drawable loadIcon(PackageManager pm) {
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (icon != 0) {
14007330791116513710d879c45b2f095cd314cbfd0Jeff Brown            Drawable dr = pm.getDrawable(packageName, icon, getApplicationInfo());
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (dr != null) {
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return dr;
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14507330791116513710d879c45b2f095cd314cbfd0Jeff Brown        return loadDefaultIcon(pm);
14607330791116513710d879c45b2f095cd314cbfd0Jeff Brown    }
14707330791116513710d879c45b2f095cd314cbfd0Jeff Brown
14807330791116513710d879c45b2f095cd314cbfd0Jeff Brown    /**
14907330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * Retrieve the default graphical icon associated with this item.
15007330791116513710d879c45b2f095cd314cbfd0Jeff Brown     *
15107330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * @param pm A PackageManager from which the icon can be loaded; usually
15207330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * the PackageManager from which you originally retrieved this item.
15307330791116513710d879c45b2f095cd314cbfd0Jeff Brown     *
15407330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * @return Returns a Drawable containing the item's default icon
15507330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * such as the default activity icon.
15607330791116513710d879c45b2f095cd314cbfd0Jeff Brown     *
15707330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * @hide
15807330791116513710d879c45b2f095cd314cbfd0Jeff Brown     */
15907330791116513710d879c45b2f095cd314cbfd0Jeff Brown    protected Drawable loadDefaultIcon(PackageManager pm) {
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return pm.getDefaultActivityIcon();
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16481cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * Retrieve the current graphical logo associated with this item. This
16581cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * will call back on the given PackageManager to load the logo from
16681cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * the application.
16781cd2e90ccdda498234384c8207afe2213714e60Adam Powell     *
16881cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * @param pm A PackageManager from which the logo can be loaded; usually
16981cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * the PackageManager from which you originally retrieved this item.
17081cd2e90ccdda498234384c8207afe2213714e60Adam Powell     *
17181cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * @return Returns a Drawable containing the item's logo. If the item
17281cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * does not have a logo, this method will return null.
17381cd2e90ccdda498234384c8207afe2213714e60Adam Powell     */
17481cd2e90ccdda498234384c8207afe2213714e60Adam Powell    public Drawable loadLogo(PackageManager pm) {
17581cd2e90ccdda498234384c8207afe2213714e60Adam Powell        if (logo != 0) {
17681cd2e90ccdda498234384c8207afe2213714e60Adam Powell            Drawable d = pm.getDrawable(packageName, logo, getApplicationInfo());
17781cd2e90ccdda498234384c8207afe2213714e60Adam Powell            if (d != null) {
17881cd2e90ccdda498234384c8207afe2213714e60Adam Powell                return d;
17981cd2e90ccdda498234384c8207afe2213714e60Adam Powell            }
18081cd2e90ccdda498234384c8207afe2213714e60Adam Powell        }
18181cd2e90ccdda498234384c8207afe2213714e60Adam Powell        return loadDefaultLogo(pm);
18281cd2e90ccdda498234384c8207afe2213714e60Adam Powell    }
18381cd2e90ccdda498234384c8207afe2213714e60Adam Powell
18481cd2e90ccdda498234384c8207afe2213714e60Adam Powell    /**
18581cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * Retrieve the default graphical logo associated with this item.
18681cd2e90ccdda498234384c8207afe2213714e60Adam Powell     *
18781cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * @param pm A PackageManager from which the logo can be loaded; usually
18881cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * the PackageManager from which you originally retrieved this item.
18981cd2e90ccdda498234384c8207afe2213714e60Adam Powell     *
19081cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * @return Returns a Drawable containing the item's default logo
19181cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * or null if no default logo is available.
19281cd2e90ccdda498234384c8207afe2213714e60Adam Powell     *
19381cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * @hide
19481cd2e90ccdda498234384c8207afe2213714e60Adam Powell     */
19581cd2e90ccdda498234384c8207afe2213714e60Adam Powell    protected Drawable loadDefaultLogo(PackageManager pm) {
19681cd2e90ccdda498234384c8207afe2213714e60Adam Powell        return null;
19781cd2e90ccdda498234384c8207afe2213714e60Adam Powell    }
19881cd2e90ccdda498234384c8207afe2213714e60Adam Powell
19981cd2e90ccdda498234384c8207afe2213714e60Adam Powell    /**
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Load an XML resource attached to the meta-data of this item.  This will
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * retrieved the name meta-data entry, and if defined call back on the
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * given PackageManager to load its XML file from the application.
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pm A PackageManager from which the XML can be loaded; usually
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the PackageManager from which you originally retrieved this item.
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Name of the meta-date you would like to load.
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an XmlPullParser you can use to parse the XML file
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * assigned as the given meta-data.  If the meta-data name is not defined
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or the XML resource could not be found, null is returned.
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public XmlResourceParser loadXmlMetaData(PackageManager pm, String name) {
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (metaData != null) {
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int resid = metaData.getInt(name);
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (resid != 0) {
21607330791116513710d879c45b2f095cd314cbfd0Jeff Brown                return pm.getXml(packageName, resid, getApplicationInfo());
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
22164442c11555d828a41af0b8a58ab933357889061Amith Yamasani
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void dumpFront(Printer pw, String prefix) {
22312527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn        if (name != null) {
22412527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn            pw.println(prefix + "name=" + name);
22512527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn        }
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        pw.println(prefix + "packageName=" + packageName);
22712527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn        if (labelRes != 0 || nonLocalizedLabel != null || icon != 0) {
22812527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn            pw.println(prefix + "labelRes=0x" + Integer.toHexString(labelRes)
22912527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn                    + " nonLocalizedLabel=" + nonLocalizedLabel
23012527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn                    + " icon=0x" + Integer.toHexString(icon));
23112527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn        }
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void dumpBack(Printer pw, String prefix) {
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // no back here
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int parcelableFlags) {
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(name);
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(packageName);
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(labelRes);
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TextUtils.writeToParcel(nonLocalizedLabel, dest, parcelableFlags);
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(icon);
24481cd2e90ccdda498234384c8207afe2213714e60Adam Powell        dest.writeInt(logo);
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeBundle(metaData);
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
24707330791116513710d879c45b2f095cd314cbfd0Jeff Brown
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected PackageItemInfo(Parcel source) {
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        name = source.readString();
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        packageName = source.readString();
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        labelRes = source.readInt();
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        nonLocalizedLabel
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        icon = source.readInt();
25581cd2e90ccdda498234384c8207afe2213714e60Adam Powell        logo = source.readInt();
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        metaData = source.readBundle();
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25907330791116513710d879c45b2f095cd314cbfd0Jeff Brown    /**
26007330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * Get the ApplicationInfo for the application to which this item belongs,
26107330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * if available, otherwise returns null.
26207330791116513710d879c45b2f095cd314cbfd0Jeff Brown     *
26307330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * @return Returns the ApplicationInfo of this item, or null if not known.
26407330791116513710d879c45b2f095cd314cbfd0Jeff Brown     *
26507330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * @hide
26607330791116513710d879c45b2f095cd314cbfd0Jeff Brown     */
26707330791116513710d879c45b2f095cd314cbfd0Jeff Brown    protected ApplicationInfo getApplicationInfo() {
26807330791116513710d879c45b2f095cd314cbfd0Jeff Brown        return null;
26907330791116513710d879c45b2f095cd314cbfd0Jeff Brown    }
27007330791116513710d879c45b2f095cd314cbfd0Jeff Brown
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class DisplayNameComparator
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            implements Comparator<PackageItemInfo> {
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public DisplayNameComparator(PackageManager pm) {
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mPM = pm;
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public final int compare(PackageItemInfo aa, PackageItemInfo ab) {
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CharSequence  sa = aa.loadLabel(mPM);
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (sa == null) sa = aa.name;
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CharSequence  sb = ab.loadLabel(mPM);
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (sb == null) sb = ab.name;
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return sCollator.compare(sa.toString(), sb.toString());
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private final Collator   sCollator = Collator.getInstance();
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private PackageManager   mPM;
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
289