blob: 8ee8e102d9b5587241334d9e39ceef92440d3f7d [file] [log] [blame]
Svet Ganovadc1cf42015-06-15 16:36:24 -07001/*
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
Todd Kennedy82b08422017-09-28 13:32:05 -070019import android.annotation.IntDef;
20import android.annotation.NonNull;
21import android.annotation.Nullable;
Makoto Onuki2d5b4652016-03-11 16:09:54 -080022import android.content.ComponentName;
Todd Kennedy01ad0c72016-11-11 15:33:12 -080023import android.content.Intent;
Todd Kennedy18211fd2017-06-06 09:15:46 -070024import android.content.pm.PackageManager.ApplicationInfoFlags;
25import android.content.pm.PackageManager.ComponentInfoFlags;
Todd Kennedy18211fd2017-06-06 09:15:46 -070026import android.content.pm.PackageManager.PackageInfoFlags;
27import android.content.pm.PackageManager.ResolveInfoFlags;
Chad Brubaker06068612017-04-06 09:43:47 -070028import android.os.Bundle;
Makoto Onukic29f62c2016-06-07 12:19:46 -070029import android.util.SparseArray;
Todd Kennedy39bfee52016-02-24 10:28:21 -080030
Todd Kennedy82b08422017-09-28 13:32:05 -070031import java.lang.annotation.Retention;
32import java.lang.annotation.RetentionPolicy;
Fyodor Kupolovcb6fd802015-11-05 14:27:06 -080033import java.util.List;
Svet Ganovadc1cf42015-06-15 16:36:24 -070034
35/**
36 * Package manager local system service interface.
37 *
38 * @hide Only for use within the system server.
39 */
40public abstract class PackageManagerInternal {
Todd Kennedy82b08422017-09-28 13:32:05 -070041 public static final int PACKAGE_SYSTEM = 0;
42 public static final int PACKAGE_SETUP_WIZARD = 1;
43 public static final int PACKAGE_INSTALLER = 2;
44 public static final int PACKAGE_VERIFIER = 3;
45 public static final int PACKAGE_BROWSER = 4;
46 @IntDef(value = {
47 PACKAGE_SYSTEM,
48 PACKAGE_SETUP_WIZARD,
49 PACKAGE_INSTALLER,
50 PACKAGE_VERIFIER,
51 PACKAGE_BROWSER,
52 })
53 @Retention(RetentionPolicy.SOURCE)
54 public @interface KnownPackage {}
Svet Ganovadc1cf42015-06-15 16:36:24 -070055
Todd Kennedy42d61602017-12-12 14:44:19 -080056 /** Observer called whenever the list of packages changes */
57 public interface PackageListObserver {
58 /** A package was added to the system. */
59 void onPackageAdded(@NonNull String packageName);
60 /** A package was removed from the system. */
61 void onPackageRemoved(@NonNull String packageName);
62 }
63
Svet Ganovadc1cf42015-06-15 16:36:24 -070064 /**
65 * Provider for package names.
66 */
67 public interface PackagesProvider {
68
69 /**
70 * Gets the packages for a given user.
71 * @param userId The user id.
72 * @return The package names.
73 */
74 public String[] getPackages(int userId);
75 }
76
77 /**
Svetoslav0010b702015-06-30 18:05:26 -070078 * Provider for package names.
79 */
80 public interface SyncAdapterPackagesProvider {
81
82 /**
83 * Gets the sync adapter packages for given authority and user.
84 * @param authority The authority.
85 * @param userId The user id.
86 * @return The package names.
87 */
88 public String[] getPackages(String authority, int userId);
89 }
90
91 /**
Svet Ganovadc1cf42015-06-15 16:36:24 -070092 * Sets the location provider packages provider.
93 * @param provider The packages provider.
94 */
95 public abstract void setLocationPackagesProvider(PackagesProvider provider);
96
97 /**
Svet Ganovadc1cf42015-06-15 16:36:24 -070098 * Sets the voice interaction packages provider.
99 * @param provider The packages provider.
100 */
101 public abstract void setVoiceInteractionPackagesProvider(PackagesProvider provider);
Svetoslavcdfd2302015-06-25 19:07:31 -0700102
103 /**
104 * Sets the SMS packages provider.
105 * @param provider The packages provider.
106 */
107 public abstract void setSmsAppPackagesProvider(PackagesProvider provider);
108
109 /**
110 * Sets the dialer packages provider.
111 * @param provider The packages provider.
112 */
113 public abstract void setDialerAppPackagesProvider(PackagesProvider provider);
114
115 /**
Sailesh Nepalcf855622015-07-28 19:22:14 -0700116 * Sets the sim call manager packages provider.
117 * @param provider The packages provider.
118 */
119 public abstract void setSimCallManagerPackagesProvider(PackagesProvider provider);
120
121 /**
Svetoslav0010b702015-06-30 18:05:26 -0700122 * Sets the sync adapter packages provider.
123 * @param provider The provider.
124 */
125 public abstract void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider);
126
127 /**
Svetoslavcdfd2302015-06-25 19:07:31 -0700128 * Requests granting of the default permissions to the current default SMS app.
129 * @param packageName The default SMS package name.
130 * @param userId The user for which to grant the permissions.
131 */
132 public abstract void grantDefaultPermissionsToDefaultSmsApp(String packageName, int userId);
133
134 /**
135 * Requests granting of the default permissions to the current default dialer app.
136 * @param packageName The default dialer package name.
137 * @param userId The user for which to grant the permissions.
138 */
139 public abstract void grantDefaultPermissionsToDefaultDialerApp(String packageName, int userId);
Sailesh Nepalcf855622015-07-28 19:22:14 -0700140
141 /**
142 * Requests granting of the default permissions to the current default sim call manager.
143 * @param packageName The default sim call manager package name.
144 * @param userId The user for which to grant the permissions.
145 */
146 public abstract void grantDefaultPermissionsToDefaultSimCallManager(String packageName,
147 int userId);
Fyodor Kupolovcb6fd802015-11-05 14:27:06 -0800148
149 /**
150 * Sets a list of apps to keep in PM's internal data structures and as APKs even if no user has
151 * currently installed it. The apps are not preloaded.
152 * @param packageList List of package names to keep cached.
153 */
154 public abstract void setKeepUninstalledPackages(List<String> packageList);
Svet Ganov9c165d72015-12-01 19:52:26 -0800155
156 /**
157 * Gets whether some of the permissions used by this package require a user
158 * review before any of the app components can run.
159 * @param packageName The package name for which to check.
160 * @param userId The user under which to check.
161 * @return True a permissions review is required.
162 */
163 public abstract boolean isPermissionsReviewRequired(String packageName, int userId);
Todd Kennedy39bfee52016-02-24 10:28:21 -0800164
165 /**
Todd Kennedy18211fd2017-06-06 09:15:46 -0700166 * Retrieve all of the information we know about a particular package/application.
167 * @param filterCallingUid The results will be filtered in the context of this UID instead
168 * of the calling UID.
169 * @see PackageManager#getPackageInfo(String, int)
Todd Kennedy39bfee52016-02-24 10:28:21 -0800170 */
Todd Kennedy18211fd2017-06-06 09:15:46 -0700171 public abstract PackageInfo getPackageInfo(String packageName,
172 @PackageInfoFlags int flags, int filterCallingUid, int userId);
173
174 /**
Christopher Tatea732f012017-10-26 17:26:53 -0700175 * Do a straight uid lookup for the given package/application in the given user.
176 * @see PackageManager#getPackageUidAsUser(String, int, int)
177 * @return The app's uid, or < 0 if the package was not found in that user
178 */
179 public abstract int getPackageUid(String packageName,
180 @PackageInfoFlags int flags, int userId);
181
182 /**
Todd Kennedy18211fd2017-06-06 09:15:46 -0700183 * Retrieve all of the information we know about a particular package/application.
184 * @param filterCallingUid The results will be filtered in the context of this UID instead
185 * of the calling UID.
186 * @see PackageManager#getApplicationInfo(String, int)
187 */
188 public abstract ApplicationInfo getApplicationInfo(String packageName,
189 @ApplicationInfoFlags int flags, int filterCallingUid, int userId);
190
191 /**
192 * Retrieve all of the information we know about a particular activity class.
193 * @param filterCallingUid The results will be filtered in the context of this UID instead
194 * of the calling UID.
195 * @see PackageManager#getActivityInfo(ComponentName, int)
196 */
197 public abstract ActivityInfo getActivityInfo(ComponentName component,
198 @ComponentInfoFlags int flags, int filterCallingUid, int userId);
199
200 /**
201 * Retrieve all activities that can be performed for the given intent.
202 * @param filterCallingUid The results will be filtered in the context of this UID instead
203 * of the calling UID.
204 * @see PackageManager#queryIntentActivities(Intent, int)
205 */
206 public abstract List<ResolveInfo> queryIntentActivities(Intent intent,
207 @ResolveInfoFlags int flags, int filterCallingUid, int userId);
Makoto Onuki2d5b4652016-03-11 16:09:54 -0800208
209 /**
Todd Kennedy82b08422017-09-28 13:32:05 -0700210 * Retrieve all services that can be performed for the given intent.
211 * @see PackageManager#queryIntentServices(Intent, int)
212 */
213 public abstract List<ResolveInfo> queryIntentServices(
214 Intent intent, int flags, int callingUid, int userId);
215
216 /**
Makoto Onuki2d5b4652016-03-11 16:09:54 -0800217 * Interface to {@link com.android.server.pm.PackageManagerService#getHomeActivitiesAsUser}.
218 */
219 public abstract ComponentName getHomeActivitiesAsUser(List<ResolveInfo> allHomeCandidates,
220 int userId);
Makoto Onukic29f62c2016-06-07 12:19:46 -0700221
222 /**
223 * Called by DeviceOwnerManagerService to set the package names of device owner and profile
224 * owners.
225 */
226 public abstract void setDeviceAndProfileOwnerPackages(
227 int deviceOwnerUserId, String deviceOwner, SparseArray<String> profileOwners);
228
229 /**
Steven Ng9d48a732016-06-24 19:04:14 +0100230 * Returns {@code true} if a given package can't be wiped. Otherwise, returns {@code false}.
Makoto Onukic29f62c2016-06-07 12:19:46 -0700231 */
Steven Ng9d48a732016-06-24 19:04:14 +0100232 public abstract boolean isPackageDataProtected(int userId, String packageName);
Svet Ganov973edd192016-09-08 20:15:55 -0700233
234 /**
Dianne Hackborne07641d2016-11-09 15:07:23 -0800235 * Returns {@code true} if a given package is installed as ephemeral. Otherwise, returns
236 * {@code false}.
237 */
238 public abstract boolean isPackageEphemeral(int userId, String packageName);
239
240 /**
Svet Ganov973edd192016-09-08 20:15:55 -0700241 * Gets whether the package was ever launched.
242 * @param packageName The package name.
243 * @param userId The user for which to check.
244 * @return Whether was launched.
Amith Yamasani2cbfa1e2017-03-28 10:34:01 -0700245 * @throws IllegalArgumentException if the package is not found
Svet Ganov973edd192016-09-08 20:15:55 -0700246 */
247 public abstract boolean wasPackageEverLaunched(String packageName, int userId);
Nicolas Prevot700e1e72016-09-28 15:17:18 +0100248
249 /**
250 * Grants a runtime permission
251 * @param packageName The package name.
252 * @param name The name of the permission.
253 * @param userId The userId for which to grant the permission.
254 * @param overridePolicy If true, grant this permission even if it is fixed by policy.
255 */
256 public abstract void grantRuntimePermission(String packageName, String name, int userId,
257 boolean overridePolicy);
258
259 /**
260 * Revokes a runtime permission
261 * @param packageName The package name.
262 * @param name The name of the permission.
263 * @param userId The userId for which to revoke the permission.
264 * @param overridePolicy If true, revoke this permission even if it is fixed by policy.
265 */
266 public abstract void revokeRuntimePermission(String packageName, String name, int userId,
267 boolean overridePolicy);
268
Michal Karpinskif77ee4f2016-10-12 16:40:06 +0100269 /**
Michal Karpinskicb67dc92016-12-13 18:20:23 +0000270 * Retrieve the official name associated with a uid. This name is
Michal Karpinskif77ee4f2016-10-12 16:40:06 +0100271 * guaranteed to never change, though it is possible for the underlying
Michal Karpinskicb67dc92016-12-13 18:20:23 +0000272 * uid to be changed. That is, if you are storing information about
273 * uids in persistent storage, you should use the string returned
274 * by this function instead of the raw uid.
Michal Karpinskif77ee4f2016-10-12 16:40:06 +0100275 *
Michal Karpinskicb67dc92016-12-13 18:20:23 +0000276 * @param uid The uid for which you would like to retrieve a name.
277 * @return Returns a unique name for the given uid, or null if the
278 * uid is not currently assigned.
Michal Karpinskif77ee4f2016-10-12 16:40:06 +0100279 */
280 public abstract String getNameForUid(int uid);
281
Todd Kennedy01ad0c72016-11-11 15:33:12 -0800282 /**
283 * Request to perform the second phase of ephemeral resolution.
284 * @param responseObj The response of the first phase of ephemeral resolution
285 * @param origIntent The original intent that triggered ephemeral resolution
286 * @param resolvedType The resolved type of the intent
Todd Kennedy01ad0c72016-11-11 15:33:12 -0800287 * @param callingPackage The name of the package requesting the ephemeral application
Chad Brubaker06068612017-04-06 09:43:47 -0700288 * @param verificationBundle Optional bundle to pass to the installer for additional
289 * verification
Todd Kennedy01ad0c72016-11-11 15:33:12 -0800290 * @param userId The ID of the user that triggered ephemeral resolution
291 */
Todd Kennedye9910222017-02-21 16:00:11 -0800292 public abstract void requestInstantAppResolutionPhaseTwo(AuxiliaryResolveInfo responseObj,
293 Intent origIntent, String resolvedType, String callingPackage,
Chad Brubaker06068612017-04-06 09:43:47 -0700294 Bundle verificationBundle, int userId);
Svetoslav Ganove080da92016-12-21 17:10:35 -0800295
296 /**
Todd Kennedy0e989d02017-01-13 14:15:36 -0800297 * Grants access to the package metadata for an ephemeral application.
298 * <p>
299 * When an ephemeral application explicitly tries to interact with a full
300 * install application [via an activity, service or provider that has been
301 * exposed using the {@code visibleToInstantApp} attribute], the normal
302 * application must be able to see metadata about the connecting ephemeral
303 * app. If the ephemeral application uses an implicit intent [ie action VIEW,
304 * category BROWSABLE], it remains hidden from the launched activity.
305 * <p>
306 * If the {@code sourceUid} is not for an ephemeral app or {@code targetUid}
307 * is not for a fully installed app, this method will be a no-op.
308 *
309 * @param userId the user
310 * @param intent the intent that triggered the grant
311 * @param targetAppId The app ID of the fully installed application
312 * @param ephemeralAppId The app ID of the ephemeral application
313 */
314 public abstract void grantEphemeralAccess(int userId, Intent intent,
315 int targetAppId, int ephemeralAppId);
316
Todd Kennedyb21be122017-03-24 14:10:01 -0700317 public abstract boolean isInstantAppInstallerComponent(ComponentName component);
Todd Kennedy0e989d02017-01-13 14:15:36 -0800318 /**
Svetoslav Ganov096d3042017-01-30 16:34:13 -0800319 * Prunes instant apps and state associated with uninstalled
320 * instant apps according to the current platform policy.
321 */
322 public abstract void pruneInstantApps();
323
324 /**
Svetoslav Ganove080da92016-12-21 17:10:35 -0800325 * @return The SetupWizard package name.
326 */
327 public abstract String getSetupWizardPackageName();
Suprabh Shuklaaef25132017-01-23 18:09:03 -0800328
329 public interface ExternalSourcesPolicy {
330
331 int USER_TRUSTED = 0; // User has trusted the package to install apps
332 int USER_BLOCKED = 1; // User has blocked the package to install apps
333 int USER_DEFAULT = 2; // Default code to use when user response is unavailable
334
335 /**
336 * Checks the user preference for whether a package is trusted to request installs through
337 * package installer
338 *
339 * @param packageName The package to check for
340 * @param uid the uid in which the package is running
341 * @return {@link USER_TRUSTED} if the user has trusted the package, {@link USER_BLOCKED}
342 * if user has blocked requests from the package, {@link USER_DEFAULT} if the user response
343 * is not yet available
344 */
345 int getPackageTrustedToInstallApps(String packageName, int uid);
346 }
347
348 public abstract void setExternalSourcesPolicy(ExternalSourcesPolicy policy);
MÃ¥rten Kongstadeabc9e92015-12-15 16:40:23 +0100349
350 /**
Dianne Hackbornb1e77762017-02-13 11:42:18 -0800351 * Return true if the given package is a persistent app process.
352 */
353 public abstract boolean isPackagePersistent(String packageName);
354
355 /**
Todd Kennedyc29b11a2017-10-23 15:55:59 -0700356 * Returns whether or not the given package represents a legacy system application released
357 * prior to runtime permissions.
358 */
359 public abstract boolean isLegacySystemApp(PackageParser.Package pkg);
360
361 /**
MÃ¥rten Kongstadeabc9e92015-12-15 16:40:23 +0100362 * Get all overlay packages for a user.
363 * @param userId The user for which to get the overlays.
364 * @return A list of overlay packages. An empty list is returned if the
365 * user has no installed overlay packages.
366 */
367 public abstract List<PackageInfo> getOverlayPackages(int userId);
368
369 /**
370 * Get the names of all target packages for a user.
371 * @param userId The user for which to get the package names.
372 * @return A list of target package names. This list includes the "android" package.
373 */
374 public abstract List<String> getTargetPackageNames(int userId);
375
376 /**
377 * Set which overlay to use for a package.
378 * @param userId The user for which to update the overlays.
379 * @param targetPackageName The package name of the package for which to update the overlays.
380 * @param overlayPackageNames The complete list of overlay packages that should be enabled for
381 * the target. Previously enabled overlays not specified in the list
382 * will be disabled. Pass in null or an empty list to disable
383 * all overlays. The order of the items is significant if several
384 * overlays modify the same resource.
385 * @return true if all packages names were known by the package manager, false otherwise
386 */
387 public abstract boolean setEnabledOverlayPackages(int userId, String targetPackageName,
388 List<String> overlayPackageNames);
Todd Kennedy4d1de7d2017-02-23 10:32:18 -0800389
390 /**
Todd Kennedy51b3aac2017-03-30 17:50:42 -0700391 * Resolves an activity intent, allowing instant apps to be resolved.
Todd Kennedy4d1de7d2017-02-23 10:32:18 -0800392 */
393 public abstract ResolveInfo resolveIntent(Intent intent, String resolvedType,
Todd Kennedy82b08422017-09-28 13:32:05 -0700394 int flags, int userId, boolean resolveForStart);
Chad Brubaker0f28a802017-03-29 14:05:52 -0700395
396 /**
Todd Kennedy51b3aac2017-03-30 17:50:42 -0700397 * Resolves a service intent, allowing instant apps to be resolved.
398 */
Todd Kennedy82b08422017-09-28 13:32:05 -0700399 public abstract ResolveInfo resolveService(Intent intent, String resolvedType,
Todd Kennedy51b3aac2017-03-30 17:50:42 -0700400 int flags, int userId, int callingUid);
401
Todd Kennedy82b08422017-09-28 13:32:05 -0700402 /**
403 * Resolves a content provider intent.
404 */
405 public abstract ProviderInfo resolveContentProvider(String name, int flags, int userId);
406
Todd Kennedy51b3aac2017-03-30 17:50:42 -0700407 /**
Chad Brubaker0f28a802017-03-29 14:05:52 -0700408 * Track the creator of a new isolated uid.
409 * @param isolatedUid The newly created isolated uid.
410 * @param ownerUid The uid of the app that created the isolated process.
411 */
412 public abstract void addIsolatedUid(int isolatedUid, int ownerUid);
413
414 /**
415 * Track removal of an isolated uid.
416 * @param isolatedUid isolated uid that is no longer being used.
417 */
418 public abstract void removeIsolatedUid(int isolatedUid);
Makoto Onukie92f7942017-04-26 14:38:18 -0700419
420 /**
421 * Return the taget SDK version for the app with the given UID.
422 */
423 public abstract int getUidTargetSdkVersion(int uid);
Makoto Onukiad623012017-05-15 09:29:34 -0700424
425 /** Whether the binder caller can access instant apps. */
Todd Kennedy3051caa2017-05-23 15:54:18 -0700426 public abstract boolean canAccessInstantApps(int callingUid, int userId);
Svet Ganovf935a702017-08-22 12:15:58 -0700427
428 /**
429 * Returns {@code true} if a given package has instant application meta-data.
430 * Otherwise, returns {@code false}. Meta-data is state (eg. cookie, app icon, etc)
431 * associated with an instant app. It may be kept after the instant app has been uninstalled.
432 */
433 public abstract boolean hasInstantApplicationMetadata(String packageName, int userId);
Todd Kennedydf113c32017-08-31 16:10:29 -0700434
435 /**
436 * Updates a package last used time.
437 */
438 public abstract void notifyPackageUse(String packageName, int reason);
Todd Kennedy82b08422017-09-28 13:32:05 -0700439
440 /**
441 * Returns a package object for the given package name.
442 */
443 public abstract @Nullable PackageParser.Package getPackage(@NonNull String packageName);
444
445 /**
Todd Kennedy42d61602017-12-12 14:44:19 -0800446 * Returns a list without a change observer.
447 *
448 * {@see #getPackageList(PackageListObserver)}
449 */
450 public @NonNull PackageList getPackageList() {
451 return getPackageList(null);
452 }
453
454 /**
455 * Returns the list of packages installed at the time of the method call.
456 * <p>The given observer is notified when the list of installed packages
457 * changes [eg. a package was installed or uninstalled]. It will not be
458 * notified if a package is updated.
459 * <p>The package list will not be updated automatically as packages are
460 * installed / uninstalled. Any changes must be handled within the observer.
461 */
462 public abstract @NonNull PackageList getPackageList(@Nullable PackageListObserver observer);
463
464 /**
465 * Removes the observer.
466 * <p>Generally not needed. {@link #getPackageList(PackageListObserver)} will automatically
467 * remove the observer.
468 * <p>Does nothing if the observer isn't currently registered.
469 * <p>Observers are notified asynchronously and it's possible for an observer to be
470 * invoked after its been removed.
471 */
472 public abstract void removePackageListObserver(@NonNull PackageListObserver observer);
473
474 /**
Todd Kennedy82b08422017-09-28 13:32:05 -0700475 * Returns a package object for the disabled system package name.
476 */
477 public abstract @Nullable PackageParser.Package getDisabledPackage(@NonNull String packageName);
478
479 /**
480 * Returns whether or not the component is the resolver activity.
481 */
482 public abstract boolean isResolveActivityComponent(@NonNull ComponentInfo component);
483
484 /**
485 * Returns the package name for a known package.
486 */
487 public abstract @Nullable String getKnownPackageName(
488 @KnownPackage int knownPackage, int userId);
489
Todd Kennedy0eb97382017-10-03 16:57:22 -0700490 /**
491 * Returns whether the package is an instant app.
492 */
493 public abstract boolean isInstantApp(String packageName, int userId);
494
495 /**
496 * Returns whether the package is an instant app.
497 */
498 public abstract @Nullable String getInstantAppPackageName(int uid);
499
500 /**
501 * Returns whether or not access to the application should be filtered.
502 * <p>
503 * Access may be limited based upon whether the calling or target applications
504 * are instant applications.
505 *
506 * @see #canAccessInstantApps(int)
507 */
508 public abstract boolean filterAppAccess(
509 @Nullable PackageParser.Package pkg, int callingUid, int userId);
510
Todd Kennedy82b08422017-09-28 13:32:05 -0700511 /*
512 * NOTE: The following methods are temporary until permissions are extracted from
513 * the package manager into a component specifically for handling permissions.
514 */
Todd Kennedy82b08422017-09-28 13:32:05 -0700515 /** Returns the flags for the given permission. */
516 public abstract @Nullable int getPermissionFlagsTEMP(@NonNull String permName,
517 @NonNull String packageName, int userId);
518 /** Updates the flags for the given permission. */
519 public abstract void updatePermissionFlagsTEMP(@NonNull String permName,
520 @NonNull String packageName, int flagMask, int flagValues, int userId);
Svet Ganovadc1cf42015-06-15 16:36:24 -0700521}