1/*
2**
3** Copyright 2007, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9**     http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18package android.content.pm;
19
20import android.content.ComponentName;
21import android.content.Intent;
22import android.content.IntentFilter;
23import android.content.pm.ActivityInfo;
24import android.content.pm.ApplicationInfo;
25import android.content.pm.ContainerEncryptionParams;
26import android.content.pm.EphemeralApplicationInfo;
27import android.content.pm.FeatureInfo;
28import android.content.pm.IPackageInstallObserver2;
29import android.content.pm.IPackageInstaller;
30import android.content.pm.IPackageDeleteObserver;
31import android.content.pm.IPackageDeleteObserver2;
32import android.content.pm.IPackageDataObserver;
33import android.content.pm.IPackageMoveObserver;
34import android.content.pm.IPackageStatsObserver;
35import android.content.pm.IOnPermissionsChangeListener;
36import android.content.pm.IntentFilterVerificationInfo;
37import android.content.pm.InstrumentationInfo;
38import android.content.pm.KeySet;
39import android.content.pm.PackageInfo;
40import android.content.pm.ManifestDigest;
41import android.content.pm.PackageCleanItem;
42import android.content.pm.ParceledListSlice;
43import android.content.pm.ProviderInfo;
44import android.content.pm.PermissionGroupInfo;
45import android.content.pm.PermissionInfo;
46import android.content.pm.ResolveInfo;
47import android.content.pm.ServiceInfo;
48import android.content.pm.UserInfo;
49import android.content.pm.VerifierDeviceIdentity;
50import android.graphics.Bitmap;
51import android.net.Uri;
52import android.os.Bundle;
53import android.os.ParcelFileDescriptor;
54import android.content.IntentSender;
55
56/**
57 *  See {@link PackageManager} for documentation on most of the APIs
58 *  here.
59 *
60 *  {@hide}
61 */
62interface IPackageManager {
63    void checkPackageStartable(String packageName, int userId);
64    boolean isPackageAvailable(String packageName, int userId);
65    PackageInfo getPackageInfo(String packageName, int flags, int userId);
66    int getPackageUid(String packageName, int flags, int userId);
67    int[] getPackageGids(String packageName, int flags, int userId);
68
69    String[] currentToCanonicalPackageNames(in String[] names);
70    String[] canonicalToCurrentPackageNames(in String[] names);
71
72    PermissionInfo getPermissionInfo(String name, int flags);
73
74    ParceledListSlice queryPermissionsByGroup(String group, int flags);
75
76    PermissionGroupInfo getPermissionGroupInfo(String name, int flags);
77
78    ParceledListSlice getAllPermissionGroups(int flags);
79
80    ApplicationInfo getApplicationInfo(String packageName, int flags ,int userId);
81
82    ActivityInfo getActivityInfo(in ComponentName className, int flags, int userId);
83
84    boolean activitySupportsIntent(in ComponentName className, in Intent intent,
85            String resolvedType);
86
87    ActivityInfo getReceiverInfo(in ComponentName className, int flags, int userId);
88
89    ServiceInfo getServiceInfo(in ComponentName className, int flags, int userId);
90
91    ProviderInfo getProviderInfo(in ComponentName className, int flags, int userId);
92
93    int checkPermission(String permName, String pkgName, int userId);
94
95    int checkUidPermission(String permName, int uid);
96
97    boolean addPermission(in PermissionInfo info);
98
99    void removePermission(String name);
100
101    void grantRuntimePermission(String packageName, String permissionName, int userId);
102
103    void revokeRuntimePermission(String packageName, String permissionName, int userId);
104
105    void resetRuntimePermissions();
106
107    int getPermissionFlags(String permissionName, String packageName, int userId);
108
109    void updatePermissionFlags(String permissionName, String packageName, int flagMask,
110            int flagValues, int userId);
111
112    void updatePermissionFlagsForAllApps(int flagMask, int flagValues, int userId);
113
114    boolean shouldShowRequestPermissionRationale(String permissionName,
115            String packageName, int userId);
116
117    boolean isProtectedBroadcast(String actionName);
118
119    int checkSignatures(String pkg1, String pkg2);
120
121    int checkUidSignatures(int uid1, int uid2);
122
123    List<String> getAllPackages();
124
125    String[] getPackagesForUid(int uid);
126
127    String getNameForUid(int uid);
128
129    int getUidForSharedUser(String sharedUserName);
130
131    int getFlagsForUid(int uid);
132
133    int getPrivateFlagsForUid(int uid);
134
135    boolean isUidPrivileged(int uid);
136
137    String[] getAppOpPermissionPackages(String permissionName);
138
139    ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId);
140
141    boolean canForwardTo(in Intent intent, String resolvedType, int sourceUserId, int targetUserId);
142
143    ParceledListSlice queryIntentActivities(in Intent intent,
144            String resolvedType, int flags, int userId);
145
146    ParceledListSlice queryIntentActivityOptions(
147            in ComponentName caller, in Intent[] specifics,
148            in String[] specificTypes, in Intent intent,
149            String resolvedType, int flags, int userId);
150
151    ParceledListSlice queryIntentReceivers(in Intent intent,
152            String resolvedType, int flags, int userId);
153
154    ResolveInfo resolveService(in Intent intent,
155            String resolvedType, int flags, int userId);
156
157    ParceledListSlice queryIntentServices(in Intent intent,
158            String resolvedType, int flags, int userId);
159
160    ParceledListSlice queryIntentContentProviders(in Intent intent,
161            String resolvedType, int flags, int userId);
162
163    /**
164     * This implements getInstalledPackages via a "last returned row"
165     * mechanism that is not exposed in the API. This is to get around the IPC
166     * limit that kicks in when flags are included that bloat up the data
167     * returned.
168     */
169    ParceledListSlice getInstalledPackages(int flags, in int userId);
170
171    /**
172     * This implements getPackagesHoldingPermissions via a "last returned row"
173     * mechanism that is not exposed in the API. This is to get around the IPC
174     * limit that kicks in when flags are included that bloat up the data
175     * returned.
176     */
177    ParceledListSlice getPackagesHoldingPermissions(in String[] permissions,
178            int flags, int userId);
179
180    /**
181     * This implements getInstalledApplications via a "last returned row"
182     * mechanism that is not exposed in the API. This is to get around the IPC
183     * limit that kicks in when flags are included that bloat up the data
184     * returned.
185     */
186    ParceledListSlice getInstalledApplications(int flags, int userId);
187
188    /**
189     * Retrieve all applications that are marked as persistent.
190     *
191     * @return A List&lt;applicationInfo> containing one entry for each persistent
192     *         application.
193     */
194    ParceledListSlice getPersistentApplications(int flags);
195
196    ProviderInfo resolveContentProvider(String name, int flags, int userId);
197
198    /**
199     * Retrieve sync information for all content providers.
200     *
201     * @param outNames Filled in with a list of the root names of the content
202     *                 providers that can sync.
203     * @param outInfo Filled in with a list of the ProviderInfo for each
204     *                name in 'outNames'.
205     */
206    void querySyncProviders(inout List<String> outNames,
207            inout List<ProviderInfo> outInfo);
208
209    ParceledListSlice queryContentProviders(
210            String processName, int uid, int flags);
211
212    InstrumentationInfo getInstrumentationInfo(
213            in ComponentName className, int flags);
214
215    ParceledListSlice queryInstrumentation(
216            String targetPackage, int flags);
217
218    /** @deprecated Use PackageInstaller instead */
219    void installPackageAsUser(in String originPath,
220            in IPackageInstallObserver2 observer,
221            int flags,
222            in String installerPackageName,
223            int userId);
224
225    void finishPackageInstall(int token, boolean didLaunch);
226
227    void setInstallerPackageName(in String targetPackage, in String installerPackageName);
228
229    /** @deprecated rawr, don't call AIDL methods directly! */
230    void deletePackageAsUser(in String packageName, IPackageDeleteObserver observer,
231            int userId, int flags);
232
233    /**
234     * Delete a package for a specific user.
235     *
236     * @param packageName The fully qualified name of the package to delete.
237     * @param observer a callback to use to notify when the package deletion in finished.
238     * @param userId the id of the user for whom to delete the package
239     * @param flags - possible values: {@link #DONT_DELETE_DATA}
240     */
241    void deletePackage(in String packageName, IPackageDeleteObserver2 observer, int userId, int flags);
242
243    String getInstallerPackageName(in String packageName);
244
245    void resetApplicationPreferences(int userId);
246
247    ResolveInfo getLastChosenActivity(in Intent intent,
248            String resolvedType, int flags);
249
250    void setLastChosenActivity(in Intent intent, String resolvedType, int flags,
251            in IntentFilter filter, int match, in ComponentName activity);
252
253    void addPreferredActivity(in IntentFilter filter, int match,
254            in ComponentName[] set, in ComponentName activity, int userId);
255
256    void replacePreferredActivity(in IntentFilter filter, int match,
257            in ComponentName[] set, in ComponentName activity, int userId);
258
259    void clearPackagePreferredActivities(String packageName);
260
261    int getPreferredActivities(out List<IntentFilter> outFilters,
262            out List<ComponentName> outActivities, String packageName);
263
264    void addPersistentPreferredActivity(in IntentFilter filter, in ComponentName activity, int userId);
265
266    void clearPackagePersistentPreferredActivities(String packageName, int userId);
267
268    void addCrossProfileIntentFilter(in IntentFilter intentFilter, String ownerPackage,
269            int sourceUserId, int targetUserId, int flags);
270
271    void clearCrossProfileIntentFilters(int sourceUserId, String ownerPackage);
272
273    String[] setPackagesSuspendedAsUser(in String[] packageNames, boolean suspended, int userId);
274    boolean isPackageSuspendedForUser(String packageName, int userId);
275
276    /**
277     * Backup/restore support - only the system uid may use these.
278     */
279    byte[] getPreferredActivityBackup(int userId);
280    void restorePreferredActivities(in byte[] backup, int userId);
281    byte[] getDefaultAppsBackup(int userId);
282    void restoreDefaultApps(in byte[] backup, int userId);
283    byte[] getIntentFilterVerificationBackup(int userId);
284    void restoreIntentFilterVerification(in byte[] backup, int userId);
285    byte[] getPermissionGrantBackup(int userId);
286    void restorePermissionGrants(in byte[] backup, int userId);
287
288    /**
289     * Report the set of 'Home' activity candidates, plus (if any) which of them
290     * is the current "always use this one" setting.
291     */
292     ComponentName getHomeActivities(out List<ResolveInfo> outHomeCandidates);
293
294    void setHomeActivity(in ComponentName className, int userId);
295
296    /**
297     * As per {@link android.content.pm.PackageManager#setComponentEnabledSetting}.
298     */
299    void setComponentEnabledSetting(in ComponentName componentName,
300            in int newState, in int flags, int userId);
301
302    /**
303     * As per {@link android.content.pm.PackageManager#getComponentEnabledSetting}.
304     */
305    int getComponentEnabledSetting(in ComponentName componentName, int userId);
306
307    /**
308     * As per {@link android.content.pm.PackageManager#setApplicationEnabledSetting}.
309     */
310    void setApplicationEnabledSetting(in String packageName, in int newState, int flags,
311            int userId, String callingPackage);
312
313    /**
314     * As per {@link android.content.pm.PackageManager#getApplicationEnabledSetting}.
315     */
316    int getApplicationEnabledSetting(in String packageName, int userId);
317
318    /**
319     * Logs process start information (including APK hash) to the security log.
320     */
321    void logAppProcessStartIfNeeded(String processName, int uid, String seinfo, String apkFile,
322            int pid);
323
324    /**
325     * As per {@link android.content.pm.PackageManager#flushPackageRestrictionsAsUser}.
326     */
327    void flushPackageRestrictionsAsUser(in int userId);
328
329    /**
330     * Set whether the given package should be considered stopped, making
331     * it not visible to implicit intents that filter out stopped packages.
332     */
333    void setPackageStoppedState(String packageName, boolean stopped, int userId);
334
335    /**
336     * Free storage by deleting LRU sorted list of cache files across
337     * all applications. If the currently available free storage
338     * on the device is greater than or equal to the requested
339     * free storage, no cache files are cleared. If the currently
340     * available storage on the device is less than the requested
341     * free storage, some or all of the cache files across
342     * all applications are deleted (based on last accessed time)
343     * to increase the free storage space on the device to
344     * the requested value. There is no guarantee that clearing all
345     * the cache files from all applications will clear up
346     * enough storage to achieve the desired value.
347     * @param freeStorageSize The number of bytes of storage to be
348     * freed by the system. Say if freeStorageSize is XX,
349     * and the current free storage is YY,
350     * if XX is less than YY, just return. if not free XX-YY number
351     * of bytes if possible.
352     * @param observer call back used to notify when
353     * the operation is completed
354     */
355     void freeStorageAndNotify(in String volumeUuid, in long freeStorageSize,
356             IPackageDataObserver observer);
357
358    /**
359     * Free storage by deleting LRU sorted list of cache files across
360     * all applications. If the currently available free storage
361     * on the device is greater than or equal to the requested
362     * free storage, no cache files are cleared. If the currently
363     * available storage on the device is less than the requested
364     * free storage, some or all of the cache files across
365     * all applications are deleted (based on last accessed time)
366     * to increase the free storage space on the device to
367     * the requested value. There is no guarantee that clearing all
368     * the cache files from all applications will clear up
369     * enough storage to achieve the desired value.
370     * @param freeStorageSize The number of bytes of storage to be
371     * freed by the system. Say if freeStorageSize is XX,
372     * and the current free storage is YY,
373     * if XX is less than YY, just return. if not free XX-YY number
374     * of bytes if possible.
375     * @param pi IntentSender call back used to
376     * notify when the operation is completed.May be null
377     * to indicate that no call back is desired.
378     */
379     void freeStorage(in String volumeUuid, in long freeStorageSize,
380             in IntentSender pi);
381
382    /**
383     * Delete all the cache files in an applications cache directory
384     * @param packageName The package name of the application whose cache
385     * files need to be deleted
386     * @param observer a callback used to notify when the deletion is finished.
387     */
388    void deleteApplicationCacheFiles(in String packageName, IPackageDataObserver observer);
389
390    /**
391     * Delete all the cache files in an applications cache directory
392     * @param packageName The package name of the application whose cache
393     * files need to be deleted
394     * @param userId the user to delete application cache for
395     * @param observer a callback used to notify when the deletion is finished.
396     */
397    void deleteApplicationCacheFilesAsUser(in String packageName, int userId, IPackageDataObserver observer);
398
399    /**
400     * Clear the user data directory of an application.
401     * @param packageName The package name of the application whose cache
402     * files need to be deleted
403     * @param observer a callback used to notify when the operation is completed.
404     */
405    void clearApplicationUserData(in String packageName, IPackageDataObserver observer, int userId);
406
407    /**
408     * Clear the profile data of an application.
409     * @param packageName The package name of the application whose profile data
410     * need to be deleted
411     */
412    void clearApplicationProfileData(in String packageName);
413
414   /**
415     * Get package statistics including the code, data and cache size for
416     * an already installed package
417     * @param packageName The package name of the application
418     * @param userHandle Which user the size should be retrieved for
419     * @param observer a callback to use to notify when the asynchronous
420     * retrieval of information is complete.
421     */
422    void getPackageSizeInfo(in String packageName, int userHandle, IPackageStatsObserver observer);
423
424    /**
425     * Get a list of shared libraries that are available on the
426     * system.
427     */
428    String[] getSystemSharedLibraryNames();
429
430    /**
431     * Get a list of features that are available on the
432     * system.
433     */
434    ParceledListSlice getSystemAvailableFeatures();
435
436    boolean hasSystemFeature(String name, int version);
437
438    void enterSafeMode();
439    boolean isSafeMode();
440    void systemReady();
441    boolean hasSystemUidErrors();
442
443    /**
444     * Ask the package manager to fstrim the disk if needed.
445     */
446    void performFstrimIfNeeded();
447
448    /**
449     * Ask the package manager to update packages if needed.
450     */
451    void updatePackagesIfNeeded();
452
453    /**
454     * Notify the package manager that a package is going to be used and why.
455     *
456     * See PackageManager.NOTIFY_PACKAGE_USE_* for reasons.
457     */
458    void notifyPackageUse(String packageName, int reason);
459
460    /**
461     * Ask the package manager to perform dex-opt (if needed) on the given
462     * package if it already hasn't done so.
463     *
464     * In most cases, apps are dexopted in advance and this function will
465     * be a no-op.
466     */
467    boolean performDexOptIfNeeded(String packageName);
468
469    /**
470     * Ask the package manager to perform a dex-opt for the given reason. The package
471     * manager will map the reason to a compiler filter according to the current system
472     * configuration.
473     */
474    boolean performDexOpt(String packageName, boolean checkProfiles,
475            int compileReason, boolean force);
476    /**
477     * Ask the package manager to perform a dex-opt with the given compiler filter.
478     *
479     * Note: exposed only for the shell command to allow moving packages explicitly to a
480     *       definite state.
481     */
482    boolean performDexOptMode(String packageName, boolean checkProfiles,
483            String targetCompilerFilter, boolean force);
484
485    /**
486     * Ask the package manager to dump profiles associated with a package.
487     */
488    void dumpProfiles(String packageName);
489
490    void forceDexOpt(String packageName);
491
492    /**
493     * Update status of external media on the package manager to scan and
494     * install packages installed on the external media. Like say the
495     * MountService uses this to call into the package manager to update
496     * status of sdcard.
497     */
498    void updateExternalMediaStatus(boolean mounted, boolean reportStatus);
499
500    PackageCleanItem nextPackageToClean(in PackageCleanItem lastPackage);
501
502    int getMoveStatus(int moveId);
503
504    void registerMoveCallback(in IPackageMoveObserver callback);
505    void unregisterMoveCallback(in IPackageMoveObserver callback);
506
507    int movePackage(in String packageName, in String volumeUuid);
508    int movePrimaryStorage(in String volumeUuid);
509
510    boolean addPermissionAsync(in PermissionInfo info);
511
512    boolean setInstallLocation(int loc);
513    int getInstallLocation();
514
515    int installExistingPackageAsUser(String packageName, int userId);
516
517    void verifyPendingInstall(int id, int verificationCode);
518    void extendVerificationTimeout(int id, int verificationCodeAtTimeout, long millisecondsToDelay);
519
520    void verifyIntentFilter(int id, int verificationCode, in List<String> failedDomains);
521    int getIntentVerificationStatus(String packageName, int userId);
522    boolean updateIntentVerificationStatus(String packageName, int status, int userId);
523    ParceledListSlice getIntentFilterVerifications(String packageName);
524    ParceledListSlice getAllIntentFilters(String packageName);
525
526    boolean setDefaultBrowserPackageName(String packageName, int userId);
527    String getDefaultBrowserPackageName(int userId);
528
529    VerifierDeviceIdentity getVerifierDeviceIdentity();
530
531    boolean isFirstBoot();
532    boolean isOnlyCoreApps();
533    boolean isUpgrade();
534
535    void setPermissionEnforced(String permission, boolean enforced);
536    boolean isPermissionEnforced(String permission);
537
538    /** Reflects current DeviceStorageMonitorService state */
539    boolean isStorageLow();
540
541    boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, int userId);
542    boolean getApplicationHiddenSettingAsUser(String packageName, int userId);
543
544    IPackageInstaller getPackageInstaller();
545
546    boolean setBlockUninstallForUser(String packageName, boolean blockUninstall, int userId);
547    boolean getBlockUninstallForUser(String packageName, int userId);
548
549    KeySet getKeySetByAlias(String packageName, String alias);
550    KeySet getSigningKeySet(String packageName);
551    boolean isPackageSignedByKeySet(String packageName, in KeySet ks);
552    boolean isPackageSignedByKeySetExactly(String packageName, in KeySet ks);
553
554    void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
555    void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
556    void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId);
557
558    boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId);
559
560    String getPermissionControllerPackageName();
561
562    ParceledListSlice getEphemeralApplications(int userId);
563    byte[] getEphemeralApplicationCookie(String packageName, int userId);
564    boolean setEphemeralApplicationCookie(String packageName, in byte[] cookie, int userId);
565    Bitmap getEphemeralApplicationIcon(String packageName, int userId);
566    boolean isEphemeralApplication(String packageName, int userId);
567
568    boolean setRequiredForSystemUser(String packageName, boolean systemUserApp);
569
570    String getServicesSystemSharedLibraryPackageName();
571    String getSharedSystemSharedLibraryPackageName();
572
573    boolean isPackageDeviceAdminOnAnyUser(String packageName);
574
575    List<String> getPreviousCodePaths(in String packageName);
576}
577