Home | History | Annotate | Download | only in pm
      1 /*
      2  * Copyright (C) 2015 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.content.ComponentName;
     20 import android.content.Intent;
     21 import android.content.pm.PackageManager.ApplicationInfoFlags;
     22 import android.content.pm.PackageManager.ComponentInfoFlags;
     23 import android.content.pm.PackageManager.PackageInfoFlags;
     24 import android.content.pm.PackageManager.ResolveInfoFlags;
     25 import android.os.Bundle;
     26 import android.util.SparseArray;
     27 
     28 import java.util.List;
     29 
     30 /**
     31  * Package manager local system service interface.
     32  *
     33  * @hide Only for use within the system server.
     34  */
     35 public abstract class PackageManagerInternal {
     36 
     37     /**
     38      * Provider for package names.
     39      */
     40     public interface PackagesProvider {
     41 
     42         /**
     43          * Gets the packages for a given user.
     44          * @param userId The user id.
     45          * @return The package names.
     46          */
     47         public String[] getPackages(int userId);
     48     }
     49 
     50     /**
     51      * Provider for package names.
     52      */
     53     public interface SyncAdapterPackagesProvider {
     54 
     55         /**
     56          * Gets the sync adapter packages for given authority and user.
     57          * @param authority The authority.
     58          * @param userId The user id.
     59          * @return The package names.
     60          */
     61         public String[] getPackages(String authority, int userId);
     62     }
     63 
     64     /**
     65      * Sets the location provider packages provider.
     66      * @param provider The packages provider.
     67      */
     68     public abstract void setLocationPackagesProvider(PackagesProvider provider);
     69 
     70     /**
     71      * Sets the voice interaction packages provider.
     72      * @param provider The packages provider.
     73      */
     74     public abstract void setVoiceInteractionPackagesProvider(PackagesProvider provider);
     75 
     76     /**
     77      * Sets the SMS packages provider.
     78      * @param provider The packages provider.
     79      */
     80     public abstract void setSmsAppPackagesProvider(PackagesProvider provider);
     81 
     82     /**
     83      * Sets the dialer packages provider.
     84      * @param provider The packages provider.
     85      */
     86     public abstract void setDialerAppPackagesProvider(PackagesProvider provider);
     87 
     88     /**
     89      * Sets the sim call manager packages provider.
     90      * @param provider The packages provider.
     91      */
     92     public abstract void setSimCallManagerPackagesProvider(PackagesProvider provider);
     93 
     94     /**
     95      * Sets the sync adapter packages provider.
     96      * @param provider The provider.
     97      */
     98     public abstract void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider);
     99 
    100     /**
    101      * Requests granting of the default permissions to the current default SMS app.
    102      * @param packageName The default SMS package name.
    103      * @param userId The user for which to grant the permissions.
    104      */
    105     public abstract void grantDefaultPermissionsToDefaultSmsApp(String packageName, int userId);
    106 
    107     /**
    108      * Requests granting of the default permissions to the current default dialer app.
    109      * @param packageName The default dialer package name.
    110      * @param userId The user for which to grant the permissions.
    111      */
    112     public abstract void grantDefaultPermissionsToDefaultDialerApp(String packageName, int userId);
    113 
    114     /**
    115      * Requests granting of the default permissions to the current default sim call manager.
    116      * @param packageName The default sim call manager package name.
    117      * @param userId The user for which to grant the permissions.
    118      */
    119     public abstract void grantDefaultPermissionsToDefaultSimCallManager(String packageName,
    120             int userId);
    121 
    122     /**
    123      * Sets a list of apps to keep in PM's internal data structures and as APKs even if no user has
    124      * currently installed it. The apps are not preloaded.
    125      * @param packageList List of package names to keep cached.
    126      */
    127     public abstract void setKeepUninstalledPackages(List<String> packageList);
    128 
    129     /**
    130      * Gets whether some of the permissions used by this package require a user
    131      * review before any of the app components can run.
    132      * @param packageName The package name for which to check.
    133      * @param userId The user under which to check.
    134      * @return True a permissions review is required.
    135      */
    136     public abstract boolean isPermissionsReviewRequired(String packageName, int userId);
    137 
    138     /**
    139      * Retrieve all of the information we know about a particular package/application.
    140      * @param filterCallingUid The results will be filtered in the context of this UID instead
    141      * of the calling UID.
    142      * @see PackageManager#getPackageInfo(String, int)
    143      */
    144     public abstract PackageInfo getPackageInfo(String packageName,
    145             @PackageInfoFlags int flags, int filterCallingUid, int userId);
    146 
    147     /**
    148      * Retrieve all of the information we know about a particular package/application.
    149      * @param filterCallingUid The results will be filtered in the context of this UID instead
    150      * of the calling UID.
    151      * @see PackageManager#getApplicationInfo(String, int)
    152      */
    153     public abstract ApplicationInfo getApplicationInfo(String packageName,
    154             @ApplicationInfoFlags int flags, int filterCallingUid, int userId);
    155 
    156     /**
    157      * Retrieve all of the information we know about a particular activity class.
    158      * @param filterCallingUid The results will be filtered in the context of this UID instead
    159      * of the calling UID.
    160      * @see PackageManager#getActivityInfo(ComponentName, int)
    161      */
    162     public abstract ActivityInfo getActivityInfo(ComponentName component,
    163             @ComponentInfoFlags int flags, int filterCallingUid, int userId);
    164 
    165     /**
    166      * Retrieve all activities that can be performed for the given intent.
    167      * @param filterCallingUid The results will be filtered in the context of this UID instead
    168      * of the calling UID.
    169      * @see PackageManager#queryIntentActivities(Intent, int)
    170      */
    171     public abstract List<ResolveInfo> queryIntentActivities(Intent intent,
    172             @ResolveInfoFlags int flags, int filterCallingUid, int userId);
    173 
    174     /**
    175      * Interface to {@link com.android.server.pm.PackageManagerService#getHomeActivitiesAsUser}.
    176      */
    177     public abstract ComponentName getHomeActivitiesAsUser(List<ResolveInfo> allHomeCandidates,
    178             int userId);
    179 
    180     /**
    181      * Called by DeviceOwnerManagerService to set the package names of device owner and profile
    182      * owners.
    183      */
    184     public abstract void setDeviceAndProfileOwnerPackages(
    185             int deviceOwnerUserId, String deviceOwner, SparseArray<String> profileOwners);
    186 
    187     /**
    188      * Returns {@code true} if a given package can't be wiped. Otherwise, returns {@code false}.
    189      */
    190     public abstract boolean isPackageDataProtected(int userId, String packageName);
    191 
    192     /**
    193      * Returns {@code true} if a given package is installed as ephemeral. Otherwise, returns
    194      * {@code false}.
    195      */
    196     public abstract boolean isPackageEphemeral(int userId, String packageName);
    197 
    198     /**
    199      * Gets whether the package was ever launched.
    200      * @param packageName The package name.
    201      * @param userId The user for which to check.
    202      * @return Whether was launched.
    203      * @throws IllegalArgumentException if the package is not found
    204      */
    205     public abstract boolean wasPackageEverLaunched(String packageName, int userId);
    206 
    207     /**
    208      * Grants a runtime permission
    209      * @param packageName The package name.
    210      * @param name The name of the permission.
    211      * @param userId The userId for which to grant the permission.
    212      * @param overridePolicy If true, grant this permission even if it is fixed by policy.
    213      */
    214     public abstract void grantRuntimePermission(String packageName, String name, int userId,
    215             boolean overridePolicy);
    216 
    217     /**
    218      * Revokes a runtime permission
    219      * @param packageName The package name.
    220      * @param name The name of the permission.
    221      * @param userId The userId for which to revoke the permission.
    222      * @param overridePolicy If true, revoke this permission even if it is fixed by policy.
    223      */
    224     public abstract void revokeRuntimePermission(String packageName, String name, int userId,
    225             boolean overridePolicy);
    226 
    227     /**
    228      * Retrieve the official name associated with a uid. This name is
    229      * guaranteed to never change, though it is possible for the underlying
    230      * uid to be changed. That is, if you are storing information about
    231      * uids in persistent storage, you should use the string returned
    232      * by this function instead of the raw uid.
    233      *
    234      * @param uid The uid for which you would like to retrieve a name.
    235      * @return Returns a unique name for the given uid, or null if the
    236      * uid is not currently assigned.
    237      */
    238     public abstract String getNameForUid(int uid);
    239 
    240     /**
    241      * Request to perform the second phase of ephemeral resolution.
    242      * @param responseObj The response of the first phase of ephemeral resolution
    243      * @param origIntent The original intent that triggered ephemeral resolution
    244      * @param resolvedType The resolved type of the intent
    245      * @param callingPackage The name of the package requesting the ephemeral application
    246      * @param verificationBundle Optional bundle to pass to the installer for additional
    247      * verification
    248      * @param userId The ID of the user that triggered ephemeral resolution
    249      */
    250     public abstract void requestInstantAppResolutionPhaseTwo(AuxiliaryResolveInfo responseObj,
    251             Intent origIntent, String resolvedType, String callingPackage,
    252             Bundle verificationBundle, int userId);
    253 
    254     /**
    255      * Grants access to the package metadata for an ephemeral application.
    256      * <p>
    257      * When an ephemeral application explicitly tries to interact with a full
    258      * install application [via an activity, service or provider that has been
    259      * exposed using the {@code visibleToInstantApp} attribute], the normal
    260      * application must be able to see metadata about the connecting ephemeral
    261      * app. If the ephemeral application uses an implicit intent [ie action VIEW,
    262      * category BROWSABLE], it remains hidden from the launched activity.
    263      * <p>
    264      * If the {@code sourceUid} is not for an ephemeral app or {@code targetUid}
    265      * is not for a fully installed app, this method will be a no-op.
    266      *
    267      * @param userId the user
    268      * @param intent the intent that triggered the grant
    269      * @param targetAppId The app ID of the fully installed application
    270      * @param ephemeralAppId The app ID of the ephemeral application
    271      */
    272     public abstract void grantEphemeralAccess(int userId, Intent intent,
    273             int targetAppId, int ephemeralAppId);
    274 
    275     public abstract boolean isInstantAppInstallerComponent(ComponentName component);
    276     /**
    277      * Prunes instant apps and state associated with uninstalled
    278      * instant apps according to the current platform policy.
    279      */
    280     public abstract void pruneInstantApps();
    281 
    282     /**
    283      * @return The SetupWizard package name.
    284      */
    285     public abstract String getSetupWizardPackageName();
    286 
    287     public interface ExternalSourcesPolicy {
    288 
    289         int USER_TRUSTED = 0;   // User has trusted the package to install apps
    290         int USER_BLOCKED = 1;   // User has blocked the package to install apps
    291         int USER_DEFAULT = 2;   // Default code to use when user response is unavailable
    292 
    293         /**
    294          * Checks the user preference for whether a package is trusted to request installs through
    295          * package installer
    296          *
    297          * @param packageName The package to check for
    298          * @param uid the uid in which the package is running
    299          * @return {@link USER_TRUSTED} if the user has trusted the package, {@link USER_BLOCKED}
    300          * if user has blocked requests from the package, {@link USER_DEFAULT} if the user response
    301          * is not yet available
    302          */
    303         int getPackageTrustedToInstallApps(String packageName, int uid);
    304     }
    305 
    306     public abstract void setExternalSourcesPolicy(ExternalSourcesPolicy policy);
    307 
    308     /**
    309      * Return true if the given package is a persistent app process.
    310      */
    311     public abstract boolean isPackagePersistent(String packageName);
    312 
    313     /**
    314      * Get all overlay packages for a user.
    315      * @param userId The user for which to get the overlays.
    316      * @return A list of overlay packages. An empty list is returned if the
    317      *         user has no installed overlay packages.
    318      */
    319     public abstract List<PackageInfo> getOverlayPackages(int userId);
    320 
    321     /**
    322      * Get the names of all target packages for a user.
    323      * @param userId The user for which to get the package names.
    324      * @return A list of target package names. This list includes the "android" package.
    325      */
    326     public abstract List<String> getTargetPackageNames(int userId);
    327 
    328     /**
    329      * Set which overlay to use for a package.
    330      * @param userId The user for which to update the overlays.
    331      * @param targetPackageName The package name of the package for which to update the overlays.
    332      * @param overlayPackageNames The complete list of overlay packages that should be enabled for
    333      *                            the target. Previously enabled overlays not specified in the list
    334      *                            will be disabled. Pass in null or an empty list to disable
    335      *                            all overlays. The order of the items is significant if several
    336      *                            overlays modify the same resource.
    337      * @return true if all packages names were known by the package manager, false otherwise
    338      */
    339     public abstract boolean setEnabledOverlayPackages(int userId, String targetPackageName,
    340             List<String> overlayPackageNames);
    341 
    342     /**
    343      * Resolves an activity intent, allowing instant apps to be resolved.
    344      */
    345     public abstract ResolveInfo resolveIntent(Intent intent, String resolvedType,
    346             int flags, int userId);
    347 
    348     /**
    349     * Resolves a service intent, allowing instant apps to be resolved.
    350     */
    351    public abstract ResolveInfo resolveService(Intent intent, String resolvedType,
    352            int flags, int userId, int callingUid);
    353 
    354     /**
    355      * Track the creator of a new isolated uid.
    356      * @param isolatedUid The newly created isolated uid.
    357      * @param ownerUid The uid of the app that created the isolated process.
    358      */
    359     public abstract void addIsolatedUid(int isolatedUid, int ownerUid);
    360 
    361     /**
    362      * Track removal of an isolated uid.
    363      * @param isolatedUid isolated uid that is no longer being used.
    364      */
    365     public abstract void removeIsolatedUid(int isolatedUid);
    366 
    367     /**
    368      * Return the taget SDK version for the app with the given UID.
    369      */
    370     public abstract int getUidTargetSdkVersion(int uid);
    371 
    372     /** Whether the binder caller can access instant apps. */
    373     public abstract boolean canAccessInstantApps(int callingUid, int userId);
    374 
    375     /**
    376      * Returns {@code true} if a given package has instant application meta-data.
    377      * Otherwise, returns {@code false}. Meta-data is state (eg. cookie, app icon, etc)
    378      * associated with an instant app. It may be kept after the instant app has been uninstalled.
    379      */
    380     public abstract boolean hasInstantApplicationMetadata(String packageName, int userId);
    381 
    382     /**
    383      * Updates a package last used time.
    384      */
    385     public abstract void notifyPackageUse(String packageName, int reason);
    386 }
    387