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; 247f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevotimport android.os.UserHandle; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.text.Collator; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Comparator; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Base class containing information common to all package items held by 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the package manager. This provides a very common basic set of attributes: 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a label, icon, and meta-data. This class is not intended 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to be used by itself; it is simply here to share common definitions 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between all items returned by the package manager. As such, it does not 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * itself implement Parcelable, but does provide convenience methods to assist 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the implementation of Parcelable in subclasses. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PackageItemInfo { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Public name of this item. From the "android:name" attribute. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String name; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Name of the package that this item is in. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String packageName; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A string resource identifier (in the package's resources) of this 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * component's label. From the "label" attribute or, if not set, 0. 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int labelRes; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The string provided in the AndroidManifest file, if any. You 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * probably don't want to use this. You probably want 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PackageManager#getApplicationLabel} 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence nonLocalizedLabel; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A drawable resource identifier (in the package's resources) of this 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * component's icon. From the "icon" attribute or, if not set, 0. 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int icon; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7181cd2e90ccdda498234384c8207afe2213714e60Adam Powell * A drawable resource identifier (in the package's resources) of this 72f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * component's banner. From the "banner" attribute or, if not set, 0. 73f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima */ 74f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima public int banner; 75f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 76f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima /** 77f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * A drawable resource identifier (in the package's resources) of this 7881cd2e90ccdda498234384c8207afe2213714e60Adam Powell * component's logo. Logos may be larger/wider than icons and are 7981cd2e90ccdda498234384c8207afe2213714e60Adam Powell * displayed by certain UI elements in place of a name or name/icon 8081cd2e90ccdda498234384c8207afe2213714e60Adam Powell * combination. From the "logo" attribute or, if not set, 0. 8181cd2e90ccdda498234384c8207afe2213714e60Adam Powell */ 8281cd2e90ccdda498234384c8207afe2213714e60Adam Powell public int logo; 8381cd2e90ccdda498234384c8207afe2213714e60Adam Powell 8481cd2e90ccdda498234384c8207afe2213714e60Adam Powell /** 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Additional meta-data associated with this component. This field 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will only be filled in if you set the 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PackageManager#GET_META_DATA} flag when requesting the info. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bundle metaData; 907f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot 917f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot /** 927f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot * If different of UserHandle.USER_NULL, The icon of this item will be the one of that user. 937f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot * @hide 947f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot */ 957f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot public int showUserIcon; 967f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PackageItemInfo() { 987f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot showUserIcon = UserHandle.USER_NULL; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PackageItemInfo(PackageItemInfo orig) { 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name = orig.name; 1032aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy if (name != null) name = name.trim(); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project packageName = orig.packageName; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project labelRes = orig.labelRes; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedLabel = orig.nonLocalizedLabel; 1072aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy if (nonLocalizedLabel != null) nonLocalizedLabel = nonLocalizedLabel.toString().trim(); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project icon = orig.icon; 109f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima banner = orig.banner; 11081cd2e90ccdda498234384c8207afe2213714e60Adam Powell logo = orig.logo; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project metaData = orig.metaData; 1127f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot showUserIcon = orig.showUserIcon; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current textual label associated with this item. This 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the label from 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the label can be loaded; usually 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a CharSequence containing the item's label. If the 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * item does not have a label, its name is returned. 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence loadLabel(PackageManager pm) { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nonLocalizedLabel != null) { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nonLocalizedLabel; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (labelRes != 0) { 13107330791116513710d879c45b2f095cd314cbfd0Jeff Brown CharSequence label = pm.getText(packageName, labelRes, getApplicationInfo()); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (label != null) { 1332aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy return label.toString().trim(); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1362aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy if (name != null) { 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return name; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return packageName; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 141ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current graphical icon associated with this item. This 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the icon from 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the icon can be loaded; usually 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a Drawable containing the item's icon. If the 15107330791116513710d879c45b2f095cd314cbfd0Jeff Brown * item does not have an icon, the item's default icon is returned 15207330791116513710d879c45b2f095cd314cbfd0Jeff Brown * such as the default activity icon. 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Drawable loadIcon(PackageManager pm) { 155a71e3903e5d3f38795c443c052125faede9d9ec7Alexandra Gherghina return pm.loadItemIcon(this, getApplicationInfo()); 15607330791116513710d879c45b2f095cd314cbfd0Jeff Brown } 157a71e3903e5d3f38795c443c052125faede9d9ec7Alexandra Gherghina 15807330791116513710d879c45b2f095cd314cbfd0Jeff Brown /** 159ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * Retrieve the current graphical icon associated with this item without 160ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * the addition of a work badge if applicable. 161ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * This will call back on the given PackageManager to load the icon from 162ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * the application. 163ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * 164ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * @param pm A PackageManager from which the icon can be loaded; usually 165ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * the PackageManager from which you originally retrieved this item. 166ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * 167ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * @return Returns a Drawable containing the item's icon. If the 168ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * item does not have an icon, the item's default icon is returned 169ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * such as the default activity icon. 170ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz */ 171ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz public Drawable loadUnbadgedIcon(PackageManager pm) { 172ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz return pm.loadUnbadgedItemIcon(this, getApplicationInfo()); 173ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz } 174ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz 175ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz /** 176f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * Retrieve the current graphical banner associated with this item. This 177f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * will call back on the given PackageManager to load the banner from 178f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * the application. 179f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * 180f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * @param pm A PackageManager from which the banner can be loaded; usually 181f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * the PackageManager from which you originally retrieved this item. 182f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * 183f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * @return Returns a Drawable containing the item's banner. If the item 184f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * does not have a banner, this method will return null. 185f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima */ 186f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima public Drawable loadBanner(PackageManager pm) { 187f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima if (banner != 0) { 188f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima Drawable dr = pm.getDrawable(packageName, banner, getApplicationInfo()); 189f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima if (dr != null) { 190f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima return dr; 191f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 192f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 193f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima return loadDefaultBanner(pm); 194f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 195f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 196f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima /** 19707330791116513710d879c45b2f095cd314cbfd0Jeff Brown * Retrieve the default graphical icon associated with this item. 19807330791116513710d879c45b2f095cd314cbfd0Jeff Brown * 19907330791116513710d879c45b2f095cd314cbfd0Jeff Brown * @param pm A PackageManager from which the icon can be loaded; usually 20007330791116513710d879c45b2f095cd314cbfd0Jeff Brown * the PackageManager from which you originally retrieved this item. 20107330791116513710d879c45b2f095cd314cbfd0Jeff Brown * 20207330791116513710d879c45b2f095cd314cbfd0Jeff Brown * @return Returns a Drawable containing the item's default icon 20307330791116513710d879c45b2f095cd314cbfd0Jeff Brown * such as the default activity icon. 20407330791116513710d879c45b2f095cd314cbfd0Jeff Brown * 20507330791116513710d879c45b2f095cd314cbfd0Jeff Brown * @hide 20607330791116513710d879c45b2f095cd314cbfd0Jeff Brown */ 207a709314537164d959a18ee78768c69c4a9cb33c7Alexandra Gherghina public Drawable loadDefaultIcon(PackageManager pm) { 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return pm.getDefaultActivityIcon(); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 210f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 211f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima /** 212f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * Retrieve the default graphical banner associated with this item. 213f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * 214f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * @param pm A PackageManager from which the banner can be loaded; usually 215f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * the PackageManager from which you originally retrieved this item. 216f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * 217f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * @return Returns a Drawable containing the item's default banner 218f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * or null if no default logo is available. 219f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * 220f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima * @hide 221f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima */ 222f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima protected Drawable loadDefaultBanner(PackageManager pm) { 223f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima return null; 224f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 225f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22781cd2e90ccdda498234384c8207afe2213714e60Adam Powell * Retrieve the current graphical logo associated with this item. This 22881cd2e90ccdda498234384c8207afe2213714e60Adam Powell * will call back on the given PackageManager to load the logo from 22981cd2e90ccdda498234384c8207afe2213714e60Adam Powell * the application. 23081cd2e90ccdda498234384c8207afe2213714e60Adam Powell * 23181cd2e90ccdda498234384c8207afe2213714e60Adam Powell * @param pm A PackageManager from which the logo can be loaded; usually 23281cd2e90ccdda498234384c8207afe2213714e60Adam Powell * the PackageManager from which you originally retrieved this item. 23381cd2e90ccdda498234384c8207afe2213714e60Adam Powell * 23481cd2e90ccdda498234384c8207afe2213714e60Adam Powell * @return Returns a Drawable containing the item's logo. If the item 23581cd2e90ccdda498234384c8207afe2213714e60Adam Powell * does not have a logo, this method will return null. 23681cd2e90ccdda498234384c8207afe2213714e60Adam Powell */ 23781cd2e90ccdda498234384c8207afe2213714e60Adam Powell public Drawable loadLogo(PackageManager pm) { 23881cd2e90ccdda498234384c8207afe2213714e60Adam Powell if (logo != 0) { 23981cd2e90ccdda498234384c8207afe2213714e60Adam Powell Drawable d = pm.getDrawable(packageName, logo, getApplicationInfo()); 24081cd2e90ccdda498234384c8207afe2213714e60Adam Powell if (d != null) { 24181cd2e90ccdda498234384c8207afe2213714e60Adam Powell return d; 24281cd2e90ccdda498234384c8207afe2213714e60Adam Powell } 24381cd2e90ccdda498234384c8207afe2213714e60Adam Powell } 24481cd2e90ccdda498234384c8207afe2213714e60Adam Powell return loadDefaultLogo(pm); 24581cd2e90ccdda498234384c8207afe2213714e60Adam Powell } 24681cd2e90ccdda498234384c8207afe2213714e60Adam Powell 24781cd2e90ccdda498234384c8207afe2213714e60Adam Powell /** 24881cd2e90ccdda498234384c8207afe2213714e60Adam Powell * Retrieve the default graphical logo associated with this item. 24981cd2e90ccdda498234384c8207afe2213714e60Adam Powell * 25081cd2e90ccdda498234384c8207afe2213714e60Adam Powell * @param pm A PackageManager from which the logo can be loaded; usually 25181cd2e90ccdda498234384c8207afe2213714e60Adam Powell * the PackageManager from which you originally retrieved this item. 25281cd2e90ccdda498234384c8207afe2213714e60Adam Powell * 25381cd2e90ccdda498234384c8207afe2213714e60Adam Powell * @return Returns a Drawable containing the item's default logo 25481cd2e90ccdda498234384c8207afe2213714e60Adam Powell * or null if no default logo is available. 25581cd2e90ccdda498234384c8207afe2213714e60Adam Powell * 25681cd2e90ccdda498234384c8207afe2213714e60Adam Powell * @hide 25781cd2e90ccdda498234384c8207afe2213714e60Adam Powell */ 25881cd2e90ccdda498234384c8207afe2213714e60Adam Powell protected Drawable loadDefaultLogo(PackageManager pm) { 25981cd2e90ccdda498234384c8207afe2213714e60Adam Powell return null; 26081cd2e90ccdda498234384c8207afe2213714e60Adam Powell } 26181cd2e90ccdda498234384c8207afe2213714e60Adam Powell 26281cd2e90ccdda498234384c8207afe2213714e60Adam Powell /** 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Load an XML resource attached to the meta-data of this item. This will 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * retrieved the name meta-data entry, and if defined call back on the 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given PackageManager to load its XML file from the application. 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the XML can be loaded; usually 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name Name of the meta-date you would like to load. 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns an XmlPullParser you can use to parse the XML file 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * assigned as the given meta-data. If the meta-data name is not defined 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or the XML resource could not be found, null is returned. 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public XmlResourceParser loadXmlMetaData(PackageManager pm, String name) { 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (metaData != null) { 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int resid = metaData.getInt(name); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (resid != 0) { 27907330791116513710d879c45b2f095cd314cbfd0Jeff Brown return pm.getXml(packageName, resid, getApplicationInfo()); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28464442c11555d828a41af0b8a58ab933357889061Amith Yamasani 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void dumpFront(Printer pw, String prefix) { 28612527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn if (name != null) { 28712527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn pw.println(prefix + "name=" + name); 28812527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "packageName=" + packageName); 290f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima if (labelRes != 0 || nonLocalizedLabel != null || icon != 0 || banner != 0) { 29112527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn pw.println(prefix + "labelRes=0x" + Integer.toHexString(labelRes) 29212527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn + " nonLocalizedLabel=" + nonLocalizedLabel 293f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima + " icon=0x" + Integer.toHexString(icon) 294f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima + " banner=0x" + Integer.toHexString(banner)); 29512527f9fb1cb0a1ad3be8149c1c88a0e731cb4d6Dianne Hackborn } 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void dumpBack(Printer pw, String prefix) { 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // no back here 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int parcelableFlags) { 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(name); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(packageName); 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(labelRes); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(nonLocalizedLabel, dest, parcelableFlags); 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(icon); 30881cd2e90ccdda498234384c8207afe2213714e60Adam Powell dest.writeInt(logo); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeBundle(metaData); 310f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima dest.writeInt(banner); 3117f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot dest.writeInt(showUserIcon); 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31307330791116513710d879c45b2f095cd314cbfd0Jeff Brown 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected PackageItemInfo(Parcel source) { 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name = source.readString(); 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project packageName = source.readString(); 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project labelRes = source.readInt(); 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedLabel 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project icon = source.readInt(); 32181cd2e90ccdda498234384c8207afe2213714e60Adam Powell logo = source.readInt(); 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project metaData = source.readBundle(); 323f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima banner = source.readInt(); 3247f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot showUserIcon = source.readInt(); 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32707330791116513710d879c45b2f095cd314cbfd0Jeff Brown /** 32807330791116513710d879c45b2f095cd314cbfd0Jeff Brown * Get the ApplicationInfo for the application to which this item belongs, 32907330791116513710d879c45b2f095cd314cbfd0Jeff Brown * if available, otherwise returns null. 33007330791116513710d879c45b2f095cd314cbfd0Jeff Brown * 33107330791116513710d879c45b2f095cd314cbfd0Jeff Brown * @return Returns the ApplicationInfo of this item, or null if not known. 33207330791116513710d879c45b2f095cd314cbfd0Jeff Brown * 33307330791116513710d879c45b2f095cd314cbfd0Jeff Brown * @hide 33407330791116513710d879c45b2f095cd314cbfd0Jeff Brown */ 33507330791116513710d879c45b2f095cd314cbfd0Jeff Brown protected ApplicationInfo getApplicationInfo() { 33607330791116513710d879c45b2f095cd314cbfd0Jeff Brown return null; 33707330791116513710d879c45b2f095cd314cbfd0Jeff Brown } 33807330791116513710d879c45b2f095cd314cbfd0Jeff Brown 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class DisplayNameComparator 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project implements Comparator<PackageItemInfo> { 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DisplayNameComparator(PackageManager pm) { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPM = pm; 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int compare(PackageItemInfo aa, PackageItemInfo ab) { 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence sa = aa.loadLabel(mPM); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sa == null) sa = aa.name; 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence sb = ab.loadLabel(mPM); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sb == null) sb = ab.name; 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sCollator.compare(sa.toString(), sb.toString()); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Collator sCollator = Collator.getInstance(); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PackageManager mPM; 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 357