/* ** ** Copyright 2007, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ package android.content.pm; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ContainerEncryptionParams; import android.content.pm.FeatureInfo; import android.content.pm.IPackageInstallObserver; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.InstrumentationInfo; import android.content.pm.PackageInfo; import android.content.pm.ManifestDigest; import android.content.pm.PackageCleanItem; import android.content.pm.ParceledListSlice; import android.content.pm.ProviderInfo; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.UserInfo; import android.content.pm.VerificationParams; import android.content.pm.VerifierDeviceIdentity; import android.content.pm.ThemeInfo; import android.net.Uri; import android.os.ParcelFileDescriptor; import android.content.IntentSender; /** * See {@link PackageManager} for documentation on most of the APIs * here. * * {@hide} */ interface IPackageManager { PackageInfo getPackageInfo(String packageName, int flags, int userId); int getPackageUid(String packageName, int userId); int[] getPackageGids(String packageName); String[] currentToCanonicalPackageNames(in String[] names); String[] canonicalToCurrentPackageNames(in String[] names); PermissionInfo getPermissionInfo(String name, int flags); List queryPermissionsByGroup(String group, int flags); PermissionGroupInfo getPermissionGroupInfo(String name, int flags); List getAllPermissionGroups(int flags); ApplicationInfo getApplicationInfo(String packageName, int flags ,int userId); ActivityInfo getActivityInfo(in ComponentName className, int flags, int userId); ActivityInfo getReceiverInfo(in ComponentName className, int flags, int userId); ServiceInfo getServiceInfo(in ComponentName className, int flags, int userId); ProviderInfo getProviderInfo(in ComponentName className, int flags, int userId); int checkPermission(String permName, String pkgName); int checkUidPermission(String permName, int uid); boolean addPermission(in PermissionInfo info); void removePermission(String name); void grantPermission(String packageName, String permissionName); void revokePermission(String packageName, String permissionName); boolean isProtectedBroadcast(String actionName); int checkSignatures(String pkg1, String pkg2); int checkUidSignatures(int uid1, int uid2); String[] getPackagesForUid(int uid); String getNameForUid(int uid); int getUidForSharedUser(String sharedUserName); ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId); List queryIntentActivities(in Intent intent, String resolvedType, int flags, int userId); List queryIntentActivityOptions( in ComponentName caller, in Intent[] specifics, in String[] specificTypes, in Intent intent, String resolvedType, int flags, int userId); List queryIntentReceivers(in Intent intent, String resolvedType, int flags, int userId); ResolveInfo resolveService(in Intent intent, String resolvedType, int flags, int userId); List queryIntentServices(in Intent intent, String resolvedType, int flags, int userId); /** * This implements getInstalledPackages via a "last returned row" * mechanism that is not exposed in the API. This is to get around the IPC * limit that kicks in when flags are included that bloat up the data * returned. */ ParceledListSlice getInstalledPackages(int flags, in String lastRead, in int userId); /** * This implements getInstalledApplications via a "last returned row" * mechanism that is not exposed in the API. This is to get around the IPC * limit that kicks in when flags are included that bloat up the data * returned. */ ParceledListSlice getInstalledApplications(int flags, in String lastRead, int userId); /** * Retrieve all applications that are marked as persistent. * * @return A List<applicationInfo> containing one entry for each persistent * application. */ List getPersistentApplications(int flags); ProviderInfo resolveContentProvider(String name, int flags, int userId); /** * Retrieve sync information for all content providers. * * @param outNames Filled in with a list of the root names of the content * providers that can sync. * @param outInfo Filled in with a list of the ProviderInfo for each * name in 'outNames'. */ void querySyncProviders(inout List outNames, inout List outInfo); List queryContentProviders( String processName, int uid, int flags); InstrumentationInfo getInstrumentationInfo( in ComponentName className, int flags); List queryInstrumentation( String targetPackage, int flags); /** * Install a package. * * @param packageURI The location of the package file to install. * @param observer a callback to use to notify when the package installation in finished. * @param flags - possible values: {@link #FORWARD_LOCK_PACKAGE}, * {@link #REPLACE_EXISITING_PACKAGE} * @param installerPackageName Optional package name of the application that is performing the * installation. This identifies which market the package came from. */ void installPackage(in Uri packageURI, IPackageInstallObserver observer, int flags, in String installerPackageName); void finishPackageInstall(int token); void setInstallerPackageName(in String targetPackage, in String installerPackageName); /** * Delete a package. * * @param packageName The fully qualified name of the package to delete. * @param observer a callback to use to notify when the package deletion in finished. * @param flags - possible values: {@link #DONT_DELETE_DATA} */ void deletePackage(in String packageName, IPackageDeleteObserver observer, int flags); String getInstallerPackageName(in String packageName); void addPackageToPreferred(String packageName); void removePackageFromPreferred(String packageName); List getPreferredPackages(int flags); void addPreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity, int userId); void replacePreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity); void clearPackagePreferredActivities(String packageName); int getPreferredActivities(out List outFilters, out List outActivities, String packageName); boolean getPrivacyGuardSetting(in String packageName, int userId); void setPrivacyGuardSetting(in String packageName, boolean enabled, int userId); /** * As per {@link android.content.pm.PackageManager#setComponentEnabledSetting}. */ void setComponentEnabledSetting(in ComponentName componentName, in int newState, in int flags, int userId); /** * As per {@link android.content.pm.PackageManager#getComponentEnabledSetting}. */ int getComponentEnabledSetting(in ComponentName componentName, int userId); /** * As per {@link android.content.pm.PackageManager#setApplicationEnabledSetting}. */ void setApplicationEnabledSetting(in String packageName, in int newState, int flags, int userId); /** * As per {@link android.content.pm.PackageManager#getApplicationEnabledSetting}. */ int getApplicationEnabledSetting(in String packageName, int userId); /** * Set whether the given package should be considered stopped, making * it not visible to implicit intents that filter out stopped packages. */ void setPackageStoppedState(String packageName, boolean stopped, int userId); /** * Free storage by deleting LRU sorted list of cache files across * all applications. If the currently available free storage * on the device is greater than or equal to the requested * free storage, no cache files are cleared. If the currently * available storage on the device is less than the requested * free storage, some or all of the cache files across * all applications are deleted (based on last accessed time) * to increase the free storage space on the device to * the requested value. There is no guarantee that clearing all * the cache files from all applications will clear up * enough storage to achieve the desired value. * @param freeStorageSize The number of bytes of storage to be * freed by the system. Say if freeStorageSize is XX, * and the current free storage is YY, * if XX is less than YY, just return. if not free XX-YY number * of bytes if possible. * @param observer call back used to notify when * the operation is completed */ void freeStorageAndNotify(in long freeStorageSize, IPackageDataObserver observer); /** * Free storage by deleting LRU sorted list of cache files across * all applications. If the currently available free storage * on the device is greater than or equal to the requested * free storage, no cache files are cleared. If the currently * available storage on the device is less than the requested * free storage, some or all of the cache files across * all applications are deleted (based on last accessed time) * to increase the free storage space on the device to * the requested value. There is no guarantee that clearing all * the cache files from all applications will clear up * enough storage to achieve the desired value. * @param freeStorageSize The number of bytes of storage to be * freed by the system. Say if freeStorageSize is XX, * and the current free storage is YY, * if XX is less than YY, just return. if not free XX-YY number * of bytes if possible. * @param pi IntentSender call back used to * notify when the operation is completed.May be null * to indicate that no call back is desired. */ void freeStorage(in long freeStorageSize, in IntentSender pi); /** * Delete all the cache files in an applications cache directory * @param packageName The package name of the application whose cache * files need to be deleted * @param observer a callback used to notify when the deletion is finished. */ void deleteApplicationCacheFiles(in String packageName, IPackageDataObserver observer); /** * Clear the user data directory of an application. * @param packageName The package name of the application whose cache * files need to be deleted * @param observer a callback used to notify when the operation is completed. */ void clearApplicationUserData(in String packageName, IPackageDataObserver observer, int userId); /** * Get package statistics including the code, data and cache size for * an already installed package * @param packageName The package name of the application * @param userHandle Which user the size should be retrieved for * @param observer a callback to use to notify when the asynchronous * retrieval of information is complete. */ void getPackageSizeInfo(in String packageName, int userHandle, IPackageStatsObserver observer); /** * Get a list of shared libraries that are available on the * system. */ String[] getSystemSharedLibraryNames(); /** * Get a list of features that are available on the * system. */ FeatureInfo[] getSystemAvailableFeatures(); boolean hasSystemFeature(String name); void enterSafeMode(); boolean isSafeMode(); void systemReady(); boolean hasSystemUidErrors(); /** * Ask the package manager to perform boot-time dex-opt of all * existing packages. */ void performBootDexOpt(); /** * Ask the package manager to perform dex-opt (if needed) on the given * package, if it already hasn't done mode. Only does this if running * in the special development "no pre-dexopt" mode. */ boolean performDexOpt(String packageName); /** * Update status of external media on the package manager to scan and * install packages installed on the external media. Like say the * MountService uses this to call into the package manager to update * status of sdcard. */ void updateExternalMediaStatus(boolean mounted, boolean reportStatus); PackageCleanItem nextPackageToClean(in PackageCleanItem lastPackage); void movePackage(String packageName, IPackageMoveObserver observer, int flags); boolean addPermissionAsync(in PermissionInfo info); boolean setInstallLocation(int loc); int getInstallLocation(); void installPackageWithVerification(in Uri packageURI, in IPackageInstallObserver observer, int flags, in String installerPackageName, in Uri verificationURI, in ManifestDigest manifestDigest, in ContainerEncryptionParams encryptionParams); void installPackageWithVerificationAndEncryption(in Uri packageURI, in IPackageInstallObserver observer, int flags, in String installerPackageName, in VerificationParams verificationParams, in ContainerEncryptionParams encryptionParams); int installExistingPackage(String packageName); void verifyPendingInstall(int id, int verificationCode); void extendVerificationTimeout(int id, int verificationCodeAtTimeout, long millisecondsToDelay); VerifierDeviceIdentity getVerifierDeviceIdentity(); boolean isFirstBoot(); boolean isOnlyCoreApps(); void setPermissionEnforced(String permission, boolean enforced); boolean isPermissionEnforced(String permission); /** Reflects current DeviceStorageMonitorService state */ boolean isStorageLow(); }