ResolveInfo.java revision eb034652c2037a47ebfd99779e8383bb8bb528af
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content.pm; 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.IntentFilter; 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer; 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.text.Collator; 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Comparator; 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information that is returned from resolving an intent 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * against an IntentFilter. This partially corresponds to 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information collected from the AndroidManifest.xml's 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <intent> tags. 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ResolveInfo implements Parcelable { 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The activity that corresponds to this resolution match, if this 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resolution is for an activity. One and only one of this and 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * serviceInfo must be non-null. 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ActivityInfo activityInfo; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The service that corresponds to this resolution match, if this 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resolution is for a service. One and only one of this and 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activityInfo must be non-null. 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ServiceInfo serviceInfo; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The IntentFilter that was matched for this ResolveInfo. 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public IntentFilter filter; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The declared priority of this match. Comes from the "priority" 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * attribute or, if not set, defaults to 0. Higher values are a higher 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int priority; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Order of result according to the user's preference. If the user 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has not set a preference for this result, the value is 0; higher 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values are a higher priority. 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int preferredOrder; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The system's evaluation of how well the activity matches the 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * IntentFilter. This is a match constant, a combination of 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link IntentFilter#MATCH_CATEGORY_MASK IntentFilter.MATCH_CATEGORY_MASK} 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link IntentFilter#MATCH_ADJUSTMENT_MASK IntentFiler.MATCH_ADJUSTMENT_MASK}. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int match; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Only set when returned by 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PackageManager#queryIntentActivityOptions}, this tells you 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which of the given specific intents this result came from. 0 is the 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first in the list, < 0 means it came from the generic Intent query. 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int specificIndex = -1; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This filter has specified the Intent.CATEGORY_DEFAULT, meaning it 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * would like to be considered a default action that the user can 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * perform on this data. 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isDefault; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A string resource identifier (in the package's resources) of this 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * match's label. From the "label" attribute or, if not set, 0. 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int labelRes; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The actual string retrieve from <var>labelRes</var> or null if none 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * was provided. 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence nonLocalizedLabel; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A drawable resource identifier (in the package's resources) of this 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * match's icon. From the "icon" attribute or, if not set, 0. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int icon; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 95eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Optional -- if non-null, the {@link #labelRes} and {@link #icon} 96eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * resources will be loaded from this package, rather than the one 97eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * containing the resolved component. 98eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 99eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public String resolvePackageName; 100eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 101eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current textual label associated with this resolution. This 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the label from 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the label can be loaded; usually 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a CharSequence containing the resolutions's label. If the 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * item does not have a label, its name is returned. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence loadLabel(PackageManager pm) { 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nonLocalizedLabel != null) { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nonLocalizedLabel; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 116eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn CharSequence label; 117eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (resolvePackageName != null && labelRes != 0) { 118eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn label = pm.getText(resolvePackageName, labelRes, null); 119eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (label != null) { 120eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return label; 121eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 122eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentInfo ci = activityInfo != null ? activityInfo : serviceInfo; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ApplicationInfo ai = ci.applicationInfo; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (labelRes != 0) { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project label = pm.getText(ci.packageName, labelRes, ai); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (label != null) { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return label; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ci.loadLabel(pm); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current graphical icon associated with this resolution. This 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the icon from 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the icon can be loaded; usually 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a Drawable containing the resolution's icon. If the 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * item does not have an icon, the default activity icon is returned. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Drawable loadIcon(PackageManager pm) { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentInfo ci = activityInfo != null ? activityInfo : serviceInfo; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ApplicationInfo ai = ci.applicationInfo; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Drawable dr; 149eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (resolvePackageName != null && icon != 0) { 150eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dr = pm.getDrawable(resolvePackageName, icon, null); 151eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (dr != null) { 152eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return dr; 153eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 154eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (icon != 0) { 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dr = pm.getDrawable(ci.packageName, icon, ai); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dr != null) { 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return dr; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ci.loadIcon(pm); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the icon resource identifier to use for this match. If the 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * match defines an icon, that is used; else if the activity defines 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an icon, that is used; else, the application icon is used. 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The icon associated with this match. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getIconResource() { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (icon != 0) return icon; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (activityInfo != null) return activityInfo.getIconResource(); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (serviceInfo != null) return serviceInfo.getIconResource(); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void dump(Printer pw, String prefix) { 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (filter != null) { 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "Filter:"); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.dump(pw, prefix + " "); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "priority=" + priority 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " preferredOrder=" + preferredOrder 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " match=0x" + Integer.toHexString(match) 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " specificIndex=" + specificIndex 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " isDefault=" + isDefault); 188eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (resolvePackageName != null) { 189eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn pw.println(prefix + "resolvePackageName=" + resolvePackageName); 190eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 191eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (labelRes != 0 || nonLocalizedLabel != null || icon != 0) { 192eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn pw.println(prefix + "labelRes=0x" + Integer.toHexString(labelRes) 193eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn + " nonLocalizedLabel=" + nonLocalizedLabel 194eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn + " icon=0x" + Integer.toHexString(icon)); 195eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (activityInfo != null) { 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "ActivityInfo:"); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo.dump(pw, prefix + " "); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (serviceInfo != null) { 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "ServiceInfo:"); 201eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn serviceInfo.dump(pw, prefix + " "); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ResolveInfo() { 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentInfo ci = activityInfo != null ? activityInfo : serviceInfo; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "ResolveInfo{" 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Integer.toHexString(System.identityHashCode(this)) 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " " + ci.name + " p=" + priority + " o=" 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + preferredOrder + " m=0x" + Integer.toHexString(match) + "}"; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int parcelableFlags) { 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (activityInfo != null) { 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo.writeToParcel(dest, parcelableFlags); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (serviceInfo != null) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(2); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serviceInfo.writeToParcel(dest, parcelableFlags); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (filter != null) { 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.writeToParcel(dest, parcelableFlags); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(priority); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(preferredOrder); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(match); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(specificIndex); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(labelRes); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(nonLocalizedLabel, dest, parcelableFlags); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(icon); 243eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dest.writeString(resolvePackageName); 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<ResolveInfo> CREATOR 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Creator<ResolveInfo>() { 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ResolveInfo createFromParcel(Parcel source) { 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ResolveInfo(source); 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ResolveInfo[] newArray(int size) { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ResolveInfo[size]; 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ResolveInfo(Parcel source) { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (source.readInt()) { 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 1: 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo = ActivityInfo.CREATOR.createFromParcel(source); 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serviceInfo = null; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 2: 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serviceInfo = ServiceInfo.CREATOR.createFromParcel(source); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo = null; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo = null; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serviceInfo = null; 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (source.readInt() != 0) { 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter = IntentFilter.CREATOR.createFromParcel(source); 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project priority = source.readInt(); 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project preferredOrder = source.readInt(); 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project match = source.readInt(); 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project specificIndex = source.readInt(); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project labelRes = source.readInt(); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedLabel 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project icon = source.readInt(); 282eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn resolvePackageName = source.readString(); 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class DisplayNameComparator 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project implements Comparator<ResolveInfo> { 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DisplayNameComparator(PackageManager pm) { 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPM = pm; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int compare(ResolveInfo a, ResolveInfo b) { 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence sa = a.loadLabel(mPM); 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sa == null) sa = a.activityInfo.name; 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence sb = b.loadLabel(mPM); 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sb == null) sb = b.activityInfo.name; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sCollator.compare(sa.toString(), sb.toString()); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Collator sCollator = Collator.getInstance(); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PackageManager mPM; 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 304