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; 2488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevotimport android.os.UserHandle; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer; 2785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkeyimport android.util.Slog; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.text.Collator; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Comparator; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information that is returned from resolving an intent 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * against an IntentFilter. This partially corresponds to 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information collected from the AndroidManifest.xml's 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <intent> tags. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ResolveInfo implements Parcelable { 3985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey private static final String TAG = "ResolveInfo"; 4085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey * The activity or broadcast receiver that corresponds to this resolution 4385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey * match, if this resolution is for an activity or broadcast receiver. 4485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey * Exactly one of {@link #activityInfo}, {@link #serviceInfo}, or 4585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey * {@link #providerInfo} will be non-null. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ActivityInfo activityInfo; 489ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey * The service that corresponds to this resolution match, if this resolution 5185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey * is for a service. Exactly one of {@link #activityInfo}, 5285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey * {@link #serviceInfo}, or {@link #providerInfo} will be non-null. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ServiceInfo serviceInfo; 5585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey 5685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey /** 5785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey * The provider that corresponds to this resolution match, if this 5885f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey * resolution is for a provider. Exactly one of {@link #activityInfo}, 5985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey * {@link #serviceInfo}, or {@link #providerInfo} will be non-null. 6085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey */ 6185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey public ProviderInfo providerInfo; 6285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The IntentFilter that was matched for this ResolveInfo. 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public IntentFilter filter; 679ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The declared priority of this match. Comes from the "priority" 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * attribute or, if not set, defaults to 0. Higher values are a higher 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority. 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int priority; 749ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Order of result according to the user's preference. If the user 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has not set a preference for this result, the value is 0; higher 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values are a higher priority. 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int preferredOrder; 819ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The system's evaluation of how well the activity matches the 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * IntentFilter. This is a match constant, a combination of 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link IntentFilter#MATCH_CATEGORY_MASK IntentFilter.MATCH_CATEGORY_MASK} 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link IntentFilter#MATCH_ADJUSTMENT_MASK IntentFiler.MATCH_ADJUSTMENT_MASK}. 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int match; 899ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Only set when returned by 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PackageManager#queryIntentActivityOptions}, this tells you 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which of the given specific intents this result came from. 0 is the 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first in the list, < 0 means it came from the generic Intent query. 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int specificIndex = -1; 979ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This filter has specified the Intent.CATEGORY_DEFAULT, meaning it 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * would like to be considered a default action that the user can 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * perform on this data. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isDefault; 1049ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A string resource identifier (in the package's resources) of this 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * match's label. From the "label" attribute or, if not set, 0. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int labelRes; 1109ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The actual string retrieve from <var>labelRes</var> or null if none 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * was provided. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence nonLocalizedLabel; 1169ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A drawable resource identifier (in the package's resources) of this 1199ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * match's icon. From the "icon" attribute or, if not set, 0. It is 1209ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * set only if the icon can be obtained by resource id alone. 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int icon; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 125eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Optional -- if non-null, the {@link #labelRes} and {@link #icon} 126eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * resources will be loaded from this package, rather than the one 127eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * containing the resolved component. 128eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 129eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public String resolvePackageName; 130d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn 131d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn /** 13288cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot * If not equal to UserHandle.USER_CURRENT, then the intent will be forwarded to this user. 13388cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot * @hide 13488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot */ 13588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot public int targetUserId; 13688cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot 13788cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot /** 1389ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * Set to true if the icon cannot be obtained by resource ids alone. 1399ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * It is set to true for ResolveInfos from the managed profile: They need to 1409ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * have their icon badged, so it cannot be obtained by resource ids alone. 14188cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot * @hide 14288cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot */ 1437f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot public boolean noResourceId; 14488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot 14588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot /** 1469ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * Same as {@link #icon} but it will always correspond to "icon" attribute 1479ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * regardless of {@link #noResourceId} value. 1489ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * @hide 1499ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka */ 1509ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka public int iconResourceId; 1519ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 1529ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka /** 153d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn * @hide Target comes from system process? 154d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn */ 155d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn public boolean system; 156d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn 1571c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio /** 1587d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio * @hide Does the associated IntentFilter comes from a Browser ? 1591c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio */ 1607d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio public boolean handleAllWebDataURI; 1611c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio 16285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey private ComponentInfo getComponentInfo() { 16385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey if (activityInfo != null) return activityInfo; 16485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey if (serviceInfo != null) return serviceInfo; 16585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey if (providerInfo != null) return providerInfo; 16685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey throw new IllegalStateException("Missing ComponentInfo!"); 16785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } 16885f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey 169eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current textual label associated with this resolution. This 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the label from 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 1739ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the label can be loaded; usually 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 1769ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a CharSequence containing the resolutions's label. If the 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * item does not have a label, its name is returned. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence loadLabel(PackageManager pm) { 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nonLocalizedLabel != null) { 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nonLocalizedLabel; 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 184eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn CharSequence label; 185eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (resolvePackageName != null && labelRes != 0) { 186eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn label = pm.getText(resolvePackageName, labelRes, null); 187eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (label != null) { 1882aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy return label.toString().trim(); 189eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 190eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 19185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey ComponentInfo ci = getComponentInfo(); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ApplicationInfo ai = ci.applicationInfo; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (labelRes != 0) { 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project label = pm.getText(ci.packageName, labelRes, ai); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (label != null) { 1962aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy return label.toString().trim(); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1992aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy 2002aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy CharSequence data = ci.loadLabel(pm); 2012aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy // Make the data safe 2022aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy if (data != null) data = data.toString().trim(); 2032aba11f6b9b7b202742a11797084a23d0f940c35Romain Guy return data; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2059ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current graphical icon associated with this resolution. This 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the icon from 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 2109ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the icon can be loaded; usually 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 2139ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka * 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a Drawable containing the resolution's icon. If the 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * item does not have an icon, the default activity icon is returned. 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Drawable loadIcon(PackageManager pm) { 2189ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka Drawable dr = null; 2199ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka if (resolvePackageName != null && iconResourceId != 0) { 2209ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka dr = pm.getDrawable(resolvePackageName, iconResourceId, null); 221eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 22285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey ComponentInfo ci = getComponentInfo(); 2239ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka if (dr == null && iconResourceId != 0) { 2249ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka ApplicationInfo ai = ci.applicationInfo; 2259ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka dr = pm.getDrawable(ci.packageName, iconResourceId, ai); 2269ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka } 2279ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka if (dr != null) { 2289ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka return pm.getUserBadgedIcon(dr, new UserHandle(UserHandle.myUserId())); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ci.loadIcon(pm); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2321281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the icon resource identifier to use for this match. If the 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * match defines an icon, that is used; else if the activity defines 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an icon, that is used; else, the application icon is used. 2371281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai * This function does not check noResourceId flag. 2381281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai * 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The icon associated with this match. 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2411281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai final int getIconResourceInternal() { 2429ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka if (iconResourceId != 0) return iconResourceId; 24385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey final ComponentInfo ci = getComponentInfo(); 2447f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot if (ci != null) { 24588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot return ci.getIconResource(); 24688cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot } 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2501281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai /** 2511281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai * Return the icon resource identifier to use for this match. If the 2521281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai * match defines an icon, that is used; else if the activity defines 2531281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai * an icon, that is used; else, the application icon is used. 2541281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai * 2551281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai * @return The icon associated with this match. 2561281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai */ 2571281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai public final int getIconResource() { 2581281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai if (noResourceId) return 0; 2591281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai return getIconResourceInternal(); 2601281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai } 2611281b1809f0c3d4e0dfe185f7974ac930e260311Ricky Wai 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void dump(Printer pw, String prefix) { 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (filter != null) { 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "Filter:"); 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.dump(pw, prefix + " "); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "priority=" + priority 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " preferredOrder=" + preferredOrder 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " match=0x" + Integer.toHexString(match) 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " specificIndex=" + specificIndex 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " isDefault=" + isDefault); 272eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (resolvePackageName != null) { 273eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn pw.println(prefix + "resolvePackageName=" + resolvePackageName); 274eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 275eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (labelRes != 0 || nonLocalizedLabel != null || icon != 0) { 276eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn pw.println(prefix + "labelRes=0x" + Integer.toHexString(labelRes) 277eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn + " nonLocalizedLabel=" + nonLocalizedLabel 278eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn + " icon=0x" + Integer.toHexString(icon)); 279eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (activityInfo != null) { 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "ActivityInfo:"); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo.dump(pw, prefix + " "); 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (serviceInfo != null) { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "ServiceInfo:"); 285eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn serviceInfo.dump(pw, prefix + " "); 28685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } else if (providerInfo != null) { 28785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey pw.println(prefix + "ProviderInfo:"); 28885f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey providerInfo.dump(pw, prefix + " "); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ResolveInfo() { 29388cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot targetUserId = UserHandle.USER_CURRENT; 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2968da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn public ResolveInfo(ResolveInfo orig) { 2978da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn activityInfo = orig.activityInfo; 2988da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn serviceInfo = orig.serviceInfo; 29985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey providerInfo = orig.providerInfo; 3008da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn filter = orig.filter; 3018da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn priority = orig.priority; 3028da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn preferredOrder = orig.preferredOrder; 3038da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn match = orig.match; 3048da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn specificIndex = orig.specificIndex; 3058da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn labelRes = orig.labelRes; 3068da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn nonLocalizedLabel = orig.nonLocalizedLabel; 3078da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn icon = orig.icon; 3088da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn resolvePackageName = orig.resolvePackageName; 3099ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka noResourceId = orig.noResourceId; 3109ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka iconResourceId = orig.iconResourceId; 3118da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn system = orig.system; 31288cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot targetUserId = orig.targetUserId; 3137d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio handleAllWebDataURI = orig.handleAllWebDataURI; 3148da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn } 3158da429e80d1778d7bcfbfbd64355c70fb466b3ceDianne Hackborn 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 31785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey final ComponentInfo ci = getComponentInfo(); 3186d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn StringBuilder sb = new StringBuilder(128); 3196d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append("ResolveInfo{"); 3206d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(Integer.toHexString(System.identityHashCode(this))); 3216d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(' '); 3226d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn ComponentName.appendShortString(sb, ci.packageName, ci.name); 3236d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn if (priority != 0) { 3246d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(" p="); 3256d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(priority); 3266d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn } 3276d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn if (preferredOrder != 0) { 3286d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(" o="); 3296d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(preferredOrder); 3306d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn } 3316d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(" m=0x"); 3326d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append(Integer.toHexString(match)); 33388cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot if (targetUserId != UserHandle.USER_CURRENT) { 33488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot sb.append(" targetUserId="); 33588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot sb.append(targetUserId); 33688cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot } 3376d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn sb.append('}'); 3386d8dfbd8149942f25f2b9643a12f1fb38f3be834Dianne Hackborn return sb.toString(); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int parcelableFlags) { 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (activityInfo != null) { 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo.writeToParcel(dest, parcelableFlags); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (serviceInfo != null) { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(2); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serviceInfo.writeToParcel(dest, parcelableFlags); 35285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } else if (providerInfo != null) { 35385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey dest.writeInt(3); 35485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey providerInfo.writeToParcel(dest, parcelableFlags); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (filter != null) { 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.writeToParcel(dest, parcelableFlags); 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(priority); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(preferredOrder); 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(match); 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(specificIndex); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(labelRes); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(nonLocalizedLabel, dest, parcelableFlags); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(icon); 371eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dest.writeString(resolvePackageName); 37288cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot dest.writeInt(targetUserId); 373d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn dest.writeInt(system ? 1 : 0); 3747f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot dest.writeInt(noResourceId ? 1 : 0); 3759ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka dest.writeInt(iconResourceId); 3767d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio dest.writeInt(handleAllWebDataURI ? 1 : 0); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<ResolveInfo> CREATOR 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Creator<ResolveInfo>() { 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ResolveInfo createFromParcel(Parcel source) { 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ResolveInfo(source); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ResolveInfo[] newArray(int size) { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ResolveInfo[size]; 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ResolveInfo(Parcel source) { 39085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey activityInfo = null; 39185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey serviceInfo = null; 39285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey providerInfo = null; 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (source.readInt()) { 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 1: 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activityInfo = ActivityInfo.CREATOR.createFromParcel(source); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 2: 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serviceInfo = ServiceInfo.CREATOR.createFromParcel(source); 39985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey break; 40085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey case 3: 40185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey providerInfo = ProviderInfo.CREATOR.createFromParcel(source); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 40485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey Slog.w(TAG, "Missing ComponentInfo!"); 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (source.readInt() != 0) { 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter = IntentFilter.CREATOR.createFromParcel(source); 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project priority = source.readInt(); 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project preferredOrder = source.readInt(); 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project match = source.readInt(); 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project specificIndex = source.readInt(); 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project labelRes = source.readInt(); 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedLabel 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project icon = source.readInt(); 418eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn resolvePackageName = source.readString(); 41988cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot targetUserId = source.readInt(); 420d99b293d5f11b784d7406f5398bc654920b42482Dianne Hackborn system = source.readInt() != 0; 4217f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot noResourceId = source.readInt() != 0; 4229ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka iconResourceId = source.readInt(); 4237d014cec63939f7aca2a8014f45cd4c9a3e1aa0cFabrice Di Meglio handleAllWebDataURI = source.readInt() != 0; 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4259ded760f6378b79ae5f91fe694744981a4154d0bSudheer Shanka 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class DisplayNameComparator 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project implements Comparator<ResolveInfo> { 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DisplayNameComparator(PackageManager pm) { 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPM = pm; 4300256c6f8d31c95f730d286b9e2ebae94736f7098Adam Powell mCollator.setStrength(Collator.PRIMARY); 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int compare(ResolveInfo a, ResolveInfo b) { 43488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot // We want to put the one targeted to another user at the end of the dialog. 43588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot if (a.targetUserId != UserHandle.USER_CURRENT) { 43688cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot return 1; 43788cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot } 43888cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot if (b.targetUserId != UserHandle.USER_CURRENT) { 43988cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot return -1; 44088cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot } 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence sa = a.loadLabel(mPM); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sa == null) sa = a.activityInfo.name; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence sb = b.loadLabel(mPM); 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sb == null) sb = b.activityInfo.name; 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4460256c6f8d31c95f730d286b9e2ebae94736f7098Adam Powell return mCollator.compare(sa.toString(), sb.toString()); 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4490256c6f8d31c95f730d286b9e2ebae94736f7098Adam Powell private final Collator mCollator = Collator.getInstance(); 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PackageManager mPM; 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 453