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