package android.content.pm; import android.os.Parcel; import android.os.Parcelable; /** * Overall information about the contents of a package. This corresponds * to all of the information collected from AndroidManifest.xml. */ public class PackageInfo implements Parcelable { /** * The name of this package. From the <manifest> tag's "name" * attribute. */ public String packageName; /** * The version number of this package, as specified by the <manifest> * tag's {@link android.R.styleable#AndroidManifest_versionCode versionCode} * attribute. */ public int versionCode; /** * The version name of this package, as specified by the <manifest> * tag's {@link android.R.styleable#AndroidManifest_versionName versionName} * attribute. */ public String versionName; /** * The shared user ID name of this package, as specified by the <manifest> * tag's {@link android.R.styleable#AndroidManifest_sharedUserId sharedUserId} * attribute. */ public String sharedUserId; /** * The shared user ID label of this package, as specified by the <manifest> * tag's {@link android.R.styleable#AndroidManifest_sharedUserLabel sharedUserLabel} * attribute. */ public int sharedUserLabel; /** * Information collected from the <application> tag, or null if * there was none. */ public ApplicationInfo applicationInfo; /** * All kernel group-IDs that have been assigned to this package. * This is only filled in if the flag {@link PackageManager#GET_GIDS} was set. */ public int[] gids; /** * Array of all {@link android.R.styleable#AndroidManifestActivity * <activity>} tags included under <application>, * or null if there were none. This is only filled in if the flag * {@link PackageManager#GET_ACTIVITIES} was set. */ public ActivityInfo[] activities; /** * Array of all {@link android.R.styleable#AndroidManifestReceiver * <receiver>} tags included under <application>, * or null if there were none. This is only filled in if the flag * {@link PackageManager#GET_RECEIVERS} was set. */ public ActivityInfo[] receivers; /** * Array of all {@link android.R.styleable#AndroidManifestService * <service>} tags included under <application>, * or null if there were none. This is only filled in if the flag * {@link PackageManager#GET_SERVICES} was set. */ public ServiceInfo[] services; /** * Array of all {@link android.R.styleable#AndroidManifestProvider * <provider>} tags included under <application>, * or null if there were none. This is only filled in if the flag * {@link PackageManager#GET_PROVIDERS} was set. */ public ProviderInfo[] providers; /** * Array of all {@link android.R.styleable#AndroidManifestInstrumentation * <instrumentation>} tags included under <manifest>, * or null if there were none. This is only filled in if the flag * {@link PackageManager#GET_INSTRUMENTATION} was set. */ public InstrumentationInfo[] instrumentation; /** * Array of all {@link android.R.styleable#AndroidManifestPermission * <permission>} tags included under <manifest>, * or null if there were none. This is only filled in if the flag * {@link PackageManager#GET_PERMISSIONS} was set. */ public PermissionInfo[] permissions; /** * Array of all {@link android.R.styleable#AndroidManifestUsesPermission * <uses-permission>} tags included under <manifest>, * or null if there were none. This is only filled in if the flag * {@link PackageManager#GET_PERMISSIONS} was set. This list includes * all permissions requested, even those that were not granted or known * by the system at install time. */ public String[] requestedPermissions; /** * Array of all signatures read from the package file. This is only filled * in if the flag {@link PackageManager#GET_SIGNATURES} was set. */ public Signature[] signatures; /** * Application specified preferred configuration * {@link android.R.styleable#AndroidManifestUsesConfiguration * <uses-configuration>} tags included under <manifest>, * or null if there were none. This is only filled in if the flag * {@link PackageManager#GET_CONFIGURATIONS} was set. */ public ConfigurationInfo[] configPreferences; public PackageInfo() { } public String toString() { return "PackageInfo{" + Integer.toHexString(System.identityHashCode(this)) + " " + packageName + "}"; } public int describeContents() { return 0; } public void writeToParcel(Parcel dest, int parcelableFlags) { dest.writeString(packageName); dest.writeInt(versionCode); dest.writeString(versionName); dest.writeString(sharedUserId); dest.writeInt(sharedUserLabel); if (applicationInfo != null) { dest.writeInt(1); applicationInfo.writeToParcel(dest, parcelableFlags); } else { dest.writeInt(0); } dest.writeIntArray(gids); dest.writeTypedArray(activities, parcelableFlags); dest.writeTypedArray(receivers, parcelableFlags); dest.writeTypedArray(services, parcelableFlags); dest.writeTypedArray(providers, parcelableFlags); dest.writeTypedArray(instrumentation, parcelableFlags); dest.writeTypedArray(permissions, parcelableFlags); dest.writeStringArray(requestedPermissions); dest.writeTypedArray(signatures, parcelableFlags); dest.writeTypedArray(configPreferences, parcelableFlags); } public static final Parcelable.Creator<PackageInfo> CREATOR = new Parcelable.Creator<PackageInfo>() { public PackageInfo createFromParcel(Parcel source) { return new PackageInfo(source); } public PackageInfo[] newArray(int size) { return new PackageInfo[size]; } }; private PackageInfo(Parcel source) { packageName = source.readString(); versionCode = source.readInt(); versionName = source.readString(); sharedUserId = source.readString(); sharedUserLabel = source.readInt(); int hasApp = source.readInt(); if (hasApp != 0) { applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source); } gids = source.createIntArray(); activities = source.createTypedArray(ActivityInfo.CREATOR); receivers = source.createTypedArray(ActivityInfo.CREATOR); services = source.createTypedArray(ServiceInfo.CREATOR); providers = source.createTypedArray(ProviderInfo.CREATOR); instrumentation = source.createTypedArray(InstrumentationInfo.CREATOR); permissions = source.createTypedArray(PermissionInfo.CREATOR); requestedPermissions = source.createStringArray(); signatures = source.createTypedArray(Signature.CREATOR); configPreferences = source.createTypedArray(ConfigurationInfo.CREATOR); } }