Home | History | Annotate | Download | only in pm
      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 
     18 package android.content.pm;
     19 
     20 import android.content.ComponentName;
     21 import android.content.Intent;
     22 import android.content.IntentFilter;
     23 import android.content.pm.ActivityInfo;
     24 import android.content.pm.ApplicationInfo;
     25 import android.content.pm.ChangedPackages;
     26 import android.content.pm.InstantAppInfo;
     27 import android.content.pm.FeatureInfo;
     28 import android.content.pm.IDexModuleRegisterCallback;
     29 import android.content.pm.IPackageInstaller;
     30 import android.content.pm.IPackageDeleteObserver;
     31 import android.content.pm.IPackageDeleteObserver2;
     32 import android.content.pm.IPackageDataObserver;
     33 import android.content.pm.IPackageMoveObserver;
     34 import android.content.pm.IPackageStatsObserver;
     35 import android.content.pm.IOnPermissionsChangeListener;
     36 import android.content.pm.IntentFilterVerificationInfo;
     37 import android.content.pm.InstrumentationInfo;
     38 import android.content.pm.KeySet;
     39 import android.content.pm.PackageInfo;
     40 import android.content.pm.PackageCleanItem;
     41 import android.content.pm.ParceledListSlice;
     42 import android.content.pm.ProviderInfo;
     43 import android.content.pm.PermissionGroupInfo;
     44 import android.content.pm.PermissionInfo;
     45 import android.content.pm.ResolveInfo;
     46 import android.content.pm.ServiceInfo;
     47 import android.content.pm.UserInfo;
     48 import android.content.pm.VerifierDeviceIdentity;
     49 import android.content.pm.VersionedPackage;
     50 import android.content.pm.dex.IArtManager;
     51 import android.graphics.Bitmap;
     52 import android.net.Uri;
     53 import android.os.ParcelFileDescriptor;
     54 import android.os.PersistableBundle;
     55 import android.content.IntentSender;
     56 
     57 /**
     58  *  See {@link PackageManager} for documentation on most of the APIs
     59  *  here.
     60  *
     61  *  {@hide}
     62  */
     63 interface IPackageManager {
     64     void checkPackageStartable(String packageName, int userId);
     65     boolean isPackageAvailable(String packageName, int userId);
     66     PackageInfo getPackageInfo(String packageName, int flags, int userId);
     67     PackageInfo getPackageInfoVersioned(in VersionedPackage versionedPackage,
     68             int flags, int userId);
     69     int getPackageUid(String packageName, int flags, int userId);
     70     int[] getPackageGids(String packageName, int flags, int userId);
     71 
     72     String[] currentToCanonicalPackageNames(in String[] names);
     73     String[] canonicalToCurrentPackageNames(in String[] names);
     74 
     75     PermissionInfo getPermissionInfo(String name, String packageName, int flags);
     76 
     77     ParceledListSlice queryPermissionsByGroup(String group, int flags);
     78 
     79     PermissionGroupInfo getPermissionGroupInfo(String name, int flags);
     80 
     81     ParceledListSlice getAllPermissionGroups(int flags);
     82 
     83     ApplicationInfo getApplicationInfo(String packageName, int flags ,int userId);
     84 
     85     ActivityInfo getActivityInfo(in ComponentName className, int flags, int userId);
     86 
     87     boolean activitySupportsIntent(in ComponentName className, in Intent intent,
     88             String resolvedType);
     89 
     90     ActivityInfo getReceiverInfo(in ComponentName className, int flags, int userId);
     91 
     92     ServiceInfo getServiceInfo(in ComponentName className, int flags, int userId);
     93 
     94     ProviderInfo getProviderInfo(in ComponentName className, int flags, int userId);
     95 
     96     int checkPermission(String permName, String pkgName, int userId);
     97 
     98     int checkUidPermission(String permName, int uid);
     99 
    100     boolean addPermission(in PermissionInfo info);
    101 
    102     void removePermission(String name);
    103 
    104     void grantRuntimePermission(String packageName, String permissionName, int userId);
    105 
    106     void revokeRuntimePermission(String packageName, String permissionName, int userId);
    107 
    108     void resetRuntimePermissions();
    109 
    110     int getPermissionFlags(String permissionName, String packageName, int userId);
    111 
    112     void updatePermissionFlags(String permissionName, String packageName, int flagMask,
    113             int flagValues, int userId);
    114 
    115     void updatePermissionFlagsForAllApps(int flagMask, int flagValues, int userId);
    116 
    117     boolean shouldShowRequestPermissionRationale(String permissionName,
    118             String packageName, int userId);
    119 
    120     boolean isProtectedBroadcast(String actionName);
    121 
    122     int checkSignatures(String pkg1, String pkg2);
    123 
    124     int checkUidSignatures(int uid1, int uid2);
    125 
    126     List<String> getAllPackages();
    127 
    128     String[] getPackagesForUid(int uid);
    129 
    130     String getNameForUid(int uid);
    131     String[] getNamesForUids(in int[] uids);
    132 
    133     int getUidForSharedUser(String sharedUserName);
    134 
    135     int getFlagsForUid(int uid);
    136 
    137     int getPrivateFlagsForUid(int uid);
    138 
    139     boolean isUidPrivileged(int uid);
    140 
    141     String[] getAppOpPermissionPackages(String permissionName);
    142 
    143     ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId);
    144 
    145     ResolveInfo findPersistentPreferredActivity(in Intent intent, int userId);
    146 
    147     boolean canForwardTo(in Intent intent, String resolvedType, int sourceUserId, int targetUserId);
    148 
    149     ParceledListSlice queryIntentActivities(in Intent intent,
    150             String resolvedType, int flags, int userId);
    151 
    152     ParceledListSlice queryIntentActivityOptions(
    153             in ComponentName caller, in Intent[] specifics,
    154             in String[] specificTypes, in Intent intent,
    155             String resolvedType, int flags, int userId);
    156 
    157     ParceledListSlice queryIntentReceivers(in Intent intent,
    158             String resolvedType, int flags, int userId);
    159 
    160     ResolveInfo resolveService(in Intent intent,
    161             String resolvedType, int flags, int userId);
    162 
    163     ParceledListSlice queryIntentServices(in Intent intent,
    164             String resolvedType, int flags, int userId);
    165 
    166     ParceledListSlice queryIntentContentProviders(in Intent intent,
    167             String resolvedType, int flags, int userId);
    168 
    169     /**
    170      * This implements getInstalledPackages via a "last returned row"
    171      * mechanism that is not exposed in the API. This is to get around the IPC
    172      * limit that kicks in when flags are included that bloat up the data
    173      * returned.
    174      */
    175     ParceledListSlice getInstalledPackages(int flags, in int userId);
    176 
    177     /**
    178      * This implements getPackagesHoldingPermissions via a "last returned row"
    179      * mechanism that is not exposed in the API. This is to get around the IPC
    180      * limit that kicks in when flags are included that bloat up the data
    181      * returned.
    182      */
    183     ParceledListSlice getPackagesHoldingPermissions(in String[] permissions,
    184             int flags, int userId);
    185 
    186     /**
    187      * This implements getInstalledApplications via a "last returned row"
    188      * mechanism that is not exposed in the API. This is to get around the IPC
    189      * limit that kicks in when flags are included that bloat up the data
    190      * returned.
    191      */
    192     ParceledListSlice getInstalledApplications(int flags, int userId);
    193 
    194     /**
    195      * Retrieve all applications that are marked as persistent.
    196      *
    197      * @return A List&lt;applicationInfo> containing one entry for each persistent
    198      *         application.
    199      */
    200     ParceledListSlice getPersistentApplications(int flags);
    201 
    202     ProviderInfo resolveContentProvider(String name, int flags, int userId);
    203 
    204     /**
    205      * Retrieve sync information for all content providers.
    206      *
    207      * @param outNames Filled in with a list of the root names of the content
    208      *                 providers that can sync.
    209      * @param outInfo Filled in with a list of the ProviderInfo for each
    210      *                name in 'outNames'.
    211      */
    212     void querySyncProviders(inout List<String> outNames,
    213             inout List<ProviderInfo> outInfo);
    214 
    215     ParceledListSlice queryContentProviders(
    216             String processName, int uid, int flags, String metaDataKey);
    217 
    218     InstrumentationInfo getInstrumentationInfo(
    219             in ComponentName className, int flags);
    220 
    221     ParceledListSlice queryInstrumentation(
    222             String targetPackage, int flags);
    223 
    224     void finishPackageInstall(int token, boolean didLaunch);
    225 
    226     void setInstallerPackageName(in String targetPackage, in String installerPackageName);
    227 
    228     void setApplicationCategoryHint(String packageName, int categoryHint, String callerPackageName);
    229 
    230     /** @deprecated rawr, don't call AIDL methods directly! */
    231     void deletePackageAsUser(in String packageName, int versionCode,
    232             IPackageDeleteObserver observer, int userId, int flags);
    233 
    234     /**
    235      * Delete a package for a specific user.
    236      *
    237      * @param versionedPackage The package to delete.
    238      * @param observer a callback to use to notify when the package deletion in finished.
    239      * @param userId the id of the user for whom to delete the package
    240      * @param flags - possible values: {@link #DONT_DELETE_DATA}
    241      */
    242     void deletePackageVersioned(in VersionedPackage versionedPackage,
    243             IPackageDeleteObserver2 observer, int userId, int flags);
    244 
    245     String getInstallerPackageName(in String packageName);
    246 
    247     void resetApplicationPreferences(int userId);
    248 
    249     ResolveInfo getLastChosenActivity(in Intent intent,
    250             String resolvedType, int flags);
    251 
    252     void setLastChosenActivity(in Intent intent, String resolvedType, int flags,
    253             in IntentFilter filter, int match, in ComponentName activity);
    254 
    255     void addPreferredActivity(in IntentFilter filter, int match,
    256             in ComponentName[] set, in ComponentName activity, int userId);
    257 
    258     void replacePreferredActivity(in IntentFilter filter, int match,
    259             in ComponentName[] set, in ComponentName activity, int userId);
    260 
    261     void clearPackagePreferredActivities(String packageName);
    262 
    263     int getPreferredActivities(out List<IntentFilter> outFilters,
    264             out List<ComponentName> outActivities, String packageName);
    265 
    266     void addPersistentPreferredActivity(in IntentFilter filter, in ComponentName activity, int userId);
    267 
    268     void clearPackagePersistentPreferredActivities(String packageName, int userId);
    269 
    270     void addCrossProfileIntentFilter(in IntentFilter intentFilter, String ownerPackage,
    271             int sourceUserId, int targetUserId, int flags);
    272 
    273     void clearCrossProfileIntentFilters(int sourceUserId, String ownerPackage);
    274 
    275     String[] setPackagesSuspendedAsUser(in String[] packageNames, boolean suspended,
    276             in PersistableBundle appExtras, in PersistableBundle launcherExtras,
    277             String dialogMessage, String callingPackage, int userId);
    278 
    279     boolean isPackageSuspendedForUser(String packageName, int userId);
    280 
    281     PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId);
    282 
    283     /**
    284      * Backup/restore support - only the system uid may use these.
    285      */
    286     byte[] getPreferredActivityBackup(int userId);
    287     void restorePreferredActivities(in byte[] backup, int userId);
    288     byte[] getDefaultAppsBackup(int userId);
    289     void restoreDefaultApps(in byte[] backup, int userId);
    290     byte[] getIntentFilterVerificationBackup(int userId);
    291     void restoreIntentFilterVerification(in byte[] backup, int userId);
    292     byte[] getPermissionGrantBackup(int userId);
    293     void restorePermissionGrants(in byte[] backup, int userId);
    294 
    295     /**
    296      * Report the set of 'Home' activity candidates, plus (if any) which of them
    297      * is the current "always use this one" setting.
    298      */
    299      ComponentName getHomeActivities(out List<ResolveInfo> outHomeCandidates);
    300 
    301     void setHomeActivity(in ComponentName className, int userId);
    302 
    303     /**
    304      * As per {@link android.content.pm.PackageManager#setComponentEnabledSetting}.
    305      */
    306     void setComponentEnabledSetting(in ComponentName componentName,
    307             in int newState, in int flags, int userId);
    308 
    309     /**
    310      * As per {@link android.content.pm.PackageManager#getComponentEnabledSetting}.
    311      */
    312     int getComponentEnabledSetting(in ComponentName componentName, int userId);
    313 
    314     /**
    315      * As per {@link android.content.pm.PackageManager#setApplicationEnabledSetting}.
    316      */
    317     void setApplicationEnabledSetting(in String packageName, in int newState, int flags,
    318             int userId, String callingPackage);
    319 
    320     /**
    321      * As per {@link android.content.pm.PackageManager#getApplicationEnabledSetting}.
    322      */
    323     int getApplicationEnabledSetting(in String packageName, int userId);
    324 
    325     /**
    326      * Logs process start information (including APK hash) to the security log.
    327      */
    328     void logAppProcessStartIfNeeded(String processName, int uid, String seinfo, String apkFile,
    329             int pid);
    330 
    331     /**
    332      * As per {@link android.content.pm.PackageManager#flushPackageRestrictionsAsUser}.
    333      */
    334     void flushPackageRestrictionsAsUser(in int userId);
    335 
    336     /**
    337      * Set whether the given package should be considered stopped, making
    338      * it not visible to implicit intents that filter out stopped packages.
    339      */
    340     void setPackageStoppedState(String packageName, boolean stopped, int userId);
    341 
    342     /**
    343      * Free storage by deleting LRU sorted list of cache files across
    344      * all applications. If the currently available free storage
    345      * on the device is greater than or equal to the requested
    346      * free storage, no cache files are cleared. If the currently
    347      * available storage on the device is less than the requested
    348      * free storage, some or all of the cache files across
    349      * all applications are deleted (based on last accessed time)
    350      * to increase the free storage space on the device to
    351      * the requested value. There is no guarantee that clearing all
    352      * the cache files from all applications will clear up
    353      * enough storage to achieve the desired value.
    354      * @param freeStorageSize The number of bytes of storage to be
    355      * freed by the system. Say if freeStorageSize is XX,
    356      * and the current free storage is YY,
    357      * if XX is less than YY, just return. if not free XX-YY number
    358      * of bytes if possible.
    359      * @param observer call back used to notify when
    360      * the operation is completed
    361      */
    362      void freeStorageAndNotify(in String volumeUuid, in long freeStorageSize,
    363              int storageFlags, IPackageDataObserver observer);
    364 
    365     /**
    366      * Free storage by deleting LRU sorted list of cache files across
    367      * all applications. If the currently available free storage
    368      * on the device is greater than or equal to the requested
    369      * free storage, no cache files are cleared. If the currently
    370      * available storage on the device is less than the requested
    371      * free storage, some or all of the cache files across
    372      * all applications are deleted (based on last accessed time)
    373      * to increase the free storage space on the device to
    374      * the requested value. There is no guarantee that clearing all
    375      * the cache files from all applications will clear up
    376      * enough storage to achieve the desired value.
    377      * @param freeStorageSize The number of bytes of storage to be
    378      * freed by the system. Say if freeStorageSize is XX,
    379      * and the current free storage is YY,
    380      * if XX is less than YY, just return. if not free XX-YY number
    381      * of bytes if possible.
    382      * @param pi IntentSender call back used to
    383      * notify when the operation is completed.May be null
    384      * to indicate that no call back is desired.
    385      */
    386      void freeStorage(in String volumeUuid, in long freeStorageSize,
    387              int storageFlags, in IntentSender pi);
    388 
    389     /**
    390      * Delete all the cache files in an applications cache directory
    391      * @param packageName The package name of the application whose cache
    392      * files need to be deleted
    393      * @param observer a callback used to notify when the deletion is finished.
    394      */
    395     void deleteApplicationCacheFiles(in String packageName, IPackageDataObserver observer);
    396 
    397     /**
    398      * Delete all the cache files in an applications cache directory
    399      * @param packageName The package name of the application whose cache
    400      * files need to be deleted
    401      * @param userId the user to delete application cache for
    402      * @param observer a callback used to notify when the deletion is finished.
    403      */
    404     void deleteApplicationCacheFilesAsUser(in String packageName, int userId, IPackageDataObserver observer);
    405 
    406     /**
    407      * Clear the user data directory of an application.
    408      * @param packageName The package name of the application whose cache
    409      * files need to be deleted
    410      * @param observer a callback used to notify when the operation is completed.
    411      */
    412     void clearApplicationUserData(in String packageName, IPackageDataObserver observer, int userId);
    413 
    414     /**
    415      * Clear the profile data of an application.
    416      * @param packageName The package name of the application whose profile data
    417      * need to be deleted
    418      */
    419     void clearApplicationProfileData(in String packageName);
    420 
    421    /**
    422      * Get package statistics including the code, data and cache size for
    423      * an already installed package
    424      * @param packageName The package name of the application
    425      * @param userHandle Which user the size should be retrieved for
    426      * @param observer a callback to use to notify when the asynchronous
    427      * retrieval of information is complete.
    428      */
    429     void getPackageSizeInfo(in String packageName, int userHandle, IPackageStatsObserver observer);
    430 
    431     /**
    432      * Get a list of shared libraries that are available on the
    433      * system.
    434      */
    435     String[] getSystemSharedLibraryNames();
    436 
    437     /**
    438      * Get a list of features that are available on the
    439      * system.
    440      */
    441     ParceledListSlice getSystemAvailableFeatures();
    442 
    443     boolean hasSystemFeature(String name, int version);
    444 
    445     void enterSafeMode();
    446     boolean isSafeMode();
    447     void systemReady();
    448     boolean hasSystemUidErrors();
    449 
    450     /**
    451      * Ask the package manager to fstrim the disk if needed.
    452      */
    453     void performFstrimIfNeeded();
    454 
    455     /**
    456      * Ask the package manager to update packages if needed.
    457      */
    458     void updatePackagesIfNeeded();
    459 
    460     /**
    461      * Notify the package manager that a package is going to be used and why.
    462      *
    463      * See PackageManager.NOTIFY_PACKAGE_USE_* for reasons.
    464      */
    465     oneway void notifyPackageUse(String packageName, int reason);
    466 
    467     /**
    468      * Notify the package manager that a list of dex files have been loaded.
    469      *
    470      * @param loadingPackageName the name of the package who performs the load
    471      * @param classLoadersNames the names of the class loaders present in the loading chain. The
    472      *    list encodes the class loader chain in the natural order. The first class loader has
    473      *    the second one as its parent and so on. The dex files present in the class path of the
    474      *    first class loader will be recorded in the usage file.
    475      * @param classPaths the class paths corresponding to the class loaders names from
    476      *     {@param classLoadersNames}. The the first element corresponds to the first class loader
    477      *     and so on. A classpath is represented as a list of dex files separated by
    478      *     {@code File.pathSeparator}.
    479      *     The dex files found in the first class path will be recorded in the usage file.
    480      * @param loaderIsa the ISA of the loader process
    481      */
    482     oneway void notifyDexLoad(String loadingPackageName, in List<String> classLoadersNames,
    483             in List<String> classPaths, String loaderIsa);
    484 
    485     /**
    486      * Register an application dex module with the package manager.
    487      * The package manager will keep track of the given module for future optimizations.
    488      *
    489      * Dex module optimizations will disable the classpath checking at runtime. The client bares
    490      * the responsibility to ensure that the static assumptions on classes in the optimized code
    491      * hold at runtime (e.g. there's no duplicate classes in the classpath).
    492      *
    493      * Note that the package manager already keeps track of dex modules loaded with
    494      * {@link dalvik.system.DexClassLoader} and {@link dalvik.system.PathClassLoader}.
    495      * This can be called for an eager registration.
    496      *
    497      * The call might take a while and the results will be posted on the main thread, using
    498      * the given callback.
    499      *
    500      * If the module is intended to be shared with other apps, make sure that the file
    501      * permissions allow for it.
    502      * If at registration time the permissions allow for others to read it, the module would
    503      * be marked as a shared module which might undergo a different optimization strategy.
    504      * (usually shared modules will generated larger optimizations artifacts,
    505      * taking more disk space).
    506      *
    507      * @param packageName the package name to which the dex module belongs
    508      * @param dexModulePath the absolute path of the dex module.
    509      * @param isSharedModule whether or not the module is intended to be used by other apps.
    510      * @param callback if not null,
    511      *   {@link android.content.pm.IDexModuleRegisterCallback.IDexModuleRegisterCallback#onDexModuleRegistered}
    512      *   will be called once the registration finishes.
    513      */
    514      oneway void registerDexModule(in String packageName, in String dexModulePath,
    515              in boolean isSharedModule, IDexModuleRegisterCallback callback);
    516 
    517     /**
    518      * Ask the package manager to perform a dex-opt with the given compiler filter.
    519      *
    520      * Note: exposed only for the shell command to allow moving packages explicitly to a
    521      *       definite state.
    522      */
    523     boolean performDexOptMode(String packageName, boolean checkProfiles,
    524             String targetCompilerFilter, boolean force, boolean bootComplete, String splitName);
    525 
    526     /**
    527      * Ask the package manager to perform a dex-opt with the given compiler filter on the
    528      * secondary dex files belonging to the given package.
    529      *
    530      * Note: exposed only for the shell command to allow moving packages explicitly to a
    531      *       definite state.
    532      */
    533     boolean performDexOptSecondary(String packageName,
    534             String targetCompilerFilter, boolean force);
    535 
    536     /**
    537      * Ask the package manager to dump profiles associated with a package.
    538      */
    539     void dumpProfiles(String packageName);
    540 
    541     void forceDexOpt(String packageName);
    542 
    543     /**
    544      * Execute the background dexopt job immediately on packages in packageNames.
    545      * If null, then execute on all packages.
    546      */
    547     boolean runBackgroundDexoptJob(in List<String> packageNames);
    548 
    549     /**
    550      * Reconcile the information we have about the secondary dex files belonging to
    551      * {@code packagName} and the actual dex files. For all dex files that were
    552      * deleted, update the internal records and delete the generated oat files.
    553      */
    554     void reconcileSecondaryDexFiles(String packageName);
    555 
    556     PackageCleanItem nextPackageToClean(in PackageCleanItem lastPackage);
    557 
    558     int getMoveStatus(int moveId);
    559 
    560     void registerMoveCallback(in IPackageMoveObserver callback);
    561     void unregisterMoveCallback(in IPackageMoveObserver callback);
    562 
    563     int movePackage(in String packageName, in String volumeUuid);
    564     int movePrimaryStorage(in String volumeUuid);
    565 
    566     boolean addPermissionAsync(in PermissionInfo info);
    567 
    568     boolean setInstallLocation(int loc);
    569     int getInstallLocation();
    570 
    571     int installExistingPackageAsUser(String packageName, int userId, int installFlags,
    572             int installReason);
    573 
    574     void verifyPendingInstall(int id, int verificationCode);
    575     void extendVerificationTimeout(int id, int verificationCodeAtTimeout, long millisecondsToDelay);
    576 
    577     void verifyIntentFilter(int id, int verificationCode, in List<String> failedDomains);
    578     int getIntentVerificationStatus(String packageName, int userId);
    579     boolean updateIntentVerificationStatus(String packageName, int status, int userId);
    580     ParceledListSlice getIntentFilterVerifications(String packageName);
    581     ParceledListSlice getAllIntentFilters(String packageName);
    582 
    583     boolean setDefaultBrowserPackageName(String packageName, int userId);
    584     String getDefaultBrowserPackageName(int userId);
    585 
    586     VerifierDeviceIdentity getVerifierDeviceIdentity();
    587 
    588     boolean isFirstBoot();
    589     boolean isOnlyCoreApps();
    590     boolean isUpgrade();
    591 
    592     void setPermissionEnforced(String permission, boolean enforced);
    593     boolean isPermissionEnforced(String permission);
    594 
    595     /** Reflects current DeviceStorageMonitorService state */
    596     boolean isStorageLow();
    597 
    598     boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, int userId);
    599     boolean getApplicationHiddenSettingAsUser(String packageName, int userId);
    600 
    601     IPackageInstaller getPackageInstaller();
    602 
    603     boolean setBlockUninstallForUser(String packageName, boolean blockUninstall, int userId);
    604     boolean getBlockUninstallForUser(String packageName, int userId);
    605 
    606     KeySet getKeySetByAlias(String packageName, String alias);
    607     KeySet getSigningKeySet(String packageName);
    608     boolean isPackageSignedByKeySet(String packageName, in KeySet ks);
    609     boolean isPackageSignedByKeySetExactly(String packageName, in KeySet ks);
    610 
    611     void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
    612     void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
    613     void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId);
    614     void grantDefaultPermissionsToEnabledImsServices(in String[] packageNames, int userId);
    615     void grantDefaultPermissionsToEnabledTelephonyDataServices(
    616             in String[] packageNames, int userId);
    617     void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
    618             in String[] packageNames, int userId);
    619     void grantDefaultPermissionsToActiveLuiApp(in String packageName, int userId);
    620     void revokeDefaultPermissionsFromLuiApps(in String[] packageNames, int userId);
    621 
    622     boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId);
    623 
    624     String getPermissionControllerPackageName();
    625 
    626     ParceledListSlice getInstantApps(int userId);
    627     byte[] getInstantAppCookie(String packageName, int userId);
    628     boolean setInstantAppCookie(String packageName, in byte[] cookie, int userId);
    629     Bitmap getInstantAppIcon(String packageName, int userId);
    630     boolean isInstantApp(String packageName, int userId);
    631 
    632     boolean setRequiredForSystemUser(String packageName, boolean systemUserApp);
    633 
    634     /**
    635      * Sets whether or not an update is available. Ostensibly for instant apps
    636      * to force exteranl resolution.
    637      */
    638     void setUpdateAvailable(String packageName, boolean updateAvaialble);
    639 
    640     String getServicesSystemSharedLibraryPackageName();
    641     String getSharedSystemSharedLibraryPackageName();
    642 
    643     ChangedPackages getChangedPackages(int sequenceNumber, int userId);
    644 
    645     boolean isPackageDeviceAdminOnAnyUser(String packageName);
    646 
    647     int getInstallReason(String packageName, int userId);
    648 
    649     ParceledListSlice getSharedLibraries(in String packageName, int flags, int userId);
    650 
    651     boolean canRequestPackageInstalls(String packageName, int userId);
    652 
    653     void deletePreloadsFileCache();
    654 
    655     ComponentName getInstantAppResolverComponent();
    656 
    657     ComponentName getInstantAppResolverSettingsComponent();
    658 
    659     ComponentName getInstantAppInstallerComponent();
    660 
    661     String getInstantAppAndroidId(String packageName, int userId);
    662 
    663     IArtManager getArtManager();
    664 
    665     void setHarmfulAppWarning(String packageName, CharSequence warning, int userId);
    666 
    667     CharSequence getHarmfulAppWarning(String packageName, int userId);
    668 
    669     boolean hasSigningCertificate(String packageName, in byte[] signingCertificate, int flags);
    670 
    671     boolean hasUidSigningCertificate(int uid, in byte[] signingCertificate, int flags);
    672 
    673     String getSystemTextClassifierPackageName();
    674 
    675     boolean isPackageStateProtected(String packageName, int userId);
    676 }
    677