PackageManagerInternal.java revision 0e989d00ed1e95be0ccb77c29846ee0b6ac33356
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.
142     * @throws NameNotFoundException if a package with the given name cannot be
143     *             found on the system.
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     */
177    public abstract boolean wasPackageEverLaunched(String packageName, int userId);
178
179    /**
180     * Grants a runtime permission
181     * @param packageName The package name.
182     * @param name The name of the permission.
183     * @param userId The userId for which to grant the permission.
184     * @param overridePolicy If true, grant this permission even if it is fixed by policy.
185     */
186    public abstract void grantRuntimePermission(String packageName, String name, int userId,
187            boolean overridePolicy);
188
189    /**
190     * Revokes a runtime permission
191     * @param packageName The package name.
192     * @param name The name of the permission.
193     * @param userId The userId for which to revoke the permission.
194     * @param overridePolicy If true, revoke this permission even if it is fixed by policy.
195     */
196    public abstract void revokeRuntimePermission(String packageName, String name, int userId,
197            boolean overridePolicy);
198
199    /**
200     * Retrieve the official name associated with a uid. This name is
201     * guaranteed to never change, though it is possible for the underlying
202     * uid to be changed. That is, if you are storing information about
203     * uids in persistent storage, you should use the string returned
204     * by this function instead of the raw uid.
205     *
206     * @param uid The uid for which you would like to retrieve a name.
207     * @return Returns a unique name for the given uid, or null if the
208     * uid is not currently assigned.
209     */
210    public abstract String getNameForUid(int uid);
211
212    /**
213     * Request to perform the second phase of ephemeral resolution.
214     * @param responseObj The response of the first phase of ephemeral resolution
215     * @param origIntent The original intent that triggered ephemeral resolution
216     * @param resolvedType The resolved type of the intent
217     * @param launchIntent The intent that would launch if there was no ephemeral application
218     * @param callingPackage The name of the package requesting the ephemeral application
219     * @param userId The ID of the user that triggered ephemeral resolution
220     */
221    public abstract void requestEphemeralResolutionPhaseTwo(EphemeralResponse responseObj,
222            Intent origIntent, String resolvedType, Intent launchIntent, String callingPackage,
223            int userId);
224
225    /**
226     * Grants access to the package metadata for an ephemeral application.
227     * <p>
228     * When an ephemeral application explicitly tries to interact with a full
229     * install application [via an activity, service or provider that has been
230     * exposed using the {@code visibleToInstantApp} attribute], the normal
231     * application must be able to see metadata about the connecting ephemeral
232     * app. If the ephemeral application uses an implicit intent [ie action VIEW,
233     * category BROWSABLE], it remains hidden from the launched activity.
234     * <p>
235     * If the {@code sourceUid} is not for an ephemeral app or {@code targetUid}
236     * is not for a fully installed app, this method will be a no-op.
237     *
238     * @param userId the user
239     * @param intent the intent that triggered the grant
240     * @param targetAppId The app ID of the fully installed application
241     * @param ephemeralAppId The app ID of the ephemeral application
242     */
243    public abstract void grantEphemeralAccess(int userId, Intent intent,
244            int targetAppId, int ephemeralAppId);
245
246    /**
247     * @return The SetupWizard package name.
248     */
249    public abstract String getSetupWizardPackageName();
250}
251