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