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