PackageManagerInternal.java revision aef2513c7157a28236d097a81fe74d7ba6b710c9
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 launchIntent The intent that would launch if there was no ephemeral application
217     * @param callingPackage The name of the package requesting the ephemeral application
218     * @param userId The ID of the user that triggered ephemeral resolution
219     */
220    public abstract void requestEphemeralResolutionPhaseTwo(EphemeralResponse responseObj,
221            Intent origIntent, String resolvedType, Intent launchIntent, String callingPackage,
222            int userId);
223
224    /**
225     * Grants access to the package metadata for an ephemeral application.
226     * <p>
227     * When an ephemeral application explicitly tries to interact with a full
228     * install application [via an activity, service or provider that has been
229     * exposed using the {@code visibleToInstantApp} attribute], the normal
230     * application must be able to see metadata about the connecting ephemeral
231     * app. If the ephemeral application uses an implicit intent [ie action VIEW,
232     * category BROWSABLE], it remains hidden from the launched activity.
233     * <p>
234     * If the {@code sourceUid} is not for an ephemeral app or {@code targetUid}
235     * is not for a fully installed app, this method will be a no-op.
236     *
237     * @param userId the user
238     * @param intent the intent that triggered the grant
239     * @param targetAppId The app ID of the fully installed application
240     * @param ephemeralAppId The app ID of the ephemeral application
241     */
242    public abstract void grantEphemeralAccess(int userId, Intent intent,
243            int targetAppId, int ephemeralAppId);
244
245    /**
246     * @return The SetupWizard package name.
247     */
248    public abstract String getSetupWizardPackageName();
249
250    public interface ExternalSourcesPolicy {
251
252        int USER_TRUSTED = 0;   // User has trusted the package to install apps
253        int USER_BLOCKED = 1;   // User has blocked the package to install apps
254        int USER_DEFAULT = 2;   // Default code to use when user response is unavailable
255
256        /**
257         * Checks the user preference for whether a package is trusted to request installs through
258         * package installer
259         *
260         * @param packageName The package to check for
261         * @param uid the uid in which the package is running
262         * @return {@link USER_TRUSTED} if the user has trusted the package, {@link USER_BLOCKED}
263         * if user has blocked requests from the package, {@link USER_DEFAULT} if the user response
264         * is not yet available
265         */
266        int getPackageTrustedToInstallApps(String packageName, int uid);
267    }
268
269    public abstract void setExternalSourcesPolicy(ExternalSourcesPolicy policy);
270}
271