• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.content.pm;
18 
19 import android.os.Parcel;
20 import android.os.Parcelable;
21 
22 /**
23  * Overall information about the contents of a package.  This corresponds
24  * to all of the information collected from AndroidManifest.xml.
25  */
26 public class PackageInfo implements Parcelable {
27     /**
28      * The name of this package.  From the <manifest> tag's "name"
29      * attribute.
30      */
31     public String packageName;
32 
33     /**
34      * The version number of this package, as specified by the <manifest>
35      * tag's {@link android.R.styleable#AndroidManifest_versionCode versionCode}
36      * attribute.
37      */
38     public int versionCode;
39 
40     /**
41      * The version name of this package, as specified by the <manifest>
42      * tag's {@link android.R.styleable#AndroidManifest_versionName versionName}
43      * attribute.
44      */
45     public String versionName;
46 
47     /**
48      * The shared user ID name of this package, as specified by the <manifest>
49      * tag's {@link android.R.styleable#AndroidManifest_sharedUserId sharedUserId}
50      * attribute.
51      */
52     public String sharedUserId;
53 
54     /**
55      * The shared user ID label of this package, as specified by the <manifest>
56      * tag's {@link android.R.styleable#AndroidManifest_sharedUserLabel sharedUserLabel}
57      * attribute.
58      */
59     public int sharedUserLabel;
60 
61     /**
62      * Information collected from the <application> tag, or null if
63      * there was none.
64      */
65     public ApplicationInfo applicationInfo;
66 
67     /**
68      * The time at which the app was first installed.  Units are as
69      * per {@link System#currentTimeMillis()}.
70      */
71     public long firstInstallTime;
72 
73     /**
74      * The time at which the app was last updated.  Units are as
75      * per {@link System#currentTimeMillis()}.
76      */
77     public long lastUpdateTime;
78 
79     /**
80      * All kernel group-IDs that have been assigned to this package.
81      * This is only filled in if the flag {@link PackageManager#GET_GIDS} was set.
82      */
83     public int[] gids;
84 
85     /**
86      * Array of all {@link android.R.styleable#AndroidManifestActivity
87      * <activity>} tags included under <application>,
88      * or null if there were none.  This is only filled in if the flag
89      * {@link PackageManager#GET_ACTIVITIES} was set.
90      */
91     public ActivityInfo[] activities;
92 
93     /**
94      * Array of all {@link android.R.styleable#AndroidManifestReceiver
95      * <receiver>} tags included under <application>,
96      * or null if there were none.  This is only filled in if the flag
97      * {@link PackageManager#GET_RECEIVERS} was set.
98      */
99     public ActivityInfo[] receivers;
100 
101     /**
102      * Array of all {@link android.R.styleable#AndroidManifestService
103      * <service>} tags included under <application>,
104      * or null if there were none.  This is only filled in if the flag
105      * {@link PackageManager#GET_SERVICES} was set.
106      */
107     public ServiceInfo[] services;
108 
109     /**
110      * Array of all {@link android.R.styleable#AndroidManifestProvider
111      * <provider>} tags included under <application>,
112      * or null if there were none.  This is only filled in if the flag
113      * {@link PackageManager#GET_PROVIDERS} was set.
114      */
115     public ProviderInfo[] providers;
116 
117     /**
118      * Array of all {@link android.R.styleable#AndroidManifestInstrumentation
119      * <instrumentation>} tags included under <manifest>,
120      * or null if there were none.  This is only filled in if the flag
121      * {@link PackageManager#GET_INSTRUMENTATION} was set.
122      */
123     public InstrumentationInfo[] instrumentation;
124 
125     /**
126      * Array of all {@link android.R.styleable#AndroidManifestPermission
127      * <permission>} tags included under <manifest>,
128      * or null if there were none.  This is only filled in if the flag
129      * {@link PackageManager#GET_PERMISSIONS} was set.
130      */
131     public PermissionInfo[] permissions;
132 
133     /**
134      * Array of all {@link android.R.styleable#AndroidManifestUsesPermission
135      * <uses-permission>} tags included under <manifest>,
136      * or null if there were none.  This is only filled in if the flag
137      * {@link PackageManager#GET_PERMISSIONS} was set.  This list includes
138      * all permissions requested, even those that were not granted or known
139      * by the system at install time.
140      */
141     public String[] requestedPermissions;
142 
143     /**
144      * Array of flags of all {@link android.R.styleable#AndroidManifestUsesPermission
145      * <uses-permission>} tags included under <manifest>,
146      * or null if there were none.  This is only filled in if the flag
147      * {@link PackageManager#GET_PERMISSIONS} was set.  Each value matches
148      * the corresponding entry in {@link #requestedPermissions}, and will have
149      * the flags {@link #REQUESTED_PERMISSION_REQUIRED} and
150      * {@link #REQUESTED_PERMISSION_GRANTED} set as appropriate.
151      */
152     public int[] requestedPermissionsFlags;
153 
154     /**
155      * Flag for {@link #requestedPermissionsFlags}: the requested permission
156      * is required for the application to run; the user can not optionally
157      * disable it.  Currently all permissions are required.
158      */
159     public static final int REQUESTED_PERMISSION_REQUIRED = 1<<0;
160 
161     /**
162      * Flag for {@link #requestedPermissionsFlags}: the requested permission
163      * is currently granted to the application.
164      */
165     public static final int REQUESTED_PERMISSION_GRANTED = 1<<1;
166 
167     /**
168      * Array of all signatures read from the package file.  This is only filled
169      * in if the flag {@link PackageManager#GET_SIGNATURES} was set.
170      */
171     public Signature[] signatures;
172 
173     /**
174      * Application specified preferred configuration
175      * {@link android.R.styleable#AndroidManifestUsesConfiguration
176      * &lt;uses-configuration&gt;} tags included under &lt;manifest&gt;,
177      * or null if there were none. This is only filled in if the flag
178      * {@link PackageManager#GET_CONFIGURATIONS} was set.
179      */
180     public ConfigurationInfo[] configPreferences;
181 
182     /**
183      * The features that this application has said it requires.
184      */
185     public FeatureInfo[] reqFeatures;
186 
187     /**
188      * Constant corresponding to <code>auto</code> in
189      * the {@link android.R.attr#installLocation} attribute.
190      * @hide
191      */
192     public static final int INSTALL_LOCATION_UNSPECIFIED = -1;
193     /**
194      * Constant corresponding to <code>auto</code> in
195      * the {@link android.R.attr#installLocation} attribute.
196      * @hide
197      */
198     public static final int INSTALL_LOCATION_AUTO = 0;
199     /**
200      * Constant corresponding to <code>internalOnly</code> in
201      * the {@link android.R.attr#installLocation} attribute.
202      * @hide
203      */
204     public static final int INSTALL_LOCATION_INTERNAL_ONLY = 1;
205     /**
206      * Constant corresponding to <code>preferExternal</code> in
207      * the {@link android.R.attr#installLocation} attribute.
208      * @hide
209      */
210     public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2;
211     /**
212      * The install location requested by the activity.  From the
213      * {@link android.R.attr#installLocation} attribute, one of
214      * {@link #INSTALL_LOCATION_AUTO},
215      * {@link #INSTALL_LOCATION_INTERNAL_ONLY},
216      * {@link #INSTALL_LOCATION_PREFER_EXTERNAL}
217      * @hide
218      */
219     public int installLocation = INSTALL_LOCATION_INTERNAL_ONLY;
220 
221     /** @hide */
222     public boolean requiredForAllUsers;
223 
224     /** @hide */
225     public String restrictedAccountType;
226 
227     /** @hide */
228     public String requiredAccountType;
229 
PackageInfo()230     public PackageInfo() {
231     }
232 
toString()233     public String toString() {
234         return "PackageInfo{"
235             + Integer.toHexString(System.identityHashCode(this))
236             + " " + packageName + "}";
237     }
238 
describeContents()239     public int describeContents() {
240         return 0;
241     }
242 
writeToParcel(Parcel dest, int parcelableFlags)243     public void writeToParcel(Parcel dest, int parcelableFlags) {
244         dest.writeString(packageName);
245         dest.writeInt(versionCode);
246         dest.writeString(versionName);
247         dest.writeString(sharedUserId);
248         dest.writeInt(sharedUserLabel);
249         if (applicationInfo != null) {
250             dest.writeInt(1);
251             applicationInfo.writeToParcel(dest, parcelableFlags);
252         } else {
253             dest.writeInt(0);
254         }
255         dest.writeLong(firstInstallTime);
256         dest.writeLong(lastUpdateTime);
257         dest.writeIntArray(gids);
258         dest.writeTypedArray(activities, parcelableFlags);
259         dest.writeTypedArray(receivers, parcelableFlags);
260         dest.writeTypedArray(services, parcelableFlags);
261         dest.writeTypedArray(providers, parcelableFlags);
262         dest.writeTypedArray(instrumentation, parcelableFlags);
263         dest.writeTypedArray(permissions, parcelableFlags);
264         dest.writeStringArray(requestedPermissions);
265         dest.writeIntArray(requestedPermissionsFlags);
266         dest.writeTypedArray(signatures, parcelableFlags);
267         dest.writeTypedArray(configPreferences, parcelableFlags);
268         dest.writeTypedArray(reqFeatures, parcelableFlags);
269         dest.writeInt(installLocation);
270         dest.writeInt(requiredForAllUsers ? 1 : 0);
271         dest.writeString(restrictedAccountType);
272         dest.writeString(requiredAccountType);
273     }
274 
275     public static final Parcelable.Creator<PackageInfo> CREATOR
276             = new Parcelable.Creator<PackageInfo>() {
277         public PackageInfo createFromParcel(Parcel source) {
278             return new PackageInfo(source);
279         }
280 
281         public PackageInfo[] newArray(int size) {
282             return new PackageInfo[size];
283         }
284     };
285 
PackageInfo(Parcel source)286     private PackageInfo(Parcel source) {
287         packageName = source.readString();
288         versionCode = source.readInt();
289         versionName = source.readString();
290         sharedUserId = source.readString();
291         sharedUserLabel = source.readInt();
292         int hasApp = source.readInt();
293         if (hasApp != 0) {
294             applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source);
295         }
296         firstInstallTime = source.readLong();
297         lastUpdateTime = source.readLong();
298         gids = source.createIntArray();
299         activities = source.createTypedArray(ActivityInfo.CREATOR);
300         receivers = source.createTypedArray(ActivityInfo.CREATOR);
301         services = source.createTypedArray(ServiceInfo.CREATOR);
302         providers = source.createTypedArray(ProviderInfo.CREATOR);
303         instrumentation = source.createTypedArray(InstrumentationInfo.CREATOR);
304         permissions = source.createTypedArray(PermissionInfo.CREATOR);
305         requestedPermissions = source.createStringArray();
306         requestedPermissionsFlags = source.createIntArray();
307         signatures = source.createTypedArray(Signature.CREATOR);
308         configPreferences = source.createTypedArray(ConfigurationInfo.CREATOR);
309         reqFeatures = source.createTypedArray(FeatureInfo.CREATOR);
310         installLocation = source.readInt();
311         requiredForAllUsers = source.readInt() != 0;
312         restrictedAccountType = source.readString();
313         requiredAccountType = source.readString();
314     }
315 }
316