ResolveInfo.java revision 6d8dfbd8149942f25f2b9643a12f1fb38f3be834
115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/* 215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2007 The Android Open Source Project 315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License. 615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at 715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * http://www.apache.org/licenses/LICENSE-2.0 915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software 1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and 1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License. 1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */ 1615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content.pm; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 196d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackbornimport android.content.ComponentName; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.IntentFilter; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 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 * Information that is returned from resolving an intent 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * against an IntentFilter. This partially corresponds to 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information collected from the AndroidManifest.xml's 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <intent> tags. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ResolveInfo implements Parcelable { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 38ca756bfd97d668c8e865c6247ef923b0aad9b065Jeff Hamilton * The activity or broadcast receiver that corresponds to this resolution match, 39ca756bfd97d668c8e865c6247ef923b0aad9b065Jeff Hamilton * if this resolution is for an activity or broadcast receiver. One and only one of this and 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * serviceInfo must be non-null. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ActivityInfo activityInfo; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The service that corresponds to this resolution match, if this 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resolution is for a service. One and only one of this and 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activityInfo must be non-null. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ServiceInfo serviceInfo; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The IntentFilter that was matched for this ResolveInfo. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public IntentFilter filter; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The declared priority of this match. Comes from the "priority" 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * attribute or, if not set, defaults to 0. Higher values are a higher 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority. 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int priority; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Order of result according to the user's preference. If the user 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has not set a preference for this result, the value is 0; higher 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values are a higher priority. 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int preferredOrder; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The system's evaluation of how well the activity matches the 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * IntentFilter. This is a match constant, a combination of 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link IntentFilter#MATCH_CATEGORY_MASK IntentFilter.MATCH_CATEGORY_MASK} 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link IntentFilter#MATCH_ADJUSTMENT_MASK IntentFiler.MATCH_ADJUSTMENT_MASK}. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int match; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Only set when returned by 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PackageManager#queryIntentActivityOptions}, this tells you 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which of the given specific intents this result came from. 0 is the 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first in the list, < 0 means it came from the generic Intent query. 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int specificIndex = -1; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This filter has specified the Intent.CATEGORY_DEFAULT, meaning it 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * would like to be considered a default action that the user can 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * perform on this data. 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isDefault; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A string resource identifier (in the package's resources) of this 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * match's label. From the "label" attribute or, if not set, 0. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int labelRes; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The actual string retrieve from <var>labelRes</var> or null if none 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * was provided. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence nonLocalizedLabel; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A drawable resource identifier (in the package's resources) of this 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * match's icon. From the "icon" attribute or, if not set, 0. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int icon; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 112eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Optional -- if non-null, the {@link #labelRes} and {@link #icon} 113eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * resources will be loaded from this package, rather than the one 114eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * containing the resolved component. 115eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 116eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public String resolvePackageName; 117d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn 118d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn /** 119d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn * @hide Target comes from system process? 120d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn */ 121d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn public boolean system; 122d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn 123eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current textual label associated with this resolution. This 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the label from 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the label can be loaded; usually 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a CharSequence containing the resolutions's label. If the 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * item does not have a label, its name is returned. 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence loadLabel(PackageManager pm) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nonLocalizedLabel != null) { 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nonLocalizedLabel; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 138eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn CharSequence label; 139eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (resolvePackageName != null && labelRes != 0) { 140eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn label = pm.getText(resolvePackageName, labelRes, null); 141eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (label != null) { 1422aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy return label.toString().trim(); 143eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 144eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentInfo ci = activityInfo != null ? activityInfo : serviceInfo; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ApplicationInfo ai = ci.applicationInfo; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (labelRes != 0) { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project label = pm.getText(ci.packageName, labelRes, ai); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (label != null) { 1502aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy return label.toString().trim(); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1532aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy 1542aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy CharSequence data = ci.loadLabel(pm); 1552aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy // Make the data safe 1562aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy if (data != null) data = data.toString().trim(); 1572aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy return data; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current graphical icon associated with this resolution. This 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the icon from 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the icon can be loaded; usually 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a Drawable containing the resolution's icon. If the 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * item does not have an icon, the default activity icon is returned. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Drawable loadIcon(PackageManager pm) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Drawable dr; 173eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (resolvePackageName != null && icon != 0) { 174eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dr = pm.getDrawable(resolvePackageName, icon, null); 175eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (dr != null) { 176eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return dr; 177eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 178eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 17907330791116513710d879c45b2f095cd314cbfd0Jeff Brown ComponentInfo ci = activityInfo != null ? activityInfo : serviceInfo; 18007330791116513710d879c45b2f095cd314cbfd0Jeff Brown ApplicationInfo ai = ci.applicationInfo; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (icon != 0) { 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dr = pm.getDrawable(ci.packageName, icon, ai); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dr != null) { 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return dr; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ci.loadIcon(pm); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the icon resource identifier to use for this match. If the 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * match defines an icon, that is used; else if the activity defines 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an icon, that is used; else, the application icon is used. 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The icon associated with this match. 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getIconResource() { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (icon != 0) return icon; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (activityInfo != null) return activityInfo.getIconResource(); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (serviceInfo != null) return serviceInfo.getIconResource(); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void dump(Printer pw, String prefix) { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (filter != null) { 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "Filter:"); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.dump(pw, prefix + " "); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "priority=" + priority 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " preferredOrder=" + preferredOrder 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " match=0x" + Integer.toHexString(match) 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " specificIndex=" + specificIndex 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " isDefault=" + isDefault); 214eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (resolvePackageName != null) { 215eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn pw.println(prefix + "resolvePackageName=" + resolvePackageName); 216eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 217eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (labelRes != 0 || nonLocalizedLabel != null || icon != 0) { 218eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn pw.println(prefix + "labelRes=0x" + Integer.toHexString(labelRes) 219eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn + " nonLocalizedLabel=" + nonLocalizedLabel 220eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn + " icon=0x" + Integer.toHexString(icon)); 221eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (activityInfo != null) { 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "ActivityInfo:"); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo.dump(pw, prefix + " "); 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (serviceInfo != null) { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "ServiceInfo:"); 227eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn serviceInfo.dump(pw, prefix + " "); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ResolveInfo() { 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2348da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn public ResolveInfo(ResolveInfo orig) { 2358da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn activityInfo = orig.activityInfo; 2368da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn serviceInfo = orig.serviceInfo; 2378da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn filter = orig.filter; 2388da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn priority = orig.priority; 2398da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn preferredOrder = orig.preferredOrder; 2408da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn match = orig.match; 2418da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn specificIndex = orig.specificIndex; 2428da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn labelRes = orig.labelRes; 2438da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn nonLocalizedLabel = orig.nonLocalizedLabel; 2448da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn icon = orig.icon; 2458da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn resolvePackageName = orig.resolvePackageName; 2468da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn system = orig.system; 2478da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn } 2488da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentInfo ci = activityInfo != null ? activityInfo : serviceInfo; 2516d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn StringBuilder sb = new StringBuilder(128); 2526d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append("ResolveInfo{"); 2536d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(Integer.toHexString(System.identityHashCode(this))); 2546d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(' '); 2556d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn ComponentName.appendShortString(sb, ci.packageName, ci.name); 2566d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn if (priority != 0) { 2576d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(" p="); 2586d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(priority); 2596d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn } 2606d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn if (preferredOrder != 0) { 2616d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(" o="); 2626d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(preferredOrder); 2636d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn } 2646d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(" m=0x"); 2656d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(Integer.toHexString(match)); 2666d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append('}'); 2676d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn return sb.toString(); 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int parcelableFlags) { 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (activityInfo != null) { 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo.writeToParcel(dest, parcelableFlags); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (serviceInfo != null) { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(2); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serviceInfo.writeToParcel(dest, parcelableFlags); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (filter != null) { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.writeToParcel(dest, parcelableFlags); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(priority); 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(preferredOrder); 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(match); 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(specificIndex); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(labelRes); 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(nonLocalizedLabel, dest, parcelableFlags); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(icon); 297eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dest.writeString(resolvePackageName); 298d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn dest.writeInt(system ? 1 : 0); 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<ResolveInfo> CREATOR 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Creator<ResolveInfo>() { 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ResolveInfo createFromParcel(Parcel source) { 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ResolveInfo(source); 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ResolveInfo[] newArray(int size) { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ResolveInfo[size]; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ResolveInfo(Parcel source) { 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (source.readInt()) { 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 1: 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo = ActivityInfo.CREATOR.createFromParcel(source); 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serviceInfo = null; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 2: 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serviceInfo = ServiceInfo.CREATOR.createFromParcel(source); 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo = null; 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo = null; 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serviceInfo = null; 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (source.readInt() != 0) { 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter = IntentFilter.CREATOR.createFromParcel(source); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project priority = source.readInt(); 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project preferredOrder = source.readInt(); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project match = source.readInt(); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project specificIndex = source.readInt(); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project labelRes = source.readInt(); 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedLabel 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project icon = source.readInt(); 337eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn resolvePackageName = source.readString(); 338d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn system = source.readInt() != 0; 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class DisplayNameComparator 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project implements Comparator<ResolveInfo> { 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DisplayNameComparator(PackageManager pm) { 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPM = pm; 3450256c6f8d31c95f730d286b9e2ebae94736f7098Adam Powell mCollator.setStrength(Collator.PRIMARY); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int compare(ResolveInfo a, ResolveInfo b) { 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence sa = a.loadLabel(mPM); 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sa == null) sa = a.activityInfo.name; 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence sb = b.loadLabel(mPM); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sb == null) sb = b.activityInfo.name; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3540256c6f8d31c95f730d286b9e2ebae94736f7098Adam Powell return mCollator.compare(sa.toString(), sb.toString()); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3570256c6f8d31c95f730d286b9e2ebae94736f7098Adam Powell private final Collator mCollator = Collator.getInstance(); 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PackageManager mPM; 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 361