ComponentInfo.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content.pm; 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer; 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Base class containing information common to all application components 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ({@link ActivityInfo}, {@link ServiceInfo}). This class is not intended 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to be used by itself; it is simply here to share common definitions 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between all application components. As such, it does not itself 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implement Parcelable, but does provide convenience methods to assist 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the implementation of Parcelable in subclasses. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ComponentInfo extends PackageItemInfo { 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Global information about the application/package this component is a 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * part of. 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ApplicationInfo applicationInfo; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the process this component should run in. 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * From the "android:process" attribute or, if not set, the same 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as <var>applicationInfo.processName</var>. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String processName; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether or not this component may be instantiated. Note that this value can be 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * overriden by the one in its parent {@link ApplicationInfo}. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean enabled = true; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set to true if this component is available for use by other applications. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Comes from {@link android.R.attr#exported android:exported} of the 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <activity>, <receiver>, <service>, or 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <provider> tag. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean exported = false; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentInfo() { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentInfo(ComponentInfo orig) { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(orig); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project applicationInfo = orig.applicationInfo; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project processName = orig.processName; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enabled = orig.enabled; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project exported = orig.exported; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override public CharSequence loadLabel(PackageManager pm) { 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nonLocalizedLabel != null) { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nonLocalizedLabel; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ApplicationInfo ai = applicationInfo; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence label; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (labelRes != 0) { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project label = pm.getText(packageName, labelRes, ai); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (label != null) { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return label; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ai.nonLocalizedLabel != null) { 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ai.nonLocalizedLabel; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ai.labelRes != 0) { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project label = pm.getText(packageName, ai.labelRes, ai); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (label != null) { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return label; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return name; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override public Drawable loadIcon(PackageManager pm) { 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ApplicationInfo ai = applicationInfo; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Drawable dr; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (icon != 0) { 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dr = pm.getDrawable(packageName, icon, ai); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dr != null) { 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return dr; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ai.icon != 0) { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dr = pm.getDrawable(packageName, ai.icon, ai); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dr != null) { 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return dr; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return pm.getDefaultActivityIcon(); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the icon resource identifier to use for this component. If 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the component defines an icon, that is used; else, the application 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * icon is used. 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The icon associated with this component. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getIconResource() { 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return icon != 0 ? icon : applicationInfo.icon; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void dumpFront(Printer pw, String prefix) { 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.dumpFront(pw, prefix); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "enabled=" + enabled + " exported=" + exported 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " processName=" + processName); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void dumpBack(Printer pw, String prefix) { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (applicationInfo != null) { 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "ApplicationInfo:"); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project applicationInfo.dump(pw, prefix + " "); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "ApplicationInfo: null"); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.dumpBack(pw, prefix); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int parcelableFlags) { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.writeToParcel(dest, parcelableFlags); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project applicationInfo.writeToParcel(dest, parcelableFlags); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(processName); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(enabled ? 1 : 0); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(exported ? 1 : 0); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected ComponentInfo(Parcel source) { 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(source); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project processName = source.readString(); 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enabled = (source.readInt() != 0); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project exported = (source.readInt() != 0); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 139