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
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Overall information about the contents of a package.  This corresponds
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to all of the information collected from AndroidManifest.xml.
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PackageInfo implements Parcelable {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The name of this package.  From the <manifest> tag's "name"
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute.
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String packageName;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
346c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey     * The names of any installed split APKs for this package.
356c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey     */
366c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey    public String[] splitNames;
376c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey
386c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey    /**
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The version number of this package, as specified by the <manifest>
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * tag's {@link android.R.styleable#AndroidManifest_versionCode versionCode}
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int versionCode;
4488d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The version name of this package, as specified by the <manifest>
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * tag's {@link android.R.styleable#AndroidManifest_versionName versionName}
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute.
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String versionName;
5188d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey
5288d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey    /**
5388d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey     * The revision number of the base APK for this package, as specified by the
5488d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey     * <manifest> tag's
5588d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey     * {@link android.R.styleable#AndroidManifest_revisionCode revisionCode}
5688d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey     * attribute.
5788d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey     */
5888d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey    public int baseRevisionCode;
5988d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey
6088d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey    /**
6188d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey     * The revision number of any split APKs for this package, as specified by
6288d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey     * the <manifest> tag's
6388d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey     * {@link android.R.styleable#AndroidManifest_revisionCode revisionCode}
6488d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey     * attribute. Indexes are a 1:1 mapping against {@link #splitNames}.
6588d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey     */
6688d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey    public int[] splitRevisionCodes;
6788d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The shared user ID name of this package, as specified by the <manifest>
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * tag's {@link android.R.styleable#AndroidManifest_sharedUserId sharedUserId}
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute.
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String sharedUserId;
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The shared user ID label of this package, as specified by the <manifest>
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * tag's {@link android.R.styleable#AndroidManifest_sharedUserLabel sharedUserLabel}
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * attribute.
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int sharedUserLabel;
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information collected from the <application> tag, or null if
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * there was none.
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ApplicationInfo applicationInfo;
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8978d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn     * The time at which the app was first installed.  Units are as
9078d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn     * per {@link System#currentTimeMillis()}.
9178d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn     */
9278d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn    public long firstInstallTime;
9378d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn
9478d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn    /**
9578d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn     * The time at which the app was last updated.  Units are as
9678d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn     * per {@link System#currentTimeMillis()}.
9778d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn     */
9878d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn    public long lastUpdateTime;
9978d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn
10078d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn    /**
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * All kernel group-IDs that have been assigned to this package.
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This is only filled in if the flag {@link PackageManager#GET_GIDS} was set.
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int[] gids;
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestActivity
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <activity>} tags included under <application>,
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_ACTIVITIES} was set.
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ActivityInfo[] activities;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestReceiver
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <receiver>} tags included under <application>,
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_RECEIVERS} was set.
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ActivityInfo[] receivers;
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestService
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <service>} tags included under <application>,
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_SERVICES} was set.
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ServiceInfo[] services;
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestProvider
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <provider>} tags included under <application>,
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_PROVIDERS} was set.
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ProviderInfo[] providers;
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestInstrumentation
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <instrumentation>} tags included under <manifest>,
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_INSTRUMENTATION} was set.
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public InstrumentationInfo[] instrumentation;
1456788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestPermission
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <permission>} tags included under <manifest>,
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_PERMISSIONS} was set.
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public PermissionInfo[] permissions;
1536788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all {@link android.R.styleable#AndroidManifestUsesPermission
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <uses-permission>} tags included under <manifest>,
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none.  This is only filled in if the flag
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#GET_PERMISSIONS} was set.  This list includes
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * all permissions requested, even those that were not granted or known
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by the system at install time.
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String[] requestedPermissions;
1636788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
165e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     * Array of flags of all {@link android.R.styleable#AndroidManifestUsesPermission
166e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     * <uses-permission>} tags included under <manifest>,
167e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     * or null if there were none.  This is only filled in if the flag
168e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     * {@link PackageManager#GET_PERMISSIONS} was set.  Each value matches
169e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     * the corresponding entry in {@link #requestedPermissions}, and will have
170c6d1c345f41cf817bf2c07c97b97107d94296064Svetoslav     * the flag {@link #REQUESTED_PERMISSION_GRANTED} set as appropriate.
171e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     */
172e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public int[] requestedPermissionsFlags;
173e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
174e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    /**
175e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     * Flag for {@link #requestedPermissionsFlags}: the requested permission
176e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     * is required for the application to run; the user can not optionally
17732eb5b182458c05f744f9ab2963a13ef620ce069Nick Kralevich     * disable it.  Currently all permissions are required.
178c6d1c345f41cf817bf2c07c97b97107d94296064Svetoslav     *
179c6d1c345f41cf817bf2c07c97b97107d94296064Svetoslav     * @removed We do not support required permissions.
180e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     */
181e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public static final int REQUESTED_PERMISSION_REQUIRED = 1<<0;
182e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
183e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    /**
184e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     * Flag for {@link #requestedPermissionsFlags}: the requested permission
185e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     * is currently granted to the application.
186e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn     */
187e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public static final int REQUESTED_PERMISSION_GRANTED = 1<<1;
188e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
189e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    /**
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Array of all signatures read from the package file.  This is only filled
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in if the flag {@link PackageManager#GET_SIGNATURES} was set.
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Signature[] signatures;
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Application specified preferred configuration
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestUsesConfiguration
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * &lt;uses-configuration&gt;} tags included under &lt;manifest&gt;,
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if there were none. This is only filled in if the flag
200d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski     * {@link PackageManager#GET_CONFIGURATIONS} was set.
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ConfigurationInfo[] configPreferences;
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn    /**
205da96e137bcc8191c584ada7b5de31eaae92f244fJeff Sharkey     * Features that this application has requested.
206da96e137bcc8191c584ada7b5de31eaae92f244fJeff Sharkey     *
207da96e137bcc8191c584ada7b5de31eaae92f244fJeff Sharkey     * @see FeatureInfo#FLAG_REQUIRED
20849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn     */
20949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn    public FeatureInfo[] reqFeatures;
210117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu
211117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu    /**
212d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski     * Groups of features that this application has requested.
213d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski     * Each group contains a set of features that are required.
214d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski     * A device must match the features listed in {@link #reqFeatures} and one
215d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski     * or more FeatureGroups in order to have satisfied the feature requirement.
216d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski     *
217d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski     * @see FeatureInfo#FLAG_REQUIRED
218d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski     */
219d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski    public FeatureGroupInfo[] featureGroups;
220d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski
221d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski    /**
222117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu     * Constant corresponding to <code>auto</code> in
223117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu     * the {@link android.R.attr#installLocation} attribute.
224117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu     * @hide
225117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu     */
22690d8ee650be988d8479f4f14ae8e541bb4cb034bSuchi Amalapurapu    public static final int INSTALL_LOCATION_UNSPECIFIED = -1;
2276c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey
22890d8ee650be988d8479f4f14ae8e541bb4cb034bSuchi Amalapurapu    /**
2296c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey     * Constant corresponding to <code>auto</code> in the
2306c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey     * {@link android.R.attr#installLocation} attribute.
23190d8ee650be988d8479f4f14ae8e541bb4cb034bSuchi Amalapurapu     */
232117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu    public static final int INSTALL_LOCATION_AUTO = 0;
2336c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey
234117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu    /**
2356c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey     * Constant corresponding to <code>internalOnly</code> in the
2366c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey     * {@link android.R.attr#installLocation} attribute.
237117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu     */
238117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu    public static final int INSTALL_LOCATION_INTERNAL_ONLY = 1;
2396c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey
240117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu    /**
2416c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey     * Constant corresponding to <code>preferExternal</code> in the
2426c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey     * {@link android.R.attr#installLocation} attribute.
243117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu     */
244117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu    public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2;
2456c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey
246117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu    /**
2476c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey     * The install location requested by the package. From the
248117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu     * {@link android.R.attr#installLocation} attribute, one of
2496c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey     * {@link #INSTALL_LOCATION_AUTO}, {@link #INSTALL_LOCATION_INTERNAL_ONLY},
250117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu     * {@link #INSTALL_LOCATION_PREFER_EXTERNAL}
251117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu     */
252117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu    public int installLocation = INSTALL_LOCATION_INTERNAL_ONLY;
253df2e92a535e19c00edd37318d974dab992ccc2c1Amith Yamasani
254df2e92a535e19c00edd37318d974dab992ccc2c1Amith Yamasani    /** @hide */
255272bf3a274daff62995caf05da338c1f2a73dae3Jeff Hao    public boolean coreApp;
256272bf3a274daff62995caf05da338c1f2a73dae3Jeff Hao
257272bf3a274daff62995caf05da338c1f2a73dae3Jeff Hao    /** @hide */
258df2e92a535e19c00edd37318d974dab992ccc2c1Amith Yamasani    public boolean requiredForAllUsers;
259df2e92a535e19c00edd37318d974dab992ccc2c1Amith Yamasani
2600ac1fc9d233b8671f371a71e2a6374b47ef069a9Amith Yamasani    /** @hide */
2610ac1fc9d233b8671f371a71e2a6374b47ef069a9Amith Yamasani    public String restrictedAccountType;
2620ac1fc9d233b8671f371a71e2a6374b47ef069a9Amith Yamasani
263ccbe389b4d2cee16da77685c88fa1475bc08cdb9Amith Yamasani    /** @hide */
264ccbe389b4d2cee16da77685c88fa1475bc08cdb9Amith Yamasani    public String requiredAccountType;
265ccbe389b4d2cee16da77685c88fa1475bc08cdb9Amith Yamasani
26648d22323ce39f9aab003dce74456889b6414af55Mårten Kongstad    /**
26748d22323ce39f9aab003dce74456889b6414af55Mårten Kongstad     * What package, if any, this package will overlay.
26848d22323ce39f9aab003dce74456889b6414af55Mårten Kongstad     *
26948d22323ce39f9aab003dce74456889b6414af55Mårten Kongstad     * Package name of target package, or null.
27048d22323ce39f9aab003dce74456889b6414af55Mårten Kongstad     * @hide
27148d22323ce39f9aab003dce74456889b6414af55Mårten Kongstad     */
27248d22323ce39f9aab003dce74456889b6414af55Mårten Kongstad    public String overlayTarget;
27348d22323ce39f9aab003dce74456889b6414af55Mårten Kongstad
2740434289c45bc18f81f26d66e6bcbf8facf128665Jaekyun Seok    /** @hide */
27542d53f6b1883e3db514ad8d105d23fe6a1e9a59bJaekyun Seok    public int overlayPriority;
27642d53f6b1883e3db514ad8d105d23fe6a1e9a59bJaekyun Seok
27742d53f6b1883e3db514ad8d105d23fe6a1e9a59bJaekyun Seok    /** @hide */
2780434289c45bc18f81f26d66e6bcbf8facf128665Jaekyun Seok    public boolean isStaticOverlay;
2790434289c45bc18f81f26d66e6bcbf8facf128665Jaekyun Seok
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public PackageInfo() {
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28388d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey    @Override
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return "PackageInfo{"
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + Integer.toHexString(System.identityHashCode(this))
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + " " + packageName + "}";
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29088d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey    @Override
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29588d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey    @Override
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int parcelableFlags) {
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(packageName);
2986c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey        dest.writeStringArray(splitNames);
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(versionCode);
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(versionName);
30188d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey        dest.writeInt(baseRevisionCode);
30288d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey        dest.writeIntArray(splitRevisionCodes);
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(sharedUserId);
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(sharedUserLabel);
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (applicationInfo != null) {
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(1);
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            applicationInfo.writeToParcel(dest, parcelableFlags);
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(0);
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
31178d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn        dest.writeLong(firstInstallTime);
31278d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn        dest.writeLong(lastUpdateTime);
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeIntArray(gids);
314b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate        dest.writeTypedArray(activities, parcelableFlags | Parcelable.PARCELABLE_ELIDE_DUPLICATES);
315b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate        dest.writeTypedArray(receivers, parcelableFlags | Parcelable.PARCELABLE_ELIDE_DUPLICATES);
316b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate        dest.writeTypedArray(services, parcelableFlags | Parcelable.PARCELABLE_ELIDE_DUPLICATES);
317b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate        dest.writeTypedArray(providers, parcelableFlags | Parcelable.PARCELABLE_ELIDE_DUPLICATES);
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(instrumentation, parcelableFlags);
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(permissions, parcelableFlags);
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeStringArray(requestedPermissions);
321e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        dest.writeIntArray(requestedPermissionsFlags);
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(signatures, parcelableFlags);
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeTypedArray(configPreferences, parcelableFlags);
32449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn        dest.writeTypedArray(reqFeatures, parcelableFlags);
325d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski        dest.writeTypedArray(featureGroups, parcelableFlags);
326117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu        dest.writeInt(installLocation);
327272bf3a274daff62995caf05da338c1f2a73dae3Jeff Hao        dest.writeInt(coreApp ? 1 : 0);
328df2e92a535e19c00edd37318d974dab992ccc2c1Amith Yamasani        dest.writeInt(requiredForAllUsers ? 1 : 0);
3290ac1fc9d233b8671f371a71e2a6374b47ef069a9Amith Yamasani        dest.writeString(restrictedAccountType);
330ccbe389b4d2cee16da77685c88fa1475bc08cdb9Amith Yamasani        dest.writeString(requiredAccountType);
33148d22323ce39f9aab003dce74456889b6414af55Mårten Kongstad        dest.writeString(overlayTarget);
3320434289c45bc18f81f26d66e6bcbf8facf128665Jaekyun Seok        dest.writeInt(isStaticOverlay ? 1 : 0);
33342d53f6b1883e3db514ad8d105d23fe6a1e9a59bJaekyun Seok        dest.writeInt(overlayPriority);
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Parcelable.Creator<PackageInfo> CREATOR
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            = new Parcelable.Creator<PackageInfo>() {
33888d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey        @Override
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public PackageInfo createFromParcel(Parcel source) {
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new PackageInfo(source);
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
34388d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey        @Override
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public PackageInfo[] newArray(int size) {
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new PackageInfo[size];
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private PackageInfo(Parcel source) {
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        packageName = source.readString();
35188d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey        splitNames = source.createStringArray();
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        versionCode = source.readInt();
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        versionName = source.readString();
35488d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey        baseRevisionCode = source.readInt();
35588d2a3c0e1b4a8c53a489db5d627beb80b1b9957Jeff Sharkey        splitRevisionCodes = source.createIntArray();
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sharedUserId = source.readString();
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sharedUserLabel = source.readInt();
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int hasApp = source.readInt();
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (hasApp != 0) {
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source);
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
36278d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn        firstInstallTime = source.readLong();
36378d688369a2240009d3bbe4126996a973b2e2fe2Dianne Hackborn        lastUpdateTime = source.readLong();
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        gids = source.createIntArray();
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        activities = source.createTypedArray(ActivityInfo.CREATOR);
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        receivers = source.createTypedArray(ActivityInfo.CREATOR);
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        services = source.createTypedArray(ServiceInfo.CREATOR);
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        providers = source.createTypedArray(ProviderInfo.CREATOR);
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        instrumentation = source.createTypedArray(InstrumentationInfo.CREATOR);
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        permissions = source.createTypedArray(PermissionInfo.CREATOR);
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        requestedPermissions = source.createStringArray();
372e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        requestedPermissionsFlags = source.createIntArray();
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        signatures = source.createTypedArray(Signature.CREATOR);
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        configPreferences = source.createTypedArray(ConfigurationInfo.CREATOR);
37549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn        reqFeatures = source.createTypedArray(FeatureInfo.CREATOR);
376d3edfde51bd069a63e820282421d1a534fcf00ceAdam Lesinski        featureGroups = source.createTypedArray(FeatureGroupInfo.CREATOR);
377117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu        installLocation = source.readInt();
378272bf3a274daff62995caf05da338c1f2a73dae3Jeff Hao        coreApp = source.readInt() != 0;
379df2e92a535e19c00edd37318d974dab992ccc2c1Amith Yamasani        requiredForAllUsers = source.readInt() != 0;
3800ac1fc9d233b8671f371a71e2a6374b47ef069a9Amith Yamasani        restrictedAccountType = source.readString();
381ccbe389b4d2cee16da77685c88fa1475bc08cdb9Amith Yamasani        requiredAccountType = source.readString();
38248d22323ce39f9aab003dce74456889b6414af55Mårten Kongstad        overlayTarget = source.readString();
3830434289c45bc18f81f26d66e6bcbf8facf128665Jaekyun Seok        isStaticOverlay = source.readInt() != 0;
38442d53f6b1883e3db514ad8d105d23fe6a1e9a59bJaekyun Seok        overlayPriority = source.readInt();
385b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate
386b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate        // The component lists were flattened with the redundant ApplicationInfo
387b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate        // instances omitted.  Distribute the canonical one here as appropriate.
388b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate        if (applicationInfo != null) {
389b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate            propagateApplicationInfo(applicationInfo, activities);
390b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate            propagateApplicationInfo(applicationInfo, receivers);
391b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate            propagateApplicationInfo(applicationInfo, services);
392b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate            propagateApplicationInfo(applicationInfo, providers);
393b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate        }
394b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate    }
395b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate
396b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate    private void propagateApplicationInfo(ApplicationInfo appInfo, ComponentInfo[] components) {
397b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate        if (components != null) {
398b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate            for (ComponentInfo ci : components) {
399b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate                ci.applicationInfo = appInfo;
400b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate            }
401b91167620904eb439d0e8c09eab532fe7524ff6dChristopher Tate        }
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
404