blob: 39133b829d36fa5d21e6f471fee89c5e8be71c9e [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
2 * Copyright (C) 2006 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
Svetoslavf7c06eb2015-06-10 18:43:22 -070019import android.Manifest;
Tor Norbye1c2bf032015-03-02 10:57:08 -080020import android.annotation.CheckResult;
Tor Norbye7b9c9122013-05-30 16:48:33 -070021import android.annotation.DrawableRes;
Tor Norbyed9273d62013-05-30 15:59:53 -070022import android.annotation.IntDef;
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -070023import android.annotation.NonNull;
Jeff Sharkeye2d45be2015-04-15 17:14:12 -070024import android.annotation.Nullable;
Svetoslavf7c06eb2015-06-10 18:43:22 -070025import android.annotation.RequiresPermission;
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -080026import android.annotation.SdkConstant;
27import android.annotation.SdkConstant.SdkConstantType;
Tor Norbye7b9c9122013-05-30 16:48:33 -070028import android.annotation.StringRes;
Jeff Sharkeybb580672014-07-10 12:10:25 -070029import android.annotation.SystemApi;
Jeff Sharkeya73b8fd2016-01-06 17:02:08 -070030import android.annotation.TestApi;
Jeff Sharkeybd940222016-01-08 11:07:13 -070031import android.annotation.UserIdInt;
Tor Norbye7b9c9122013-05-30 16:48:33 -070032import android.annotation.XmlRes;
Jeff Sharkey6c0b9da2014-08-07 22:07:11 -070033import android.app.PackageDeleteObserver;
Christopher Tatef1977b42014-03-24 16:25:51 -070034import android.app.PackageInstallObserver;
Amith Yamasani1d653272014-09-11 17:56:05 -070035import android.app.admin.DevicePolicyManager;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080036import android.content.ComponentName;
37import android.content.Context;
38import android.content.Intent;
39import android.content.IntentFilter;
Suchi Amalapurapu1ccac752009-06-12 10:09:58 -070040import android.content.IntentSender;
Jeff Sharkeyc4858a22014-06-16 10:51:20 -070041import android.content.pm.PackageParser.PackageParserException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080042import android.content.res.Resources;
43import android.content.res.XmlResourceParser;
Svetoslavc7d62f02014-09-04 15:39:54 -070044import android.graphics.Rect;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080045import android.graphics.drawable.Drawable;
46import android.net.Uri;
Jeff Sharkeybb580672014-07-10 12:10:25 -070047import android.os.Bundle;
Jeff Sharkey620b32b2015-04-23 19:36:02 -070048import android.os.Handler;
Jeff Sharkey6c0b9da2014-08-07 22:07:11 -070049import android.os.RemoteException;
Dianne Hackborn0c380492012-08-20 17:23:30 -070050import android.os.UserHandle;
Jeff Sharkey8a372a02016-03-16 16:25:45 -060051import android.os.UserManager;
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -070052import android.os.storage.VolumeInfo;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080053import android.util.AndroidException;
Jeff Sharkeybd940222016-01-08 11:07:13 -070054import android.util.Log;
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -070055
Svetoslavc6d1c342015-02-26 14:44:43 -080056import com.android.internal.util.ArrayUtils;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080057
58import java.io.File;
Tor Norbyed9273d62013-05-30 15:59:53 -070059import java.lang.annotation.Retention;
60import java.lang.annotation.RetentionPolicy;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080061import java.util.List;
62
63/**
64 * Class for retrieving various kinds of information related to the application
65 * packages that are currently installed on the device.
66 *
67 * You can find this class through {@link Context#getPackageManager}.
68 */
69public abstract class PackageManager {
Jeff Sharkeybd940222016-01-08 11:07:13 -070070 private static final String TAG = "PackageManager";
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080071
Jeff Sharkeye4697132016-02-06 19:46:15 -070072 /** {@hide} */
Jeff Sharkey8a372a02016-03-16 16:25:45 -060073 public static final boolean APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE = true;
Jeff Sharkeye4697132016-02-06 19:46:15 -070074
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080075 /**
76 * This exception is thrown when a given package, application, or component
kmccormick30498b42013-03-27 17:39:17 -070077 * name cannot be found.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080078 */
79 public static class NameNotFoundException extends AndroidException {
80 public NameNotFoundException() {
81 }
82
83 public NameNotFoundException(String name) {
84 super(name);
85 }
86 }
87
88 /**
Svetoslavf7c06eb2015-06-10 18:43:22 -070089 * Listener for changes in permissions granted to a UID.
90 *
91 * @hide
92 */
93 @SystemApi
94 public interface OnPermissionsChangedListener {
95
96 /**
97 * Called when the permissions for a UID change.
98 * @param uid The UID with a change.
99 */
100 public void onPermissionsChanged(int uid);
101 }
102
103 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700104 * As a guiding principle:
105 * <p>
106 * {@code GET_} flags are used to request additional data that may have been
107 * elided to save wire space.
108 * <p>
109 * {@code MATCH_} flags are used to include components or packages that
110 * would have otherwise been omitted from a result set by current system
111 * state.
112 */
113
114 /** @hide */
115 @IntDef(flag = true, value = {
116 GET_ACTIVITIES,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800117 GET_CONFIGURATIONS,
118 GET_GIDS,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700119 GET_INSTRUMENTATION,
120 GET_INTENT_FILTERS,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700121 GET_META_DATA,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700122 GET_PERMISSIONS,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800123 GET_PROVIDERS,
124 GET_RECEIVERS,
125 GET_SERVICES,
126 GET_SHARED_LIBRARY_FILES,
127 GET_SIGNATURES,
128 GET_URI_PERMISSION_PATTERNS,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700129 MATCH_UNINSTALLED_PACKAGES,
130 MATCH_DISABLED_COMPONENTS,
131 MATCH_DISABLED_UNTIL_USED_COMPONENTS,
Jeff Sharkeyc5967e92016-01-07 18:50:29 -0700132 MATCH_SYSTEM_ONLY,
Todd Kennedyd6ee0ba2016-03-31 15:11:11 -0700133 MATCH_FACTORY_ONLY,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700134 MATCH_DEBUG_TRIAGED_MISSING,
Todd Kennedy1f397f42016-06-28 12:14:11 -0700135 GET_DISABLED_COMPONENTS,
136 GET_DISABLED_UNTIL_USED_COMPONENTS,
137 GET_UNINSTALLED_PACKAGES,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700138 })
139 @Retention(RetentionPolicy.SOURCE)
140 public @interface PackageInfoFlags {}
141
142 /** @hide */
143 @IntDef(flag = true, value = {
144 GET_META_DATA,
145 GET_SHARED_LIBRARY_FILES,
146 MATCH_UNINSTALLED_PACKAGES,
147 MATCH_SYSTEM_ONLY,
148 MATCH_DEBUG_TRIAGED_MISSING,
Todd Kennedy5a32c6c2016-07-07 14:29:06 -0700149 MATCH_DISABLED_UNTIL_USED_COMPONENTS,
150 GET_DISABLED_UNTIL_USED_COMPONENTS,
Todd Kennedy1f397f42016-06-28 12:14:11 -0700151 GET_UNINSTALLED_PACKAGES,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700152 })
153 @Retention(RetentionPolicy.SOURCE)
154 public @interface ApplicationInfoFlags {}
155
156 /** @hide */
157 @IntDef(flag = true, value = {
158 GET_META_DATA,
159 GET_SHARED_LIBRARY_FILES,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800160 MATCH_ALL,
161 MATCH_DEBUG_TRIAGED_MISSING,
162 MATCH_DEFAULT_ONLY,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700163 MATCH_DISABLED_COMPONENTS,
164 MATCH_DISABLED_UNTIL_USED_COMPONENTS,
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600165 MATCH_DIRECT_BOOT_AWARE,
166 MATCH_DIRECT_BOOT_UNAWARE,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700167 MATCH_SYSTEM_ONLY,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800168 MATCH_UNINSTALLED_PACKAGES,
Todd Kennedy1f397f42016-06-28 12:14:11 -0700169 GET_DISABLED_COMPONENTS,
170 GET_DISABLED_UNTIL_USED_COMPONENTS,
171 GET_UNINSTALLED_PACKAGES,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700172 })
173 @Retention(RetentionPolicy.SOURCE)
174 public @interface ComponentInfoFlags {}
175
176 /** @hide */
177 @IntDef(flag = true, value = {
178 GET_META_DATA,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700179 GET_RESOLVED_FILTER,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800180 GET_SHARED_LIBRARY_FILES,
181 MATCH_ALL,
182 MATCH_DEBUG_TRIAGED_MISSING,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700183 MATCH_DISABLED_COMPONENTS,
184 MATCH_DISABLED_UNTIL_USED_COMPONENTS,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700185 MATCH_DEFAULT_ONLY,
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600186 MATCH_DIRECT_BOOT_AWARE,
187 MATCH_DIRECT_BOOT_UNAWARE,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700188 MATCH_SYSTEM_ONLY,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800189 MATCH_UNINSTALLED_PACKAGES,
Todd Kennedy1f397f42016-06-28 12:14:11 -0700190 GET_DISABLED_COMPONENTS,
191 GET_DISABLED_UNTIL_USED_COMPONENTS,
192 GET_UNINSTALLED_PACKAGES,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700193 })
194 @Retention(RetentionPolicy.SOURCE)
195 public @interface ResolveInfoFlags {}
196
197 /** @hide */
198 @IntDef(flag = true, value = {
199 GET_META_DATA,
200 })
201 @Retention(RetentionPolicy.SOURCE)
202 public @interface PermissionInfoFlags {}
203
204 /** @hide */
205 @IntDef(flag = true, value = {
206 GET_META_DATA,
207 })
208 @Retention(RetentionPolicy.SOURCE)
209 public @interface PermissionGroupInfoFlags {}
210
211 /** @hide */
212 @IntDef(flag = true, value = {
213 GET_META_DATA,
214 })
215 @Retention(RetentionPolicy.SOURCE)
216 public @interface InstrumentationInfoFlags {}
217
218 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800219 * {@link PackageInfo} flag: return information about
220 * activities in the package in {@link PackageInfo#activities}.
221 */
222 public static final int GET_ACTIVITIES = 0x00000001;
223
224 /**
225 * {@link PackageInfo} flag: return information about
226 * intent receivers in the package in
227 * {@link PackageInfo#receivers}.
228 */
229 public static final int GET_RECEIVERS = 0x00000002;
230
231 /**
232 * {@link PackageInfo} flag: return information about
233 * services in the package in {@link PackageInfo#services}.
234 */
235 public static final int GET_SERVICES = 0x00000004;
236
237 /**
238 * {@link PackageInfo} flag: return information about
239 * content providers in the package in
240 * {@link PackageInfo#providers}.
241 */
242 public static final int GET_PROVIDERS = 0x00000008;
243
244 /**
245 * {@link PackageInfo} flag: return information about
246 * instrumentation in the package in
247 * {@link PackageInfo#instrumentation}.
248 */
249 public static final int GET_INSTRUMENTATION = 0x00000010;
250
251 /**
252 * {@link PackageInfo} flag: return information about the
253 * intent filters supported by the activity.
254 */
255 public static final int GET_INTENT_FILTERS = 0x00000020;
256
257 /**
258 * {@link PackageInfo} flag: return information about the
259 * signatures included in the package.
260 */
261 public static final int GET_SIGNATURES = 0x00000040;
262
263 /**
264 * {@link ResolveInfo} flag: return the IntentFilter that
265 * was matched for a particular ResolveInfo in
266 * {@link ResolveInfo#filter}.
267 */
268 public static final int GET_RESOLVED_FILTER = 0x00000040;
269
270 /**
271 * {@link ComponentInfo} flag: return the {@link ComponentInfo#metaData}
272 * data {@link android.os.Bundle}s that are associated with a component.
273 * This applies for any API returning a ComponentInfo subclass.
274 */
275 public static final int GET_META_DATA = 0x00000080;
276
277 /**
278 * {@link PackageInfo} flag: return the
279 * {@link PackageInfo#gids group ids} that are associated with an
280 * application.
Ken Wakasaf76a50c2012-03-09 19:56:35 +0900281 * This applies for any API returning a PackageInfo class, either
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800282 * directly or nested inside of another.
283 */
284 public static final int GET_GIDS = 0x00000100;
285
286 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700287 * @deprecated replaced with {@link #MATCH_DISABLED_COMPONENTS}
288 */
289 @Deprecated
290 public static final int GET_DISABLED_COMPONENTS = 0x00000200;
291
292 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800293 * {@link PackageInfo} flag: include disabled components in the returned info.
294 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700295 public static final int MATCH_DISABLED_COMPONENTS = 0x00000200;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800296
297 /**
298 * {@link ApplicationInfo} flag: return the
299 * {@link ApplicationInfo#sharedLibraryFiles paths to the shared libraries}
300 * that are associated with an application.
301 * This applies for any API returning an ApplicationInfo class, either
302 * directly or nested inside of another.
303 */
304 public static final int GET_SHARED_LIBRARY_FILES = 0x00000400;
305
306 /**
307 * {@link ProviderInfo} flag: return the
308 * {@link ProviderInfo#uriPermissionPatterns URI permission patterns}
309 * that are associated with a content provider.
Ken Wakasaf76a50c2012-03-09 19:56:35 +0900310 * This applies for any API returning a ProviderInfo class, either
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800311 * directly or nested inside of another.
312 */
313 public static final int GET_URI_PERMISSION_PATTERNS = 0x00000800;
314 /**
315 * {@link PackageInfo} flag: return information about
316 * permissions in the package in
317 * {@link PackageInfo#permissions}.
318 */
319 public static final int GET_PERMISSIONS = 0x00001000;
Amith Yamasani4b2e9342011-03-31 12:38:53 -0700320
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800321 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700322 * @deprecated replaced with {@link #MATCH_UNINSTALLED_PACKAGES}
323 */
324 @Deprecated
325 public static final int GET_UNINSTALLED_PACKAGES = 0x00002000;
326
327 /**
Kenny Root685f4902011-11-03 10:13:29 -0700328 * Flag parameter to retrieve some information about all applications (even
329 * uninstalled ones) which have data directories. This state could have
330 * resulted if applications have been deleted with flag
331 * {@code DONT_DELETE_DATA} with a possibility of being replaced or
332 * reinstalled in future.
333 * <p>
334 * Note: this flag may cause less information about currently installed
335 * applications to be returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800336 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700337 public static final int MATCH_UNINSTALLED_PACKAGES = 0x00002000;
Amith Yamasani4b2e9342011-03-31 12:38:53 -0700338
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800339 /**
340 * {@link PackageInfo} flag: return information about
Dianne Hackborn49237342009-08-27 20:08:01 -0700341 * hardware preferences in
Adam Lesinskid3edfde2014-08-08 17:32:44 -0700342 * {@link PackageInfo#configPreferences PackageInfo.configPreferences},
343 * and requested features in {@link PackageInfo#reqFeatures} and
344 * {@link PackageInfo#featureGroups}.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800345 */
346 public static final int GET_CONFIGURATIONS = 0x00004000;
347
348 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700349 * @deprecated replaced with {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS}.
350 */
351 @Deprecated
352 public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 0x00008000;
353
354 /**
Dianne Hackbornfd7aded2013-01-22 17:10:23 -0800355 * {@link PackageInfo} flag: include disabled components which are in
356 * that state only because of {@link #COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED}
357 * in the returned info. Note that if you set this flag, applications
358 * that are in this disabled state will be reported as enabled.
359 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700360 public static final int MATCH_DISABLED_UNTIL_USED_COMPONENTS = 0x00008000;
Dianne Hackbornfd7aded2013-01-22 17:10:23 -0800361
362 /**
Dianne Hackborn1655be42009-05-08 14:29:01 -0700363 * Resolution and querying flag: if set, only filters that support the
364 * {@link android.content.Intent#CATEGORY_DEFAULT} will be considered for
365 * matching. This is a synonym for including the CATEGORY_DEFAULT in your
366 * supplied Intent.
367 */
Fabrice Di Meglio9f7e39f2015-04-10 20:40:16 -0700368 public static final int MATCH_DEFAULT_ONLY = 0x00010000;
369
370 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700371 * Querying flag: if set and if the platform is doing any filtering of the
372 * results, then the filtering will not happen. This is a synonym for saying
373 * that all results should be returned.
374 * <p>
375 * <em>This flag should be used with extreme care.</em>
Fabrice Di Meglio9f7e39f2015-04-10 20:40:16 -0700376 */
377 public static final int MATCH_ALL = 0x00020000;
Dianne Hackborn1655be42009-05-08 14:29:01 -0700378
Nicolas Prevot63798c52014-05-27 13:22:38 +0100379 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600380 * Querying flag: match components which are direct boot <em>unaware</em> in
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700381 * the returned info, regardless of the current user state.
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600382 * <p>
383 * When neither {@link #MATCH_DIRECT_BOOT_AWARE} nor
384 * {@link #MATCH_DIRECT_BOOT_UNAWARE} are specified, the default behavior is
385 * to match only runnable components based on the user state. For example,
386 * when a user is started but credentials have not been presented yet, the
387 * user is running "locked" and only {@link #MATCH_DIRECT_BOOT_AWARE}
388 * components are returned. Once the user credentials have been presented,
389 * the user is running "unlocked" and both {@link #MATCH_DIRECT_BOOT_AWARE}
390 * and {@link #MATCH_DIRECT_BOOT_UNAWARE} components are returned.
391 *
392 * @see UserManager#isUserUnlocked()
Jeff Sharkeye17ac152015-11-06 22:40:29 -0800393 */
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600394 public static final int MATCH_DIRECT_BOOT_UNAWARE = 0x00040000;
395
396 /**
397 * Querying flag: match components which are direct boot <em>aware</em> in
398 * the returned info, regardless of the current user state.
399 * <p>
400 * When neither {@link #MATCH_DIRECT_BOOT_AWARE} nor
401 * {@link #MATCH_DIRECT_BOOT_UNAWARE} are specified, the default behavior is
402 * to match only runnable components based on the user state. For example,
403 * when a user is started but credentials have not been presented yet, the
404 * user is running "locked" and only {@link #MATCH_DIRECT_BOOT_AWARE}
405 * components are returned. Once the user credentials have been presented,
406 * the user is running "unlocked" and both {@link #MATCH_DIRECT_BOOT_AWARE}
407 * and {@link #MATCH_DIRECT_BOOT_UNAWARE} components are returned.
408 *
409 * @see UserManager#isUserUnlocked()
410 */
411 public static final int MATCH_DIRECT_BOOT_AWARE = 0x00080000;
412
413 /** @removed */
414 @Deprecated
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700415 public static final int MATCH_ENCRYPTION_UNAWARE = 0x00040000;
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600416 /** @removed */
417 @Deprecated
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700418 public static final int MATCH_ENCRYPTION_AWARE = 0x00080000;
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600419 /** @removed */
420 @Deprecated
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700421 public static final int MATCH_ENCRYPTION_AWARE_AND_UNAWARE = MATCH_ENCRYPTION_AWARE
422 | MATCH_ENCRYPTION_UNAWARE;
Jeff Sharkey2a9e3f82015-12-18 10:57:58 -0700423
424 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700425 * Querying flag: include only components from applications that are marked
426 * with {@link ApplicationInfo#FLAG_SYSTEM}.
Jeff Sharkey5217cac2015-12-20 15:34:01 -0700427 */
428 public static final int MATCH_SYSTEM_ONLY = 0x00100000;
429
430 /**
Todd Kennedyd6ee0ba2016-03-31 15:11:11 -0700431 * Internal {@link PackageInfo} flag: include only components on the system image.
432 * This will not return information on any unbundled update to system components.
433 * @hide
434 */
435 public static final int MATCH_FACTORY_ONLY = 0x00200000;
436
437 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700438 * Internal flag used to indicate that a system component has done their
439 * homework and verified that they correctly handle packages and components
440 * that come and go over time. In particular:
441 * <ul>
442 * <li>Apps installed on external storage, which will appear to be
443 * uninstalled while the the device is ejected.
444 * <li>Apps with encryption unaware components, which will appear to not
445 * exist while the device is locked.
446 * </ul>
Jeff Sharkeye17ac152015-11-06 22:40:29 -0800447 *
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700448 * @see #MATCH_UNINSTALLED_PACKAGES
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600449 * @see #MATCH_DIRECT_BOOT_AWARE
450 * @see #MATCH_DIRECT_BOOT_UNAWARE
Jeff Sharkeye17ac152015-11-06 22:40:29 -0800451 * @hide
452 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700453 public static final int MATCH_DEBUG_TRIAGED_MISSING = 0x10000000;
Jeff Sharkeye17ac152015-11-06 22:40:29 -0800454
455 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700456 * Flag for {@link #addCrossProfileIntentFilter}: if this flag is set: when
457 * resolving an intent that matches the {@code CrossProfileIntentFilter},
458 * the current profile will be skipped. Only activities in the target user
459 * can respond to the intent.
460 *
Nicolas Prevot63798c52014-05-27 13:22:38 +0100461 * @hide
462 */
463 public static final int SKIP_CURRENT_PROFILE = 0x00000002;
464
Tony Mak807e01c2015-12-01 20:19:03 +0000465 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700466 * Flag for {@link #addCrossProfileIntentFilter}: if this flag is set:
Tony Mak807e01c2015-12-01 20:19:03 +0000467 * activities in the other profiles can respond to the intent only if no activity with
468 * non-negative priority in current profile can respond to the intent.
469 * @hide
470 */
471 public static final int ONLY_IF_NO_MATCH_FOUND = 0x00000004;
472
Tor Norbyed9273d62013-05-30 15:59:53 -0700473 /** @hide */
474 @IntDef({PERMISSION_GRANTED, PERMISSION_DENIED})
475 @Retention(RetentionPolicy.SOURCE)
476 public @interface PermissionResult {}
477
Dianne Hackborn1655be42009-05-08 14:29:01 -0700478 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800479 * Permission check result: this is returned by {@link #checkPermission}
480 * if the permission has been granted to the given package.
481 */
482 public static final int PERMISSION_GRANTED = 0;
483
484 /**
485 * Permission check result: this is returned by {@link #checkPermission}
486 * if the permission has not been granted to the given package.
487 */
488 public static final int PERMISSION_DENIED = -1;
489
490 /**
491 * Signature check result: this is returned by {@link #checkSignatures}
Chris Palmer09f33602010-09-13 14:27:18 -0700492 * if all signatures on the two packages match.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800493 */
494 public static final int SIGNATURE_MATCH = 0;
495
496 /**
497 * Signature check result: this is returned by {@link #checkSignatures}
498 * if neither of the two packages is signed.
499 */
500 public static final int SIGNATURE_NEITHER_SIGNED = 1;
501
502 /**
503 * Signature check result: this is returned by {@link #checkSignatures}
Chris Palmer09f33602010-09-13 14:27:18 -0700504 * if the first package is not signed but the second is.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800505 */
506 public static final int SIGNATURE_FIRST_NOT_SIGNED = -1;
507
508 /**
509 * Signature check result: this is returned by {@link #checkSignatures}
Chris Palmer09f33602010-09-13 14:27:18 -0700510 * if the second package is not signed but the first is.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800511 */
512 public static final int SIGNATURE_SECOND_NOT_SIGNED = -2;
513
514 /**
515 * Signature check result: this is returned by {@link #checkSignatures}
Chris Palmer09f33602010-09-13 14:27:18 -0700516 * if not all signatures on both packages match.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800517 */
518 public static final int SIGNATURE_NO_MATCH = -3;
519
520 /**
521 * Signature check result: this is returned by {@link #checkSignatures}
Chris Palmer09f33602010-09-13 14:27:18 -0700522 * if either of the packages are not valid.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800523 */
524 public static final int SIGNATURE_UNKNOWN_PACKAGE = -4;
525
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700526 /**
527 * Flag for {@link #setApplicationEnabledSetting(String, int, int)}
528 * and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
529 * component or application is in its default enabled state (as specified
530 * in its manifest).
531 */
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800532 public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0;
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700533
534 /**
535 * Flag for {@link #setApplicationEnabledSetting(String, int, int)}
536 * and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
537 * component or application has been explictily enabled, regardless of
538 * what it has specified in its manifest.
539 */
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800540 public static final int COMPONENT_ENABLED_STATE_ENABLED = 1;
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700541
542 /**
543 * Flag for {@link #setApplicationEnabledSetting(String, int, int)}
544 * and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
545 * component or application has been explicitly disabled, regardless of
546 * what it has specified in its manifest.
547 */
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800548 public static final int COMPONENT_ENABLED_STATE_DISABLED = 2;
549
550 /**
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700551 * Flag for {@link #setApplicationEnabledSetting(String, int, int)} only: The
552 * user has explicitly disabled the application, regardless of what it has
553 * specified in its manifest. Because this is due to the user's request,
554 * they may re-enable it if desired through the appropriate system UI. This
kmccormick30498b42013-03-27 17:39:17 -0700555 * option currently <strong>cannot</strong> be used with
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700556 * {@link #setComponentEnabledSetting(ComponentName, int, int)}.
557 */
558 public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3;
559
560 /**
Dianne Hackbornfd7aded2013-01-22 17:10:23 -0800561 * Flag for {@link #setApplicationEnabledSetting(String, int, int)} only: This
562 * application should be considered, until the point where the user actually
563 * wants to use it. This means that it will not normally show up to the user
564 * (such as in the launcher), but various parts of the user interface can
565 * use {@link #GET_DISABLED_UNTIL_USED_COMPONENTS} to still see it and allow
566 * the user to select it (as for example an IME, device admin, etc). Such code,
567 * once the user has selected the app, should at that point also make it enabled.
568 * This option currently <strong>can not</strong> be used with
569 * {@link #setComponentEnabledSetting(ComponentName, int, int)}.
570 */
571 public static final int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4;
572
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700573 /** @hide */
574 @IntDef(flag = true, value = {
575 INSTALL_FORWARD_LOCK,
576 INSTALL_REPLACE_EXISTING,
577 INSTALL_ALLOW_TEST,
578 INSTALL_EXTERNAL,
579 INSTALL_INTERNAL,
580 INSTALL_FROM_ADB,
581 INSTALL_ALL_USERS,
582 INSTALL_ALLOW_DOWNGRADE,
583 INSTALL_GRANT_RUNTIME_PERMISSIONS,
584 INSTALL_FORCE_VOLUME_UUID,
585 INSTALL_FORCE_PERMISSION_PROMPT,
586 INSTALL_EPHEMERAL,
Todd Kennedy39bfee52016-02-24 10:28:21 -0800587 INSTALL_DONT_KILL_APP,
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700588 })
589 @Retention(RetentionPolicy.SOURCE)
590 public @interface InstallFlags {}
591
Dianne Hackbornfd7aded2013-01-22 17:10:23 -0800592 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700593 * Flag parameter for {@link #installPackage} to indicate that this package
594 * should be installed as forward locked, i.e. only the app itself should
595 * have access to its code and non-resource assets.
596 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700597 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800598 */
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700599 public static final int INSTALL_FORWARD_LOCK = 0x00000001;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800600
601 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700602 * Flag parameter for {@link #installPackage} to indicate that you want to
603 * replace an already installed package, if one exists.
604 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700605 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800606 */
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700607 public static final int INSTALL_REPLACE_EXISTING = 0x00000002;
608
609 /**
Amith Yamasani4b2e9342011-03-31 12:38:53 -0700610 * Flag parameter for {@link #installPackage} to indicate that you want to
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700611 * allow test packages (those that have set android:testOnly in their
612 * manifest) to be installed.
613 * @hide
614 */
615 public static final int INSTALL_ALLOW_TEST = 0x00000004;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800616
617 /**
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -0700618 * Flag parameter for {@link #installPackage} to indicate that this package
619 * must be installed to an ASEC on a {@link VolumeInfo#TYPE_PUBLIC}.
620 *
Suchi Amalapurapuaf8e9f42010-01-12 10:17:28 -0800621 * @hide
622 */
Suchi Amalapurapu5b993ce2010-02-12 09:43:29 -0800623 public static final int INSTALL_EXTERNAL = 0x00000008;
Oscar Montemayor539d3c42010-01-29 15:27:00 -0800624
625 /**
Kenny Root5ab21572011-07-27 11:11:19 -0700626 * Flag parameter for {@link #installPackage} to indicate that this package
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -0700627 * must be installed to internal storage.
628 *
Kenny Root5ab21572011-07-27 11:11:19 -0700629 * @hide
630 */
631 public static final int INSTALL_INTERNAL = 0x00000010;
632
633 /**
634 * Flag parameter for {@link #installPackage} to indicate that this install
635 * was initiated via ADB.
636 *
637 * @hide
638 */
639 public static final int INSTALL_FROM_ADB = 0x00000020;
Suchi Amalapurapu14b6abd2010-03-17 08:37:04 -0700640
641 /**
Dianne Hackborn7767eac2012-08-23 18:25:40 -0700642 * Flag parameter for {@link #installPackage} to indicate that this install
643 * should immediately be visible to all users.
644 *
645 * @hide
646 */
647 public static final int INSTALL_ALL_USERS = 0x00000040;
648
649 /**
650 * Flag parameter for {@link #installPackage} to indicate that it is okay
651 * to install an update to an app where the newly installed app has a lower
Alex Klyubin921dd752016-02-24 13:21:41 -0800652 * version code than the currently installed app. This is permitted only if
653 * the currently installed app is marked debuggable.
Dianne Hackborn7767eac2012-08-23 18:25:40 -0700654 *
655 * @hide
656 */
657 public static final int INSTALL_ALLOW_DOWNGRADE = 0x00000080;
658
659 /**
Svet Ganov95c1ade2015-03-19 09:38:52 -0700660 * Flag parameter for {@link #installPackage} to indicate that all runtime
661 * permissions should be granted to the package. If {@link #INSTALL_ALL_USERS}
662 * is set the runtime permissions will be granted to all users, otherwise
663 * only to the owner.
664 *
665 * @hide
666 */
667 public static final int INSTALL_GRANT_RUNTIME_PERMISSIONS = 0x00000100;
668
Jeff Sharkeyab234092015-06-09 21:42:22 -0700669 /** {@hide} */
670 public static final int INSTALL_FORCE_VOLUME_UUID = 0x00000200;
671
Svet Ganov95c1ade2015-03-19 09:38:52 -0700672 /**
Todd Kennedya1d12cf2015-09-29 15:43:00 -0700673 * Flag parameter for {@link #installPackage} to indicate that we always want to force
674 * the prompt for permission approval. This overrides any special behaviour for internal
675 * components.
676 *
677 * @hide
678 */
679 public static final int INSTALL_FORCE_PERMISSION_PROMPT = 0x00000400;
680
681 /**
Todd Kennedy27c24fb2015-09-17 16:49:25 -0700682 * Flag parameter for {@link #installPackage} to indicate that this package is
Todd Kennedy2699f062015-11-20 13:07:17 -0800683 * to be installed as a lightweight "ephemeral" app.
684 *
685 * @hide
686 */
Todd Kennedy373f0b42015-12-16 14:45:14 -0800687 public static final int INSTALL_EPHEMERAL = 0x00000800;
Todd Kennedy2699f062015-11-20 13:07:17 -0800688
689 /**
Todd Kennedy39bfee52016-02-24 10:28:21 -0800690 * Flag parameter for {@link #installPackage} to indicate that this package contains
691 * a feature split to an existing application and the existing application should not
692 * be killed during the installation process.
693 *
694 * @hide
695 */
696 public static final int INSTALL_DONT_KILL_APP = 0x00001000;
697
698 /**
Todd Kennedyb1072712016-04-26 15:41:20 -0700699 * Flag parameter for {@link #installPackage} to indicate that this package is an
700 * upgrade to a package that refers to the SDK via release letter.
701 *
702 * @hide
703 */
704 public static final int INSTALL_FORCE_SDK = 0x00002000;
705
706 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800707 * Flag parameter for
708 * {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
709 * that you don't want to kill the app containing the component. Be careful when you set this
710 * since changing component states can make the containing application's behavior unpredictable.
711 */
712 public static final int DONT_KILL_APP = 0x00000001;
713
714 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700715 * Installation return code: this is passed to the
716 * {@link IPackageInstallObserver} on success.
717 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700718 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800719 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700720 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800721 public static final int INSTALL_SUCCEEDED = 1;
722
723 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700724 * Installation return code: this is passed to the
725 * {@link IPackageInstallObserver} if the package is already installed.
726 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700727 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800728 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700729 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800730 public static final int INSTALL_FAILED_ALREADY_EXISTS = -1;
731
732 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700733 * Installation return code: this is passed to the
734 * {@link IPackageInstallObserver} if the package archive file is invalid.
735 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700736 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800737 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700738 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800739 public static final int INSTALL_FAILED_INVALID_APK = -2;
740
741 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700742 * Installation return code: this is passed to the
743 * {@link IPackageInstallObserver} if the URI passed in is invalid.
744 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700745 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800746 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700747 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800748 public static final int INSTALL_FAILED_INVALID_URI = -3;
749
750 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700751 * Installation return code: this is passed to the
752 * {@link IPackageInstallObserver} if the package manager service found that
753 * the device didn't have enough storage space to install the app.
754 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700755 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800756 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700757 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800758 public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4;
759
760 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700761 * Installation return code: this is passed to the
762 * {@link IPackageInstallObserver} if a package is already installed with
763 * the same name.
764 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700765 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800766 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700767 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800768 public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5;
769
770 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700771 * Installation return code: this is passed to the
772 * {@link IPackageInstallObserver} if the requested shared user does not
773 * exist.
774 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700775 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800776 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700777 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800778 public static final int INSTALL_FAILED_NO_SHARED_USER = -6;
779
780 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700781 * Installation return code: this is passed to the
782 * {@link IPackageInstallObserver} if a previously installed package of the
783 * same name has a different signature than the new package (and the old
784 * package's data was not removed).
785 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700786 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800787 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700788 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800789 public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7;
790
791 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700792 * Installation return code: this is passed to the
793 * {@link IPackageInstallObserver} if the new package is requested a shared
794 * user which is already installed on the device and does not have matching
795 * signature.
796 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700797 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800798 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700799 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800800 public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8;
801
802 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700803 * Installation return code: this is passed to the
804 * {@link IPackageInstallObserver} if the new package uses a shared library
805 * that is not available.
806 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700807 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800808 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700809 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800810 public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9;
811
812 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700813 * Installation return code: this is passed to the
814 * {@link IPackageInstallObserver} if the new package uses a shared library
815 * that is not available.
816 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700817 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800818 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700819 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800820 public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10;
821
822 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700823 * Installation return code: this is passed to the
824 * {@link IPackageInstallObserver} if the new package failed while
825 * optimizing and validating its dex files, either because there was not
826 * enough storage or the validation failed.
827 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700828 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800829 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700830 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800831 public static final int INSTALL_FAILED_DEXOPT = -11;
832
833 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700834 * Installation return code: this is passed to the
835 * {@link IPackageInstallObserver} if the new package failed because the
836 * current SDK version is older than that required by the package.
837 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700838 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800839 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700840 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800841 public static final int INSTALL_FAILED_OLDER_SDK = -12;
842
843 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700844 * Installation return code: this is passed to the
845 * {@link IPackageInstallObserver} if the new package failed because it
846 * contains a content provider with the same authority as a provider already
847 * installed in the system.
848 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700849 * @hide
The Android Open Source Project10592532009-03-18 17:39:46 -0700850 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700851 @SystemApi
The Android Open Source Project10592532009-03-18 17:39:46 -0700852 public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13;
853
854 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700855 * Installation return code: this is passed to the
856 * {@link IPackageInstallObserver} if the new package failed because the
857 * current SDK version is newer than that required by the package.
858 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700859 * @hide
Dianne Hackborn851a5412009-05-08 12:06:44 -0700860 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700861 @SystemApi
Dianne Hackborn851a5412009-05-08 12:06:44 -0700862 public static final int INSTALL_FAILED_NEWER_SDK = -14;
863
864 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700865 * Installation return code: this is passed to the
866 * {@link IPackageInstallObserver} if the new package failed because it has
867 * specified that it is a test-only package and the caller has not supplied
868 * the {@link #INSTALL_ALLOW_TEST} flag.
869 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700870 * @hide
871 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700872 @SystemApi
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700873 public static final int INSTALL_FAILED_TEST_ONLY = -15;
874
875 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700876 * Installation return code: this is passed to the
877 * {@link IPackageInstallObserver} if the package being installed contains
878 * native code, but none that is compatible with the device's CPU_ABI.
879 *
Dianne Hackbornb1811182009-05-21 15:45:42 -0700880 * @hide
881 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700882 @SystemApi
Dianne Hackbornb1811182009-05-21 15:45:42 -0700883 public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16;
884
885 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700886 * Installation return code: this is passed to the
887 * {@link IPackageInstallObserver} if the new package uses a feature that is
888 * not available.
889 *
Dianne Hackborn49237342009-08-27 20:08:01 -0700890 * @hide
891 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700892 @SystemApi
Dianne Hackborn49237342009-08-27 20:08:01 -0700893 public static final int INSTALL_FAILED_MISSING_FEATURE = -17;
894
Suchi Amalapurapuaf8e9f42010-01-12 10:17:28 -0800895 // ------ Errors related to sdcard
896 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700897 * Installation return code: this is passed to the
898 * {@link IPackageInstallObserver} if a secure container mount point
899 * couldn't be accessed on external media.
900 *
Suchi Amalapurapuaf8e9f42010-01-12 10:17:28 -0800901 * @hide
902 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700903 @SystemApi
Suchi Amalapurapuaf8e9f42010-01-12 10:17:28 -0800904 public static final int INSTALL_FAILED_CONTAINER_ERROR = -18;
905
Dianne Hackborn49237342009-08-27 20:08:01 -0700906 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700907 * Installation return code: this is passed to the
908 * {@link IPackageInstallObserver} if the new package couldn't be installed
909 * in the specified install location.
910 *
Suchi Amalapurapub56ae202010-02-04 22:51:07 -0800911 * @hide
912 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700913 @SystemApi
Suchi Amalapurapub56ae202010-02-04 22:51:07 -0800914 public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19;
915
916 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700917 * Installation return code: this is passed to the
918 * {@link IPackageInstallObserver} if the new package couldn't be installed
919 * in the specified install location because the media is not available.
920 *
Suchi Amalapurapu8a9ab242010-03-11 16:49:16 -0800921 * @hide
922 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700923 @SystemApi
Suchi Amalapurapu8a9ab242010-03-11 16:49:16 -0800924 public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20;
925
926 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700927 * Installation return code: this is passed to the
928 * {@link IPackageInstallObserver} if the new package couldn't be installed
929 * because the verification timed out.
930 *
Kenny Root5ab21572011-07-27 11:11:19 -0700931 * @hide
932 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700933 @SystemApi
Kenny Root5ab21572011-07-27 11:11:19 -0700934 public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21;
935
936 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700937 * Installation return code: this is passed to the
938 * {@link IPackageInstallObserver} if the new package couldn't be installed
939 * because the verification did not succeed.
940 *
Kenny Root5ab21572011-07-27 11:11:19 -0700941 * @hide
942 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700943 @SystemApi
Kenny Root5ab21572011-07-27 11:11:19 -0700944 public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22;
945
946 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700947 * Installation return code: this is passed to the
948 * {@link IPackageInstallObserver} if the package changed from what the
949 * calling program expected.
950 *
Kenny Root5ab21572011-07-27 11:11:19 -0700951 * @hide
952 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700953 @SystemApi
Kenny Root5ab21572011-07-27 11:11:19 -0700954 public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23;
955
956 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700957 * Installation return code: this is passed to the
958 * {@link IPackageInstallObserver} if the new package is assigned a
959 * different UID than it previously held.
960 *
Dianne Hackbornd0c5f512012-06-07 16:53:59 -0700961 * @hide
962 */
963 public static final int INSTALL_FAILED_UID_CHANGED = -24;
964
965 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700966 * Installation return code: this is passed to the
967 * {@link IPackageInstallObserver} if the new package has an older version
968 * code than the currently installed package.
969 *
Dianne Hackborn7767eac2012-08-23 18:25:40 -0700970 * @hide
971 */
972 public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25;
973
974 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700975 * Installation return code: this is passed to the
976 * {@link IPackageInstallObserver} if the old package has target SDK high
977 * enough to support runtime permission and the new package has target SDK
978 * low enough to not support runtime permissions.
979 *
Svetoslavd9653702015-05-13 18:02:46 -0700980 * @hide
981 */
982 @SystemApi
983 public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26;
984
985 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700986 * Installation parse return code: this is passed to the
987 * {@link IPackageInstallObserver} if the parser was given a path that is
988 * not a file, or does not end with the expected '.apk' extension.
989 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700990 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800991 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700992 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800993 public static final int INSTALL_PARSE_FAILED_NOT_APK = -100;
994
995 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700996 * Installation parse return code: this is passed to the
997 * {@link IPackageInstallObserver} if the parser was unable to retrieve the
998 * AndroidManifest.xml file.
999 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001000 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001001 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001002 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001003 public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101;
1004
1005 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001006 * Installation parse return code: this is passed to the
1007 * {@link IPackageInstallObserver} if the parser encountered an unexpected
1008 * exception.
1009 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001010 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001011 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001012 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001013 public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102;
1014
1015 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001016 * Installation parse return code: this is passed to the
1017 * {@link IPackageInstallObserver} if the parser did not find any
1018 * certificates in the .apk.
1019 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001020 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001021 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001022 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001023 public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103;
1024
1025 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001026 * Installation parse return code: this is passed to the
1027 * {@link IPackageInstallObserver} if the parser found inconsistent
1028 * certificates on the files in the .apk.
1029 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001030 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001031 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001032 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001033 public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104;
1034
1035 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001036 * Installation parse return code: this is passed to the
1037 * {@link IPackageInstallObserver} if the parser encountered a
1038 * CertificateEncodingException in one of the files in the .apk.
1039 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001040 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001041 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001042 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001043 public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105;
1044
1045 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001046 * Installation parse return code: this is passed to the
1047 * {@link IPackageInstallObserver} if the parser encountered a bad or
1048 * missing package name in the manifest.
1049 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001050 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001051 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001052 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001053 public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106;
1054
1055 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001056 * Installation parse return code: this is passed to the
1057 * {@link IPackageInstallObserver} if the parser encountered a bad shared
1058 * user id name in the manifest.
1059 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001060 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001061 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001062 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001063 public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107;
1064
1065 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001066 * Installation parse return code: this is passed to the
1067 * {@link IPackageInstallObserver} if the parser encountered some structural
1068 * problem in the manifest.
1069 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001070 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001071 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001072 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001073 public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108;
1074
1075 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001076 * Installation parse return code: this is passed to the
1077 * {@link IPackageInstallObserver} if the parser did not find any actionable
1078 * tags (instrumentation or application) in the manifest.
1079 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001080 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001081 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001082 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001083 public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109;
1084
1085 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001086 * Installation failed return code: this is passed to the
1087 * {@link IPackageInstallObserver} if the system failed to install the
1088 * package because of system issues.
1089 *
Suchi Amalapurapu5b993ce2010-02-12 09:43:29 -08001090 * @hide
1091 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001092 @SystemApi
Suchi Amalapurapu5b993ce2010-02-12 09:43:29 -08001093 public static final int INSTALL_FAILED_INTERNAL_ERROR = -110;
1094
1095 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001096 * Installation failed return code: this is passed to the
1097 * {@link IPackageInstallObserver} if the system failed to install the
1098 * package because the user is restricted from installing apps.
1099 *
Amith Yamasanie4cf7342012-12-17 11:12:09 -08001100 * @hide
1101 */
1102 public static final int INSTALL_FAILED_USER_RESTRICTED = -111;
1103
1104 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001105 * Installation failed return code: this is passed to the
1106 * {@link IPackageInstallObserver} if the system failed to install the
1107 * package because it is attempting to define a permission that is already
1108 * defined by some existing package.
1109 * <p>
1110 * The package name of the app which has already defined the permission is
1111 * passed to a {@link PackageInstallObserver}, if any, as the
1112 * {@link #EXTRA_FAILURE_EXISTING_PACKAGE} string extra; and the name of the
1113 * permission being redefined is passed in the
1114 * {@link #EXTRA_FAILURE_EXISTING_PERMISSION} string extra.
Christopher Tatef1977b42014-03-24 16:25:51 -07001115 *
Christopher Tatef1977b42014-03-24 16:25:51 -07001116 * @hide
1117 */
1118 public static final int INSTALL_FAILED_DUPLICATE_PERMISSION = -112;
1119
1120 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001121 * Installation failed return code: this is passed to the
1122 * {@link IPackageInstallObserver} if the system failed to install the
1123 * package because its packaged native code did not match any of the ABIs
1124 * supported by the system.
Ramin Zaghi1378aba2014-02-28 15:03:19 +00001125 *
1126 * @hide
1127 */
Narayan Kamathd11f2232014-04-10 10:37:17 +01001128 public static final int INSTALL_FAILED_NO_MATCHING_ABIS = -113;
Ramin Zaghi1378aba2014-02-28 15:03:19 +00001129
1130 /**
1131 * Internal return code for NativeLibraryHelper methods to indicate that the package
1132 * being processed did not contain any native code. This is placed here only so that
1133 * it can belong to the same value space as the other install failure codes.
1134 *
1135 * @hide
1136 */
Narayan Kamathd11f2232014-04-10 10:37:17 +01001137 public static final int NO_NATIVE_LIBRARIES = -114;
Ramin Zaghi1378aba2014-02-28 15:03:19 +00001138
Jeff Sharkey7328a1b2014-08-07 14:01:43 -07001139 /** {@hide} */
Jeff Sharkeyf0600952014-08-07 17:31:53 -07001140 public static final int INSTALL_FAILED_ABORTED = -115;
Jeff Sharkey7328a1b2014-08-07 14:01:43 -07001141
Ramin Zaghi1378aba2014-02-28 15:03:19 +00001142 /**
Todd Kennedy2699f062015-11-20 13:07:17 -08001143 * Installation failed return code: ephemeral app installs are incompatible with some
1144 * other installation flags supplied for the operation; or other circumstances such
1145 * as trying to upgrade a system app via an ephemeral install.
1146 * @hide
1147 */
1148 public static final int INSTALL_FAILED_EPHEMERAL_INVALID = -116;
1149
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001150 /** @hide */
1151 @IntDef(flag = true, value = {
1152 DELETE_KEEP_DATA,
1153 DELETE_ALL_USERS,
1154 DELETE_SYSTEM_APP,
Todd Kennedy39bfee52016-02-24 10:28:21 -08001155 DELETE_DONT_KILL_APP,
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001156 })
1157 @Retention(RetentionPolicy.SOURCE)
1158 public @interface DeleteFlags {}
1159
Todd Kennedy2699f062015-11-20 13:07:17 -08001160 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001161 * Flag parameter for {@link #deletePackage} to indicate that you don't want to delete the
1162 * package's data directory.
1163 *
1164 * @hide
1165 */
Dianne Hackborn7767eac2012-08-23 18:25:40 -07001166 public static final int DELETE_KEEP_DATA = 0x00000001;
1167
1168 /**
1169 * Flag parameter for {@link #deletePackage} to indicate that you want the
1170 * package deleted for all users.
1171 *
1172 * @hide
1173 */
1174 public static final int DELETE_ALL_USERS = 0x00000002;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001175
1176 /**
Dianne Hackbornc895be72013-03-11 17:48:43 -07001177 * Flag parameter for {@link #deletePackage} to indicate that, if you are calling
1178 * uninstall on a system that has been updated, then don't do the normal process
1179 * of uninstalling the update and rolling back to the older system version (which
1180 * needs to happen for all users); instead, just mark the app as uninstalled for
1181 * the current user.
1182 *
1183 * @hide
1184 */
1185 public static final int DELETE_SYSTEM_APP = 0x00000004;
1186
1187 /**
Todd Kennedy39bfee52016-02-24 10:28:21 -08001188 * Flag parameter for {@link #deletePackage} to indicate that, if you are calling
1189 * uninstall on a package that is replaced to provide new feature splits, the
1190 * existing application should not be killed during the removal process.
1191 *
1192 * @hide
1193 */
1194 public static final int DELETE_DONT_KILL_APP = 0x00000008;
1195
1196 /**
Kenny Rootc39bb4a2011-02-28 13:27:19 -08001197 * Return code for when package deletion succeeds. This is passed to the
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001198 * {@link IPackageDeleteObserver} if the system succeeded in deleting the
1199 * package.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001200 *
Kenny Rootc39bb4a2011-02-28 13:27:19 -08001201 * @hide
1202 */
1203 public static final int DELETE_SUCCEEDED = 1;
1204
1205 /**
1206 * Deletion failed return code: this is passed to the
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001207 * {@link IPackageDeleteObserver} if the system failed to delete the package
1208 * for an unspecified reason.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001209 *
Kenny Rootc39bb4a2011-02-28 13:27:19 -08001210 * @hide
1211 */
1212 public static final int DELETE_FAILED_INTERNAL_ERROR = -1;
1213
1214 /**
1215 * Deletion failed return code: this is passed to the
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001216 * {@link IPackageDeleteObserver} if the system failed to delete the package
1217 * because it is the active DevicePolicy manager.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001218 *
Kenny Rootc39bb4a2011-02-28 13:27:19 -08001219 * @hide
1220 */
1221 public static final int DELETE_FAILED_DEVICE_POLICY_MANAGER = -2;
1222
1223 /**
Amith Yamasanie4cf7342012-12-17 11:12:09 -08001224 * Deletion failed return code: this is passed to the
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001225 * {@link IPackageDeleteObserver} if the system failed to delete the package
1226 * since the user is restricted.
Amith Yamasanie4cf7342012-12-17 11:12:09 -08001227 *
1228 * @hide
1229 */
1230 public static final int DELETE_FAILED_USER_RESTRICTED = -3;
1231
1232 /**
Kenny Guy1b88da52014-07-10 16:33:49 +01001233 * Deletion failed return code: this is passed to the
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001234 * {@link IPackageDeleteObserver} if the system failed to delete the package
1235 * because a profile or device owner has marked the package as
1236 * uninstallable.
Kenny Guyc13053b2014-05-29 14:17:17 +01001237 *
1238 * @hide
1239 */
Jeff Sharkeyf0600952014-08-07 17:31:53 -07001240 public static final int DELETE_FAILED_OWNER_BLOCKED = -4;
1241
1242 /** {@hide} */
1243 public static final int DELETE_FAILED_ABORTED = -5;
Kenny Guyc13053b2014-05-29 14:17:17 +01001244
1245 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001246 * Return code that is passed to the {@link IPackageMoveObserver} when the
Kenny Rootc39bb4a2011-02-28 13:27:19 -08001247 * package has been successfully moved by the system.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001248 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001249 * @hide
1250 */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07001251 public static final int MOVE_SUCCEEDED = -100;
1252
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001253 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001254 * Error code that is passed to the {@link IPackageMoveObserver} when the
1255 * package hasn't been successfully moved by the system because of
1256 * insufficient memory on specified media.
1257 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001258 * @hide
1259 */
1260 public static final int MOVE_FAILED_INSUFFICIENT_STORAGE = -1;
1261
1262 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001263 * Error code that is passed to the {@link IPackageMoveObserver} if the
1264 * specified package doesn't exist.
1265 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001266 * @hide
1267 */
1268 public static final int MOVE_FAILED_DOESNT_EXIST = -2;
1269
1270 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001271 * Error code that is passed to the {@link IPackageMoveObserver} if the
1272 * specified package cannot be moved since its a system package.
1273 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001274 * @hide
1275 */
1276 public static final int MOVE_FAILED_SYSTEM_PACKAGE = -3;
1277
1278 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001279 * Error code that is passed to the {@link IPackageMoveObserver} if the
1280 * specified package cannot be moved since its forward locked.
1281 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001282 * @hide
1283 */
1284 public static final int MOVE_FAILED_FORWARD_LOCKED = -4;
1285
1286 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001287 * Error code that is passed to the {@link IPackageMoveObserver} if the
1288 * specified package cannot be moved to the specified location.
1289 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001290 * @hide
1291 */
1292 public static final int MOVE_FAILED_INVALID_LOCATION = -5;
1293
1294 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001295 * Error code that is passed to the {@link IPackageMoveObserver} if the
1296 * specified package cannot be moved to the specified location.
1297 *
Suchi Amalapurapu8a9ab242010-03-11 16:49:16 -08001298 * @hide
1299 */
1300 public static final int MOVE_FAILED_INTERNAL_ERROR = -6;
1301
1302 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001303 * Error code that is passed to the {@link IPackageMoveObserver} if the
1304 * specified package already has an operation pending in the queue.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001305 *
Kenny Rootdeb11262010-08-02 11:36:21 -07001306 * @hide
1307 */
1308 public static final int MOVE_FAILED_OPERATION_PENDING = -7;
1309
1310 /**
Makoto Onukif34db0a2016-02-17 11:17:15 -08001311 * Error code that is passed to the {@link IPackageMoveObserver} if the
1312 * specified package cannot be moved since it contains a device admin.
1313 *
1314 * @hide
1315 */
1316 public static final int MOVE_FAILED_DEVICE_ADMIN = -8;
1317
1318 /**
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001319 * Flag parameter for {@link #movePackage} to indicate that
1320 * the package should be moved to internal storage if its
1321 * been installed on external media.
1322 * @hide
1323 */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07001324 @Deprecated
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001325 public static final int MOVE_INTERNAL = 0x00000001;
1326
1327 /**
1328 * Flag parameter for {@link #movePackage} to indicate that
1329 * the package should be moved to external media.
1330 * @hide
1331 */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07001332 @Deprecated
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001333 public static final int MOVE_EXTERNAL_MEDIA = 0x00000002;
1334
Jeff Sharkey620b32b2015-04-23 19:36:02 -07001335 /** {@hide} */
1336 public static final String EXTRA_MOVE_ID = "android.content.pm.extra.MOVE_ID";
1337
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001338 /**
Kenny Root05ca4c92011-09-15 10:36:25 -07001339 * Usable by the required verifier as the {@code verificationCode} argument
1340 * for {@link PackageManager#verifyPendingInstall} to indicate that it will
1341 * allow the installation to proceed without any of the optional verifiers
1342 * needing to vote.
1343 *
1344 * @hide
1345 */
1346 public static final int VERIFICATION_ALLOW_WITHOUT_SUFFICIENT = 2;
1347
1348 /**
Kenny Root3a9b5fb2011-09-20 14:15:38 -07001349 * Used as the {@code verificationCode} argument for
1350 * {@link PackageManager#verifyPendingInstall} to indicate that the calling
1351 * package verifier allows the installation to proceed.
1352 */
1353 public static final int VERIFICATION_ALLOW = 1;
1354
1355 /**
1356 * Used as the {@code verificationCode} argument for
1357 * {@link PackageManager#verifyPendingInstall} to indicate the calling
1358 * package verifier does not vote to allow the installation to proceed.
1359 */
1360 public static final int VERIFICATION_REJECT = -1;
1361
1362 /**
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001363 * Used as the {@code verificationCode} argument for
1364 * {@link PackageManager#verifyIntentFilter} to indicate that the calling
1365 * IntentFilter Verifier confirms that the IntentFilter is verified.
1366 *
1367 * @hide
1368 */
Todd Kennedydfa93ab2016-03-03 15:24:33 -08001369 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001370 public static final int INTENT_FILTER_VERIFICATION_SUCCESS = 1;
1371
1372 /**
1373 * Used as the {@code verificationCode} argument for
1374 * {@link PackageManager#verifyIntentFilter} to indicate that the calling
1375 * IntentFilter Verifier confirms that the IntentFilter is NOT verified.
1376 *
1377 * @hide
1378 */
Todd Kennedydfa93ab2016-03-03 15:24:33 -08001379 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001380 public static final int INTENT_FILTER_VERIFICATION_FAILURE = -1;
1381
1382 /**
1383 * Internal status code to indicate that an IntentFilter verification result is not specified.
1384 *
1385 * @hide
1386 */
1387 public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED = 0;
1388
1389 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001390 * Used as the {@code status} argument for
1391 * {@link #updateIntentVerificationStatusAsUser} to indicate that the User
1392 * will always be prompted the Intent Disambiguation Dialog if there are two
1393 * or more Intent resolved for the IntentFilter's domain(s).
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001394 *
1395 * @hide
1396 */
1397 public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK = 1;
1398
1399 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001400 * Used as the {@code status} argument for
1401 * {@link #updateIntentVerificationStatusAsUser} to indicate that the User
1402 * will never be prompted the Intent Disambiguation Dialog if there are two
1403 * or more resolution of the Intent. The default App for the domain(s)
1404 * specified in the IntentFilter will also ALWAYS be used.
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001405 *
1406 * @hide
1407 */
1408 public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS = 2;
1409
1410 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001411 * Used as the {@code status} argument for
1412 * {@link #updateIntentVerificationStatusAsUser} to indicate that the User
1413 * may be prompted the Intent Disambiguation Dialog if there are two or more
1414 * Intent resolved. The default App for the domain(s) specified in the
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001415 * IntentFilter will also NEVER be presented to the User.
1416 *
1417 * @hide
1418 */
1419 public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER = 3;
1420
1421 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001422 * Used as the {@code status} argument for
1423 * {@link #updateIntentVerificationStatusAsUser} to indicate that this app
1424 * should always be considered as an ambiguous candidate for handling the
1425 * matching Intent even if there are other candidate apps in the "always"
1426 * state. Put another way: if there are any 'always ask' apps in a set of
1427 * more than one candidate app, then a disambiguation is *always* presented
1428 * even if there is another candidate app with the 'always' state.
Christopher Tate56f0ff32015-08-13 16:29:33 -07001429 *
1430 * @hide
1431 */
1432 public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK = 4;
1433
1434 /**
rich canningsd9ef3e52012-08-22 14:28:05 -07001435 * Can be used as the {@code millisecondsToDelay} argument for
1436 * {@link PackageManager#extendVerificationTimeout}. This is the
1437 * maximum time {@code PackageManager} waits for the verification
1438 * agent to return (in milliseconds).
1439 */
1440 public static final long MAXIMUM_VERIFICATION_TIMEOUT = 60*60*1000;
1441
1442 /**
Amith Yamasani0b285492011-04-14 17:35:23 -07001443 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device's
1444 * audio pipeline is low-latency, more suitable for audio applications sensitive to delays or
1445 * lag in sound input or output.
Dan Morrill898e1e82010-09-26 17:28:30 -07001446 */
1447 @SdkConstant(SdkConstantType.FEATURE)
1448 public static final String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
1449
1450 /**
1451 * Feature for {@link #getSystemAvailableFeatures} and
Unsuk Jung50909f62014-09-02 18:25:49 -07001452 * {@link #hasSystemFeature}: The device includes at least one form of audio
1453 * output, such as speakers, audio jack or streaming over bluetooth
1454 */
1455 @SdkConstant(SdkConstantType.FEATURE)
1456 public static final String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output";
1457
1458 /**
Glenn Kastencdcb5772015-05-06 15:54:49 -07001459 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Glenn Kasten7587edc2015-10-30 17:45:52 -07001460 * The device has professional audio level of functionality and performance.
Glenn Kastencdcb5772015-05-06 15:54:49 -07001461 */
1462 @SdkConstant(SdkConstantType.FEATURE)
1463 public static final String FEATURE_AUDIO_PRO = "android.hardware.audio.pro";
1464
1465 /**
Unsuk Jung50909f62014-09-02 18:25:49 -07001466 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08001467 * {@link #hasSystemFeature}: The device is capable of communicating with
1468 * other devices via Bluetooth.
1469 */
1470 @SdkConstant(SdkConstantType.FEATURE)
1471 public static final String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
1472
1473 /**
1474 * Feature for {@link #getSystemAvailableFeatures} and
Matthew Xiea7227722013-04-18 15:25:59 -07001475 * {@link #hasSystemFeature}: The device is capable of communicating with
1476 * other devices via Bluetooth Low Energy radio.
1477 */
1478 @SdkConstant(SdkConstantType.FEATURE)
1479 public static final String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le";
1480
1481 /**
1482 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001483 * {@link #hasSystemFeature}: The device has a camera facing away
1484 * from the screen.
1485 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001486 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001487 public static final String FEATURE_CAMERA = "android.hardware.camera";
Dan Morrill50ab63f2010-03-05 16:16:19 -08001488
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001489 /**
1490 * Feature for {@link #getSystemAvailableFeatures} and
1491 * {@link #hasSystemFeature}: The device's camera supports auto-focus.
1492 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001493 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001494 public static final String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus";
Dan Morrill50ab63f2010-03-05 16:16:19 -08001495
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001496 /**
1497 * Feature for {@link #getSystemAvailableFeatures} and
Eino-Ville Talvala752af832012-09-18 14:45:37 -07001498 * {@link #hasSystemFeature}: The device has at least one camera pointing in
Eino-Ville Talvala9131da22014-05-08 11:39:53 -07001499 * some direction, or can support an external camera being connected to it.
Eino-Ville Talvala752af832012-09-18 14:45:37 -07001500 */
1501 @SdkConstant(SdkConstantType.FEATURE)
1502 public static final String FEATURE_CAMERA_ANY = "android.hardware.camera.any";
1503
1504 /**
1505 * Feature for {@link #getSystemAvailableFeatures} and
Eino-Ville Talvala9131da22014-05-08 11:39:53 -07001506 * {@link #hasSystemFeature}: The device can support having an external camera connected to it.
1507 * The external camera may not always be connected or available to applications to use.
1508 */
1509 @SdkConstant(SdkConstantType.FEATURE)
1510 public static final String FEATURE_CAMERA_EXTERNAL = "android.hardware.camera.external";
1511
1512 /**
1513 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001514 * {@link #hasSystemFeature}: The device's camera supports flash.
1515 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001516 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001517 public static final String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash";
Dan Morrill50ab63f2010-03-05 16:16:19 -08001518
1519 /**
1520 * Feature for {@link #getSystemAvailableFeatures} and
Chih-Chung Changde1057c2010-06-14 19:15:00 +08001521 * {@link #hasSystemFeature}: The device has a front facing camera.
1522 */
1523 @SdkConstant(SdkConstantType.FEATURE)
1524 public static final String FEATURE_CAMERA_FRONT = "android.hardware.camera.front";
1525
1526 /**
Eino-Ville Talvala611fece2014-07-10 17:29:38 -07001527 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
1528 * of the cameras on the device supports the
1529 * {@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL full hardware}
1530 * capability level.
1531 */
1532 @SdkConstant(SdkConstantType.FEATURE)
1533 public static final String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full";
1534
1535 /**
1536 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
1537 * of the cameras on the device supports the
1538 * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR manual sensor}
1539 * capability level.
1540 */
1541 @SdkConstant(SdkConstantType.FEATURE)
1542 public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR =
1543 "android.hardware.camera.capability.manual_sensor";
1544
1545 /**
1546 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
1547 * of the cameras on the device supports the
1548 * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING manual post-processing}
1549 * capability level.
1550 */
1551 @SdkConstant(SdkConstantType.FEATURE)
1552 public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING =
1553 "android.hardware.camera.capability.manual_post_processing";
1554
1555 /**
1556 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
1557 * of the cameras on the device supports the
1558 * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW RAW}
1559 * capability level.
1560 */
1561 @SdkConstant(SdkConstantType.FEATURE)
1562 public static final String FEATURE_CAMERA_CAPABILITY_RAW =
1563 "android.hardware.camera.capability.raw";
1564
1565 /**
Chih-Chung Changde1057c2010-06-14 19:15:00 +08001566 * Feature for {@link #getSystemAvailableFeatures} and
Alex Ray0c9d61f2013-10-03 12:17:54 -07001567 * {@link #hasSystemFeature}: The device is capable of communicating with
1568 * consumer IR devices.
1569 */
1570 @SdkConstant(SdkConstantType.FEATURE)
1571 public static final String FEATURE_CONSUMER_IR = "android.hardware.consumerir";
1572
1573 /**
1574 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08001575 * {@link #hasSystemFeature}: The device supports one or more methods of
1576 * reporting current location.
1577 */
1578 @SdkConstant(SdkConstantType.FEATURE)
1579 public static final String FEATURE_LOCATION = "android.hardware.location";
1580
1581 /**
1582 * Feature for {@link #getSystemAvailableFeatures} and
1583 * {@link #hasSystemFeature}: The device has a Global Positioning System
1584 * receiver and can report precise location.
1585 */
1586 @SdkConstant(SdkConstantType.FEATURE)
1587 public static final String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
1588
1589 /**
1590 * Feature for {@link #getSystemAvailableFeatures} and
1591 * {@link #hasSystemFeature}: The device can report location with coarse
1592 * accuracy using a network-based geolocation system.
1593 */
1594 @SdkConstant(SdkConstantType.FEATURE)
1595 public static final String FEATURE_LOCATION_NETWORK = "android.hardware.location.network";
1596
1597 /**
1598 * Feature for {@link #getSystemAvailableFeatures} and
1599 * {@link #hasSystemFeature}: The device can record audio via a
1600 * microphone.
1601 */
1602 @SdkConstant(SdkConstantType.FEATURE)
1603 public static final String FEATURE_MICROPHONE = "android.hardware.microphone";
1604
1605 /**
1606 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill76437d32010-09-01 11:17:20 -07001607 * {@link #hasSystemFeature}: The device can communicate using Near-Field
1608 * Communications (NFC).
1609 */
1610 @SdkConstant(SdkConstantType.FEATURE)
1611 public static final String FEATURE_NFC = "android.hardware.nfc";
1612
1613 /**
1614 * Feature for {@link #getSystemAvailableFeatures} and
Martijn Coenenf4bf1582013-07-22 12:01:19 -07001615 * {@link #hasSystemFeature}: The device supports host-
1616 * based NFC card emulation.
Martijn Coenendf4d1d62013-08-28 11:18:58 -07001617 *
1618 * TODO remove when depending apps have moved to new constant.
1619 * @hide
1620 * @deprecated
Martijn Coenenf4bf1582013-07-22 12:01:19 -07001621 */
Jose Lima970417c2014-04-10 10:42:19 -07001622 @Deprecated
Martijn Coenenf4bf1582013-07-22 12:01:19 -07001623 @SdkConstant(SdkConstantType.FEATURE)
1624 public static final String FEATURE_NFC_HCE = "android.hardware.nfc.hce";
1625
1626 /**
1627 * Feature for {@link #getSystemAvailableFeatures} and
Martijn Coenendf4d1d62013-08-28 11:18:58 -07001628 * {@link #hasSystemFeature}: The device supports host-
1629 * based NFC card emulation.
1630 */
1631 @SdkConstant(SdkConstantType.FEATURE)
1632 public static final String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
1633
1634 /**
1635 * Feature for {@link #getSystemAvailableFeatures} and
Yoshinobu Itoc52adfe2016-01-22 18:14:18 +09001636 * {@link #hasSystemFeature}: The device supports host-
1637 * based NFC-F card emulation.
1638 */
1639 @SdkConstant(SdkConstantType.FEATURE)
1640 public static final String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
1641
1642 /**
1643 * Feature for {@link #getSystemAvailableFeatures} and
Jesse Hall7f517062014-07-18 11:54:41 -07001644 * {@link #hasSystemFeature}: The device supports the OpenGL ES
1645 * <a href="http://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
1646 * Android Extension Pack</a>.
1647 */
1648 @SdkConstant(SdkConstantType.FEATURE)
1649 public static final String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
1650
1651 /**
1652 * Feature for {@link #getSystemAvailableFeatures} and
Jesse Hall39ceeb52016-03-10 09:04:26 -08001653 * {@link #hasSystemFeature(String, int)}: If this feature is supported, the Vulkan native API
1654 * will enumerate at least one {@code VkPhysicalDevice}, and the feature version will indicate
1655 * what level of optional hardware features limits it supports.
Jesse Hallf77a34f2016-02-04 18:41:33 -08001656 * <p>
1657 * Level 0 includes the base Vulkan requirements as well as:
1658 * <ul><li>{@code VkPhysicalDeviceFeatures::textureCompressionETC2}</li></ul>
1659 * <p>
1660 * Level 1 additionally includes:
1661 * <ul>
1662 * <li>{@code VkPhysicalDeviceFeatures::fullDrawIndexUint32}</li>
1663 * <li>{@code VkPhysicalDeviceFeatures::imageCubeArray}</li>
1664 * <li>{@code VkPhysicalDeviceFeatures::independentBlend}</li>
1665 * <li>{@code VkPhysicalDeviceFeatures::geometryShader}</li>
1666 * <li>{@code VkPhysicalDeviceFeatures::tessellationShader}</li>
1667 * <li>{@code VkPhysicalDeviceFeatures::sampleRateShading}</li>
1668 * <li>{@code VkPhysicalDeviceFeatures::textureCompressionASTC_LDR}</li>
1669 * <li>{@code VkPhysicalDeviceFeatures::fragmentStoresAndAtomics}</li>
1670 * <li>{@code VkPhysicalDeviceFeatures::shaderImageGatherExtended}</li>
1671 * <li>{@code VkPhysicalDeviceFeatures::shaderUniformBufferArrayDynamicIndexing}</li>
1672 * <li>{@code VkPhysicalDeviceFeatures::shaderSampledImageArrayDynamicIndexing}</li>
1673 * </ul>
1674 */
1675 @SdkConstant(SdkConstantType.FEATURE)
1676 public static final String FEATURE_VULKAN_HARDWARE_LEVEL = "android.hardware.vulkan.level";
1677
1678 /**
1679 * Feature for {@link #getSystemAvailableFeatures} and
Jesse Hall39ceeb52016-03-10 09:04:26 -08001680 * {@link #hasSystemFeature(String, int)}: The version of this feature indicates the highest
Jesse Hallf77a34f2016-02-04 18:41:33 -08001681 * {@code VkPhysicalDeviceProperties::apiVersion} supported by the physical devices that support
1682 * the hardware level indicated by {@link #FEATURE_VULKAN_HARDWARE_LEVEL}. The feature version
1683 * uses the same encoding as Vulkan version numbers:
1684 * <ul>
1685 * <li>Major version number in bits 31-22</li>
1686 * <li>Minor version number in bits 21-12</li>
1687 * <li>Patch version number in bits 11-0</li>
1688 * </ul>
1689 */
1690 @SdkConstant(SdkConstantType.FEATURE)
1691 public static final String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version";
1692
1693 /**
1694 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill5744bb42010-09-01 19:18:57 -07001695 * {@link #hasSystemFeature}: The device includes an accelerometer.
1696 */
1697 @SdkConstant(SdkConstantType.FEATURE)
1698 public static final String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer";
1699
1700 /**
1701 * Feature for {@link #getSystemAvailableFeatures} and
1702 * {@link #hasSystemFeature}: The device includes a barometer (air
1703 * pressure sensor.)
1704 */
1705 @SdkConstant(SdkConstantType.FEATURE)
1706 public static final String FEATURE_SENSOR_BAROMETER = "android.hardware.sensor.barometer";
1707
1708 /**
1709 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08001710 * {@link #hasSystemFeature}: The device includes a magnetometer (compass).
1711 */
1712 @SdkConstant(SdkConstantType.FEATURE)
1713 public static final String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass";
1714
1715 /**
1716 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill5744bb42010-09-01 19:18:57 -07001717 * {@link #hasSystemFeature}: The device includes a gyroscope.
Dan Morrill50ab63f2010-03-05 16:16:19 -08001718 */
1719 @SdkConstant(SdkConstantType.FEATURE)
Dan Morrill5744bb42010-09-01 19:18:57 -07001720 public static final String FEATURE_SENSOR_GYROSCOPE = "android.hardware.sensor.gyroscope";
Dan Morrill50ab63f2010-03-05 16:16:19 -08001721
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001722 /**
1723 * Feature for {@link #getSystemAvailableFeatures} and
1724 * {@link #hasSystemFeature}: The device includes a light sensor.
1725 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001726 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001727 public static final String FEATURE_SENSOR_LIGHT = "android.hardware.sensor.light";
Dan Morrill50ab63f2010-03-05 16:16:19 -08001728
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001729 /**
1730 * Feature for {@link #getSystemAvailableFeatures} and
1731 * {@link #hasSystemFeature}: The device includes a proximity sensor.
1732 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001733 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001734 public static final String FEATURE_SENSOR_PROXIMITY = "android.hardware.sensor.proximity";
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001735
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001736 /**
1737 * Feature for {@link #getSystemAvailableFeatures} and
Aravind Akella068b0c02013-10-12 17:39:15 -07001738 * {@link #hasSystemFeature}: The device includes a hardware step counter.
1739 */
1740 @SdkConstant(SdkConstantType.FEATURE)
1741 public static final String FEATURE_SENSOR_STEP_COUNTER = "android.hardware.sensor.stepcounter";
1742
1743 /**
1744 * Feature for {@link #getSystemAvailableFeatures} and
1745 * {@link #hasSystemFeature}: The device includes a hardware step detector.
1746 */
1747 @SdkConstant(SdkConstantType.FEATURE)
1748 public static final String FEATURE_SENSOR_STEP_DETECTOR = "android.hardware.sensor.stepdetector";
1749
1750 /**
1751 * Feature for {@link #getSystemAvailableFeatures} and
Vinod Krishnan8afb23c2014-04-30 11:11:39 -07001752 * {@link #hasSystemFeature}: The device includes a heart rate monitor.
1753 */
1754 @SdkConstant(SdkConstantType.FEATURE)
1755 public static final String FEATURE_SENSOR_HEART_RATE = "android.hardware.sensor.heartrate";
1756
1757 /**
1758 * Feature for {@link #getSystemAvailableFeatures} and
Trevor Johns682c24e2016-04-12 10:13:47 -07001759 * {@link #hasSystemFeature}: The heart rate sensor on this device is an Electrocardiogram.
Vinod Krishnan1ab76892014-08-20 11:11:55 -07001760 */
1761 @SdkConstant(SdkConstantType.FEATURE)
1762 public static final String FEATURE_SENSOR_HEART_RATE_ECG =
1763 "android.hardware.sensor.heartrate.ecg";
1764
1765 /**
1766 * Feature for {@link #getSystemAvailableFeatures} and
Aravind Akella8b8e74b2014-07-09 11:52:39 -07001767 * {@link #hasSystemFeature}: The device includes a relative humidity sensor.
1768 */
1769 @SdkConstant(SdkConstantType.FEATURE)
1770 public static final String FEATURE_SENSOR_RELATIVE_HUMIDITY =
1771 "android.hardware.sensor.relative_humidity";
1772
1773 /**
1774 * Feature for {@link #getSystemAvailableFeatures} and
1775 * {@link #hasSystemFeature}: The device includes an ambient temperature sensor.
1776 */
1777 @SdkConstant(SdkConstantType.FEATURE)
1778 public static final String FEATURE_SENSOR_AMBIENT_TEMPERATURE =
1779 "android.hardware.sensor.ambient_temperature";
1780
1781 /**
1782 * Feature for {@link #getSystemAvailableFeatures} and
Ashutosh Joshieae371b2015-04-09 10:30:07 -07001783 * {@link #hasSystemFeature}: The device supports high fidelity sensor processing
1784 * capabilities.
1785 */
1786 @SdkConstant(SdkConstantType.FEATURE)
1787 public static final String FEATURE_HIFI_SENSORS =
1788 "android.hardware.sensor.hifi_sensors";
1789
1790 /**
1791 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001792 * {@link #hasSystemFeature}: The device has a telephony radio with data
1793 * communication support.
1794 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001795 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001796 public static final String FEATURE_TELEPHONY = "android.hardware.telephony";
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001797
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001798 /**
1799 * Feature for {@link #getSystemAvailableFeatures} and
1800 * {@link #hasSystemFeature}: The device has a CDMA telephony stack.
1801 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001802 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001803 public static final String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma";
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001804
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001805 /**
1806 * Feature for {@link #getSystemAvailableFeatures} and
1807 * {@link #hasSystemFeature}: The device has a GSM telephony stack.
1808 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001809 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001810 public static final String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm";
Hung-ying Tyan3424c022010-08-27 18:08:19 +08001811
1812 /**
1813 * Feature for {@link #getSystemAvailableFeatures} and
Mike Lockwoodf4ca2472011-02-27 11:23:25 -08001814 * {@link #hasSystemFeature}: The device supports connecting to USB devices
1815 * as the USB host.
1816 */
1817 @SdkConstant(SdkConstantType.FEATURE)
1818 public static final String FEATURE_USB_HOST = "android.hardware.usb.host";
1819
1820 /**
1821 * Feature for {@link #getSystemAvailableFeatures} and
1822 * {@link #hasSystemFeature}: The device supports connecting to USB accessories.
1823 */
1824 @SdkConstant(SdkConstantType.FEATURE)
1825 public static final String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory";
1826
1827 /**
1828 * Feature for {@link #getSystemAvailableFeatures} and
Hung-ying Tyan3424c022010-08-27 18:08:19 +08001829 * {@link #hasSystemFeature}: The SIP API is enabled on the device.
1830 */
1831 @SdkConstant(SdkConstantType.FEATURE)
1832 public static final String FEATURE_SIP = "android.software.sip";
1833
1834 /**
1835 * Feature for {@link #getSystemAvailableFeatures} and
1836 * {@link #hasSystemFeature}: The device supports SIP-based VOIP.
1837 */
1838 @SdkConstant(SdkConstantType.FEATURE)
1839 public static final String FEATURE_SIP_VOIP = "android.software.sip.voip";
1840
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001841 /**
1842 * Feature for {@link #getSystemAvailableFeatures} and
Ihab Awad1ec68882014-09-12 11:09:01 -07001843 * {@link #hasSystemFeature}: The Connection Service API is enabled on the device.
1844 */
1845 @SdkConstant(SdkConstantType.FEATURE)
1846 public static final String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice";
1847
1848 /**
1849 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrillb0fe0332010-04-05 14:43:58 -07001850 * {@link #hasSystemFeature}: The device's display has a touch screen.
1851 */
1852 @SdkConstant(SdkConstantType.FEATURE)
1853 public static final String FEATURE_TOUCHSCREEN = "android.hardware.touchscreen";
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001854
Dan Morrillb0fe0332010-04-05 14:43:58 -07001855 /**
1856 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08001857 * {@link #hasSystemFeature}: The device's touch screen supports
1858 * multitouch sufficient for basic two-finger gesture detection.
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001859 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001860 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001861 public static final String FEATURE_TOUCHSCREEN_MULTITOUCH = "android.hardware.touchscreen.multitouch";
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001862
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001863 /**
1864 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08001865 * {@link #hasSystemFeature}: The device's touch screen is capable of
1866 * tracking two or more fingers fully independently.
1867 */
1868 @SdkConstant(SdkConstantType.FEATURE)
1869 public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT = "android.hardware.touchscreen.multitouch.distinct";
1870
1871 /**
1872 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill6993d3d2010-09-03 14:30:14 -07001873 * {@link #hasSystemFeature}: The device's touch screen is capable of
1874 * tracking a full hand of fingers fully independently -- that is, 5 or
1875 * more simultaneous independent pointers.
1876 */
1877 @SdkConstant(SdkConstantType.FEATURE)
1878 public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND = "android.hardware.touchscreen.multitouch.jazzhand";
1879
1880 /**
1881 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrilla5376872011-01-23 13:15:53 -08001882 * {@link #hasSystemFeature}: The device does not have a touch screen, but
1883 * does support touch emulation for basic events. For instance, the
1884 * device might use a mouse or remote control to drive a cursor, and
1885 * emulate basic touch pointer events like down, up, drag, etc. All
1886 * devices that support android.hardware.touchscreen or a sub-feature are
1887 * presumed to also support faketouch.
1888 */
1889 @SdkConstant(SdkConstantType.FEATURE)
1890 public static final String FEATURE_FAKETOUCH = "android.hardware.faketouch";
1891
1892 /**
1893 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborne22fe932011-06-08 20:24:29 -07001894 * {@link #hasSystemFeature}: The device does not have a touch screen, but
1895 * does support touch emulation for basic events that supports distinct
1896 * tracking of two or more fingers. This is an extension of
1897 * {@link #FEATURE_FAKETOUCH} for input devices with this capability. Note
1898 * that unlike a distinct multitouch screen as defined by
1899 * {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT}, these kinds of input
1900 * devices will not actually provide full two-finger gestures since the
1901 * input is being transformed to cursor movement on the screen. That is,
1902 * single finger gestures will move a cursor; two-finger swipes will
1903 * result in single-finger touch events; other two-finger gestures will
1904 * result in the corresponding two-finger touch event.
1905 */
1906 @SdkConstant(SdkConstantType.FEATURE)
1907 public static final String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = "android.hardware.faketouch.multitouch.distinct";
1908
1909 /**
1910 * Feature for {@link #getSystemAvailableFeatures} and
1911 * {@link #hasSystemFeature}: The device does not have a touch screen, but
1912 * does support touch emulation for basic events that supports tracking
1913 * a hand of fingers (5 or more fingers) fully independently.
1914 * This is an extension of
1915 * {@link #FEATURE_FAKETOUCH} for input devices with this capability. Note
1916 * that unlike a multitouch screen as defined by
1917 * {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND}, not all two finger
1918 * gestures can be detected due to the limitations described for
1919 * {@link #FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT}.
1920 */
1921 @SdkConstant(SdkConstantType.FEATURE)
1922 public static final String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = "android.hardware.faketouch.multitouch.jazzhand";
1923
1924 /**
1925 * Feature for {@link #getSystemAvailableFeatures} and
Jim Millerd9b9d412015-07-22 19:51:40 -07001926 * {@link #hasSystemFeature}: The device has biometric hardware to detect a fingerprint.
1927 */
1928 @SdkConstant(SdkConstantType.FEATURE)
1929 public static final String FEATURE_FINGERPRINT = "android.hardware.fingerprint";
1930
1931 /**
1932 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborne289bff2011-06-13 19:33:22 -07001933 * {@link #hasSystemFeature}: The device supports portrait orientation
1934 * screens. For backwards compatibility, you can assume that if neither
1935 * this nor {@link #FEATURE_SCREEN_LANDSCAPE} is set then the device supports
1936 * both portrait and landscape.
1937 */
1938 @SdkConstant(SdkConstantType.FEATURE)
1939 public static final String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait";
1940
1941 /**
1942 * Feature for {@link #getSystemAvailableFeatures} and
1943 * {@link #hasSystemFeature}: The device supports landscape orientation
1944 * screens. For backwards compatibility, you can assume that if neither
1945 * this nor {@link #FEATURE_SCREEN_PORTRAIT} is set then the device supports
1946 * both portrait and landscape.
1947 */
1948 @SdkConstant(SdkConstantType.FEATURE)
1949 public static final String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape";
1950
1951 /**
1952 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001953 * {@link #hasSystemFeature}: The device supports live wallpapers.
1954 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001955 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001956 public static final String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper";
Oscar Montemayor1228d0a2010-01-28 12:01:44 -08001957 /**
Dan Morrill50ab63f2010-03-05 16:16:19 -08001958 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn119bbc32013-03-22 17:27:25 -07001959 * {@link #hasSystemFeature}: The device supports app widgets.
1960 */
1961 @SdkConstant(SdkConstantType.FEATURE)
1962 public static final String FEATURE_APP_WIDGETS = "android.software.app_widgets";
1963
1964 /**
Dianne Hackborn91097de2014-04-04 18:02:06 -07001965 * @hide
1966 * Feature for {@link #getSystemAvailableFeatures} and
1967 * {@link #hasSystemFeature}: The device supports
1968 * {@link android.service.voice.VoiceInteractionService} and
1969 * {@link android.app.VoiceInteractor}.
1970 */
1971 @SdkConstant(SdkConstantType.FEATURE)
1972 public static final String FEATURE_VOICE_RECOGNIZERS = "android.software.voice_recognizers";
1973
1974
1975 /**
Dianne Hackborn119bbc32013-03-22 17:27:25 -07001976 * Feature for {@link #getSystemAvailableFeatures} and
1977 * {@link #hasSystemFeature}: The device supports a home screen that is replaceable
1978 * by third party applications.
1979 */
1980 @SdkConstant(SdkConstantType.FEATURE)
1981 public static final String FEATURE_HOME_SCREEN = "android.software.home_screen";
1982
1983 /**
1984 * Feature for {@link #getSystemAvailableFeatures} and
1985 * {@link #hasSystemFeature}: The device supports adding new input methods implemented
1986 * with the {@link android.inputmethodservice.InputMethodService} API.
1987 */
1988 @SdkConstant(SdkConstantType.FEATURE)
1989 public static final String FEATURE_INPUT_METHODS = "android.software.input_methods";
1990
1991 /**
1992 * Feature for {@link #getSystemAvailableFeatures} and
Amith Yamasani44a01b72013-09-16 10:44:57 -07001993 * {@link #hasSystemFeature}: The device supports device policy enforcement via device admins.
1994 */
1995 @SdkConstant(SdkConstantType.FEATURE)
1996 public static final String FEATURE_DEVICE_ADMIN = "android.software.device_admin";
1997
1998 /**
1999 * Feature for {@link #getSystemAvailableFeatures} and
Tim Kilbournf94b6a92014-03-07 15:13:48 -08002000 * {@link #hasSystemFeature}: The device supports leanback UI. This is
2001 * typically used in a living room television experience, but is a software
2002 * feature unlike {@link #FEATURE_TELEVISION}. Devices running with this
2003 * feature will use resources associated with the "television" UI mode.
2004 */
2005 @SdkConstant(SdkConstantType.FEATURE)
2006 public static final String FEATURE_LEANBACK = "android.software.leanback";
2007
2008 /**
2009 * Feature for {@link #getSystemAvailableFeatures} and
2010 * {@link #hasSystemFeature}: The device supports only leanback UI. Only
2011 * applications designed for this experience should be run, though this is
2012 * not enforced by the system.
2013 * @hide
2014 */
2015 @SdkConstant(SdkConstantType.FEATURE)
2016 public static final String FEATURE_LEANBACK_ONLY = "android.software.leanback_only";
2017
2018 /**
2019 * Feature for {@link #getSystemAvailableFeatures} and
Jae Seocfd861e2014-08-27 14:02:15 -07002020 * {@link #hasSystemFeature}: The device supports live TV and can display
2021 * contents from TV inputs implemented with the
2022 * {@link android.media.tv.TvInputService} API.
2023 */
2024 @SdkConstant(SdkConstantType.FEATURE)
2025 public static final String FEATURE_LIVE_TV = "android.software.live_tv";
2026
2027 /**
2028 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08002029 * {@link #hasSystemFeature}: The device supports WiFi (802.11) networking.
2030 */
2031 @SdkConstant(SdkConstantType.FEATURE)
2032 public static final String FEATURE_WIFI = "android.hardware.wifi";
2033
2034 /**
Irfan Sheriff45b8b462011-09-07 11:24:16 -07002035 * Feature for {@link #getSystemAvailableFeatures} and
2036 * {@link #hasSystemFeature}: The device supports Wi-Fi Direct networking.
2037 */
2038 @SdkConstant(SdkConstantType.FEATURE)
2039 public static final String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
2040
2041 /**
Dianne Hackborn0cf2c8a2012-05-17 17:29:49 -07002042 * Feature for {@link #getSystemAvailableFeatures} and
Etan Cohen20d329b2015-09-29 13:49:02 -07002043 * {@link #hasSystemFeature}: The device supports Wi-Fi Aware (NAN)
2044 * networking.
2045 *
2046 * @hide PROPOSED_NAN_API
2047 */
2048 @SdkConstant(SdkConstantType.FEATURE)
2049 public static final String FEATURE_WIFI_NAN = "android.hardware.wifi.nan";
2050
2051 /**
2052 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn0cf2c8a2012-05-17 17:29:49 -07002053 * {@link #hasSystemFeature}: This is a device dedicated to showing UI
Todd Kennedy7f95a002015-04-22 14:28:25 -07002054 * on a vehicle headunit. A headunit here is defined to be inside a
2055 * vehicle that may or may not be moving. A headunit uses either a
2056 * primary display in the center console and/or additional displays in
2057 * the instrument cluster or elsewhere in the vehicle. Headunit display(s)
2058 * have limited size and resolution. The user will likely be focused on
2059 * driving so limiting driver distraction is a primary concern. User input
2060 * can be a variety of hard buttons, touch, rotary controllers and even mouse-
2061 * like interfaces.
2062 */
2063 @SdkConstant(SdkConstantType.FEATURE)
2064 public static final String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
2065
2066 /**
2067 * Feature for {@link #getSystemAvailableFeatures} and
2068 * {@link #hasSystemFeature}: This is a device dedicated to showing UI
Dianne Hackborn0cf2c8a2012-05-17 17:29:49 -07002069 * on a television. Television here is defined to be a typical living
2070 * room television experience: displayed on a big screen, where the user
2071 * is sitting far away from it, and the dominant form of input will be
2072 * something like a DPAD, not through touch or mouse.
Tim Kilbournf94b6a92014-03-07 15:13:48 -08002073 * @deprecated use {@link #FEATURE_LEANBACK} instead.
Dianne Hackborn0cf2c8a2012-05-17 17:29:49 -07002074 */
Jose Lima970417c2014-04-10 10:42:19 -07002075 @Deprecated
Dianne Hackborn0cf2c8a2012-05-17 17:29:49 -07002076 @SdkConstant(SdkConstantType.FEATURE)
2077 public static final String FEATURE_TELEVISION = "android.hardware.type.television";
2078
2079 /**
Justin Kohb5731f091c2014-02-13 16:06:59 -08002080 * Feature for {@link #getSystemAvailableFeatures} and
2081 * {@link #hasSystemFeature}: This is a device dedicated to showing UI
2082 * on a watch. A watch here is defined to be a device worn on the body, perhaps on
2083 * the wrist. The user is very close when interacting with the device.
2084 */
2085 @SdkConstant(SdkConstantType.FEATURE)
2086 public static final String FEATURE_WATCH = "android.hardware.type.watch";
2087
2088 /**
Adam Lesinski3d9bcb92014-02-18 14:05:14 -08002089 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
2090 * The device supports printing.
2091 */
2092 @SdkConstant(SdkConstantType.FEATURE)
2093 public static final String FEATURE_PRINTING = "android.software.print";
2094
2095 /**
2096 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
2097 * The device can perform backup and restore operations on installed applications.
2098 */
2099 @SdkConstant(SdkConstantType.FEATURE)
2100 public static final String FEATURE_BACKUP = "android.software.backup";
2101
2102 /**
Vladislav Kaznacheevd303b252015-10-27 17:30:58 -07002103 * Feature for {@link #getSystemAvailableFeatures} and
2104 * {@link #hasSystemFeature}: The device supports freeform window management.
2105 * Windows have title bars and can be moved and resized.
2106 */
Filip Gruszczynski811dc3b2015-11-23 12:34:22 -08002107 // If this feature is present, you also need to set
2108 // com.android.internal.R.config_freeformWindowManagement to true in your configuration overlay.
Vladislav Kaznacheevd303b252015-10-27 17:30:58 -07002109 @SdkConstant(SdkConstantType.FEATURE)
2110 public static final String FEATURE_FREEFORM_WINDOW_MANAGEMENT
2111 = "android.software.freeform_window_management";
2112
2113 /**
Adam Connors23cc04e2014-04-01 12:12:20 +01002114 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Wale Ogunwalefbe12c42015-12-06 16:23:50 -08002115 * The device supports picture-in-picture multi-window mode.
2116 */
2117 @SdkConstant(SdkConstantType.FEATURE)
2118 public static final String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
2119
2120 /**
2121 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Amith Yamasani1d653272014-09-11 17:56:05 -07002122 * The device supports creating secondary users and managed profiles via
2123 * {@link DevicePolicyManager}.
Adam Connors23cc04e2014-04-01 12:12:20 +01002124 */
2125 @SdkConstant(SdkConstantType.FEATURE)
Amith Yamasani1d653272014-09-11 17:56:05 -07002126 public static final String FEATURE_MANAGED_USERS = "android.software.managed_users";
2127
2128 /**
2129 * @hide
2130 * TODO: Remove after dependencies updated b/17392243
2131 */
2132 public static final String FEATURE_MANAGED_PROFILES = "android.software.managed_users";
Adam Connors23cc04e2014-04-01 12:12:20 +01002133
2134 /**
Ben Murdochf564c7f2014-05-20 18:58:06 +01002135 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Adam Connors19ccb5f2014-09-08 17:31:50 +01002136 * The device supports verified boot.
2137 */
2138 @SdkConstant(SdkConstantType.FEATURE)
2139 public static final String FEATURE_VERIFIED_BOOT = "android.software.verified_boot";
2140
2141 /**
2142 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
2143 * The device supports secure removal of users. When a user is deleted the data associated
2144 * with that user is securely deleted and no longer available.
2145 */
2146 @SdkConstant(SdkConstantType.FEATURE)
2147 public static final String FEATURE_SECURELY_REMOVES_USERS
2148 = "android.software.securely_removes_users";
2149
Jeff Sharkeyb92b05b2016-01-28 09:50:00 -07002150 /** {@hide} */
2151 @SdkConstant(SdkConstantType.FEATURE)
2152 public static final String FEATURE_FILE_BASED_ENCRYPTION
2153 = "android.software.file_based_encryption";
2154
Adam Connors19ccb5f2014-09-08 17:31:50 +01002155 /**
2156 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Ben Murdoch422c7a52014-05-16 13:45:47 +01002157 * The device has a full implementation of the android.webkit.* APIs. Devices
2158 * lacking this feature will not have a functioning WebView implementation.
2159 */
2160 @SdkConstant(SdkConstantType.FEATURE)
2161 public static final String FEATURE_WEBVIEW = "android.software.webview";
2162
2163 /**
Joe LaPenna4bb015d2014-07-04 17:15:54 -07002164 * Feature for {@link #getSystemAvailableFeatures} and
2165 * {@link #hasSystemFeature}: This device supports ethernet.
Joe LaPenna4bb015d2014-07-04 17:15:54 -07002166 */
2167 @SdkConstant(SdkConstantType.FEATURE)
2168 public static final String FEATURE_ETHERNET = "android.hardware.ethernet";
2169
2170 /**
Yuncheol Heoa0c4a062014-07-10 20:49:27 +09002171 * Feature for {@link #getSystemAvailableFeatures} and
2172 * {@link #hasSystemFeature}: This device supports HDMI-CEC.
2173 * @hide
2174 */
2175 @SdkConstant(SdkConstantType.FEATURE)
2176 public static final String FEATURE_HDMI_CEC = "android.hardware.hdmi.cec";
2177
2178 /**
Michael Wright6faa6752014-09-05 17:57:44 -07002179 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
2180 * The device has all of the inputs necessary to be considered a compatible game controller, or
2181 * includes a compatible game controller in the box.
2182 */
2183 @SdkConstant(SdkConstantType.FEATURE)
2184 public static final String FEATURE_GAMEPAD = "android.hardware.gamepad";
2185
Mike Lockwood5781cd52015-03-27 13:23:41 -07002186 /**
2187 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
2188 * The device has a full implementation of the android.media.midi.* APIs.
2189 */
2190 @SdkConstant(SdkConstantType.FEATURE)
2191 public static final String FEATURE_MIDI = "android.software.midi";
Michael Wright6faa6752014-09-05 17:57:44 -07002192
2193 /**
Ruben Brunkdd18a0b2015-12-04 16:16:31 -08002194 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Ruben Brunk927d3452016-05-02 19:30:51 -07002195 * The device implements an optimized mode for virtual reality (VR) applications that handles
2196 * stereoscopic rendering of notifications, and disables most monocular system UI components
2197 * while a VR application has user focus.
2198 * Devices declaring this feature must include an application implementing a
2199 * {@link android.service.vr.VrListenerService} that can be targeted by VR applications via
2200 * {@link android.app.Activity#setVrModeEnabled}.
Ruben Brunkdd18a0b2015-12-04 16:16:31 -08002201 */
2202 @SdkConstant(SdkConstantType.FEATURE)
2203 public static final String FEATURE_VR_MODE = "android.software.vr.mode";
2204
2205 /**
Ruben Brunk31d80ea2016-01-25 20:14:08 -08002206 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Ruben Brunk927d3452016-05-02 19:30:51 -07002207 * The device implements {@link #FEATURE_VR_MODE} but additionally meets extra CDD requirements
2208 * to provide a high-quality VR experience. In general, devices declaring this feature will
2209 * additionally:
2210 * <ul>
2211 * <li>Deliver consistent performance at a high framerate over an extended period of time
2212 * for typical VR application CPU/GPU workloads with a minimal number of frame drops for VR
2213 * applications that have called
2214 * {@link android.view.Window#setSustainedPerformanceMode}.</li>
2215 * <li>Implement {@link #FEATURE_HIFI_SENSORS} and have a low sensor latency.</li>
2216 * <li>Include optimizations to lower display persistence while running VR applications.</li>
2217 * <li>Implement an optimized render path to minimize latency to draw to the device's main
2218 * display.</li>
2219 * <li>Include the following EGL extensions: EGL_ANDROID_create_native_client_buffer,
2220 * EGL_ANDROID_front_buffer_auto_refresh, EGL_EXT_protected_content,
2221 * EGL_KHR_mutable_render_buffer, EGL_KHR_reusable_sync, and EGL_KHR_wait_sync.</li>
2222 * <li>Provide at least one CPU core that is reserved for use solely by the top, foreground
2223 * VR application process for critical render threads while such an application is
2224 * running.</li>
2225 * </ul>
Ruben Brunk31d80ea2016-01-25 20:14:08 -08002226 */
2227 @SdkConstant(SdkConstantType.FEATURE)
2228 public static final String FEATURE_VR_MODE_HIGH_PERFORMANCE
2229 = "android.hardware.vr.high_performance";
2230
2231 /**
Dianne Hackborne83cefce2010-02-04 17:38:14 -08002232 * Action to external storage service to clean out removed apps.
2233 * @hide
2234 */
2235 public static final String ACTION_CLEAN_EXTERNAL_STORAGE
2236 = "android.content.pm.CLEAN_EXTERNAL_STORAGE";
Oscar Montemayor1228d0a2010-01-28 12:01:44 -08002237
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002238 /**
Kenny Root5ab21572011-07-27 11:11:19 -07002239 * Extra field name for the URI to a verification file. Passed to a package
2240 * verifier.
2241 *
2242 * @hide
2243 */
2244 public static final String EXTRA_VERIFICATION_URI = "android.content.pm.extra.VERIFICATION_URI";
2245
2246 /**
2247 * Extra field name for the ID of a package pending verification. Passed to
2248 * a package verifier and is used to call back to
Kenny Root3a9b5fb2011-09-20 14:15:38 -07002249 * {@link PackageManager#verifyPendingInstall(int, int)}
Kenny Root5ab21572011-07-27 11:11:19 -07002250 */
2251 public static final String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
2252
2253 /**
2254 * Extra field name for the package identifier which is trying to install
2255 * the package.
2256 *
2257 * @hide
2258 */
2259 public static final String EXTRA_VERIFICATION_INSTALLER_PACKAGE
2260 = "android.content.pm.extra.VERIFICATION_INSTALLER_PACKAGE";
2261
2262 /**
2263 * Extra field name for the requested install flags for a package pending
2264 * verification. Passed to a package verifier.
2265 *
2266 * @hide
2267 */
2268 public static final String EXTRA_VERIFICATION_INSTALL_FLAGS
2269 = "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS";
2270
2271 /**
rich cannings13d428e2012-09-13 13:43:07 -07002272 * Extra field name for the uid of who is requesting to install
2273 * the package.
2274 *
2275 * @hide
2276 */
2277 public static final String EXTRA_VERIFICATION_INSTALLER_UID
2278 = "android.content.pm.extra.VERIFICATION_INSTALLER_UID";
2279
2280 /**
2281 * Extra field name for the package name of a package pending verification.
2282 *
2283 * @hide
2284 */
2285 public static final String EXTRA_VERIFICATION_PACKAGE_NAME
2286 = "android.content.pm.extra.VERIFICATION_PACKAGE_NAME";
2287 /**
rich canningsd1b5cfc2012-08-29 14:49:51 -07002288 * Extra field name for the result of a verification, either
2289 * {@link #VERIFICATION_ALLOW}, or {@link #VERIFICATION_REJECT}.
2290 * Passed to package verifiers after a package is verified.
2291 */
2292 public static final String EXTRA_VERIFICATION_RESULT
2293 = "android.content.pm.extra.VERIFICATION_RESULT";
2294
2295 /**
rich cannings13d428e2012-09-13 13:43:07 -07002296 * Extra field name for the version code of a package pending verification.
2297 *
2298 * @hide
2299 */
2300 public static final String EXTRA_VERIFICATION_VERSION_CODE
2301 = "android.content.pm.extra.VERIFICATION_VERSION_CODE";
2302
2303 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07002304 * Extra field name for the ID of a intent filter pending verification.
2305 * Passed to an intent filter verifier and is used to call back to
2306 * {@link #verifyIntentFilter}
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08002307 *
2308 * @hide
2309 */
2310 public static final String EXTRA_INTENT_FILTER_VERIFICATION_ID
2311 = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_ID";
2312
2313 /**
2314 * Extra field name for the scheme used for an intent filter pending verification. Passed to
2315 * an intent filter verifier and is used to construct the URI to verify against.
2316 *
2317 * Usually this is "https"
2318 *
2319 * @hide
2320 */
2321 public static final String EXTRA_INTENT_FILTER_VERIFICATION_URI_SCHEME
2322 = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_URI_SCHEME";
2323
2324 /**
2325 * Extra field name for the host names to be used for an intent filter pending verification.
2326 * Passed to an intent filter verifier and is used to construct the URI to verify the
2327 * intent filter.
2328 *
2329 * This is a space delimited list of hosts.
2330 *
2331 * @hide
2332 */
2333 public static final String EXTRA_INTENT_FILTER_VERIFICATION_HOSTS
2334 = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_HOSTS";
2335
2336 /**
2337 * Extra field name for the package name to be used for an intent filter pending verification.
2338 * Passed to an intent filter verifier and is used to check the verification responses coming
2339 * from the hosts. Each host response will need to include the package name of APK containing
2340 * the intent filter.
2341 *
2342 * @hide
2343 */
2344 public static final String EXTRA_INTENT_FILTER_VERIFICATION_PACKAGE_NAME
2345 = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_PACKAGE_NAME";
2346
2347 /**
2348 * The action used to request that the user approve a permission request
2349 * from the application.
Nick Kralevich035f80d2013-03-27 15:20:08 -07002350 *
2351 * @hide
2352 */
Svetoslavc6d1c342015-02-26 14:44:43 -08002353 @SystemApi
2354 public static final String ACTION_REQUEST_PERMISSIONS =
2355 "android.content.pm.action.REQUEST_PERMISSIONS";
Nick Kralevich035f80d2013-03-27 15:20:08 -07002356
2357 /**
Svetoslavc6d1c342015-02-26 14:44:43 -08002358 * The names of the requested permissions.
2359 * <p>
2360 * <strong>Type:</strong> String[]
2361 * </p>
2362 *
2363 * @hide
2364 */
2365 @SystemApi
2366 public static final String EXTRA_REQUEST_PERMISSIONS_NAMES =
2367 "android.content.pm.extra.REQUEST_PERMISSIONS_NAMES";
2368
2369 /**
2370 * The results from the permissions request.
2371 * <p>
2372 * <strong>Type:</strong> int[] of #PermissionResult
2373 * </p>
2374 *
2375 * @hide
2376 */
2377 @SystemApi
2378 public static final String EXTRA_REQUEST_PERMISSIONS_RESULTS
2379 = "android.content.pm.extra.REQUEST_PERMISSIONS_RESULTS";
Nick Kralevich035f80d2013-03-27 15:20:08 -07002380
2381 /**
Jeff Sharkeybb580672014-07-10 12:10:25 -07002382 * String extra for {@link PackageInstallObserver} in the 'extras' Bundle in case of
Christopher Tatef1977b42014-03-24 16:25:51 -07002383 * {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}. This extra names the package which provides
2384 * the existing definition for the permission.
2385 * @hide
2386 */
2387 public static final String EXTRA_FAILURE_EXISTING_PACKAGE
2388 = "android.content.pm.extra.FAILURE_EXISTING_PACKAGE";
2389
2390 /**
Jeff Sharkeybb580672014-07-10 12:10:25 -07002391 * String extra for {@link PackageInstallObserver} in the 'extras' Bundle in case of
Christopher Tatef1977b42014-03-24 16:25:51 -07002392 * {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}. This extra names the permission that is
2393 * being redundantly defined by the package being installed.
2394 * @hide
2395 */
2396 public static final String EXTRA_FAILURE_EXISTING_PERMISSION
2397 = "android.content.pm.extra.FAILURE_EXISTING_PERMISSION";
2398
Svet Ganov8c7f7002015-05-07 10:48:44 -07002399 /**
2400 * Permission flag: The permission is set in its current state
2401 * by the user and apps can still request it at runtime.
2402 *
2403 * @hide
2404 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002405 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07002406 public static final int FLAG_PERMISSION_USER_SET = 1 << 0;
2407
2408 /**
2409 * Permission flag: The permission is set in its current state
2410 * by the user and it is fixed, i.e. apps can no longer request
2411 * this permission.
2412 *
2413 * @hide
2414 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002415 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07002416 public static final int FLAG_PERMISSION_USER_FIXED = 1 << 1;
2417
2418 /**
2419 * Permission flag: The permission is set in its current state
2420 * by device policy and neither apps nor the user can change
2421 * its state.
2422 *
2423 * @hide
2424 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002425 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07002426 public static final int FLAG_PERMISSION_POLICY_FIXED = 1 << 2;
2427
2428 /**
2429 * Permission flag: The permission is set in a granted state but
2430 * access to resources it guards is restricted by other means to
2431 * enable revoking a permission on legacy apps that do not support
2432 * runtime permissions. If this permission is upgraded to runtime
2433 * because the app was updated to support runtime permissions, the
2434 * the permission will be revoked in the upgrade process.
2435 *
2436 * @hide
2437 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002438 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07002439 public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 1 << 3;
2440
Svet Ganovb3f22b42015-05-12 11:01:24 -07002441 /**
2442 * Permission flag: The permission is set in its current state
2443 * because the app is a component that is a part of the system.
2444 *
2445 * @hide
2446 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002447 @SystemApi
Svet Ganovb3f22b42015-05-12 11:01:24 -07002448 public static final int FLAG_PERMISSION_SYSTEM_FIXED = 1 << 4;
Svet Ganov8c7f7002015-05-07 10:48:44 -07002449
Svet Ganov77ab6a82015-07-03 12:03:02 -07002450 /**
2451 * Permission flag: The permission is granted by default because it
2452 * enables app functionality that is expected to work out-of-the-box
2453 * for providing a smooth user experience. For example, the phone app
2454 * is expected to have the phone permission.
2455 *
2456 * @hide
2457 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002458 @SystemApi
Svet Ganov77ab6a82015-07-03 12:03:02 -07002459 public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 1 << 5;
2460
Svet Ganov8c7f7002015-05-07 10:48:44 -07002461 /**
Svet Ganov9c165d72015-12-01 19:52:26 -08002462 * Permission flag: The permission has to be reviewed before any of
2463 * the app components can run.
2464 *
2465 * @hide
2466 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002467 @SystemApi
Svet Ganov9c165d72015-12-01 19:52:26 -08002468 public static final int FLAG_PERMISSION_REVIEW_REQUIRED = 1 << 6;
2469
2470 /**
Svet Ganov8c7f7002015-05-07 10:48:44 -07002471 * Mask for all permission flags.
2472 *
2473 * @hide
2474 */
2475 @SystemApi
Svet Ganovb3f22b42015-05-12 11:01:24 -07002476 public static final int MASK_PERMISSION_FLAGS = 0xFF;
Svet Ganov8c7f7002015-05-07 10:48:44 -07002477
Christopher Tatef1977b42014-03-24 16:25:51 -07002478 /**
Svet Ganovd7b1f4112016-02-09 18:49:23 -08002479 * This is a library that contains components apps can invoke. For
2480 * example, a services for apps to bind to, or standard chooser UI,
2481 * etc. This library is versioned and backwards compatible. Clients
2482 * should check its version via {@link android.ext.services.Version
2483 * #getVersionCode()} and avoid calling APIs added in later versions.
2484 *
2485 * @hide
2486 */
2487 public static final String SYSTEM_SHARED_LIBRARY_SERVICES = "android.ext.services";
2488
2489 /**
2490 * This is a library that contains components apps can dynamically
2491 * load. For example, new widgets, helper classes, etc. This library
2492 * is versioned and backwards compatible. Clients should check its
2493 * version via {@link android.ext.shared.Version#getVersionCode()}
2494 * and avoid calling APIs added in later versions.
2495 *
2496 * @hide
2497 */
2498 public static final String SYSTEM_SHARED_LIBRARY_SHARED = "android.ext.shared";
2499
2500 /**
Brian Carlstromca82e612016-04-19 23:16:08 -07002501 * Used when starting a process for an Activity.
2502 *
2503 * @hide
2504 */
2505 public static final int NOTIFY_PACKAGE_USE_ACTIVITY = 0;
2506
2507 /**
2508 * Used when starting a process for a Service.
2509 *
2510 * @hide
2511 */
2512 public static final int NOTIFY_PACKAGE_USE_SERVICE = 1;
2513
2514 /**
2515 * Used when moving a Service to the foreground.
2516 *
2517 * @hide
2518 */
2519 public static final int NOTIFY_PACKAGE_USE_FOREGROUND_SERVICE = 2;
2520
2521 /**
2522 * Used when starting a process for a BroadcastReceiver.
2523 *
2524 * @hide
2525 */
2526 public static final int NOTIFY_PACKAGE_USE_BROADCAST_RECEIVER = 3;
2527
2528 /**
2529 * Used when starting a process for a ContentProvider.
2530 *
2531 * @hide
2532 */
2533 public static final int NOTIFY_PACKAGE_USE_CONTENT_PROVIDER = 4;
2534
2535 /**
2536 * Used when starting a process for a BroadcastReceiver.
2537 *
2538 * @hide
2539 */
2540 public static final int NOTIFY_PACKAGE_USE_BACKUP = 5;
2541
2542 /**
2543 * Used with Context.getClassLoader() across Android packages.
2544 *
2545 * @hide
2546 */
2547 public static final int NOTIFY_PACKAGE_USE_CROSS_PACKAGE = 6;
2548
2549 /**
2550 * Used when starting a package within a process for Instrumentation.
2551 *
2552 * @hide
2553 */
2554 public static final int NOTIFY_PACKAGE_USE_INSTRUMENTATION = 7;
2555
2556 /**
2557 * Total number of usage reasons.
2558 *
2559 * @hide
2560 */
2561 public static final int NOTIFY_PACKAGE_USE_REASONS_COUNT = 8;
2562
2563 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002564 * Retrieve overall information about an application package that is
2565 * installed on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002566 *
2567 * @param packageName The full name (i.e. com.google.apps.contacts) of the
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002568 * desired package.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002569 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002570 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
2571 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
2572 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
2573 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
2574 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
2575 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
2576 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
2577 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
2578 * {@link #MATCH_UNINSTALLED_PACKAGES}
2579 * to modify the data returned.
2580 *
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002581 * @return A PackageInfo object containing information about the
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002582 * package. If flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the
Kenny Root5ab21572011-07-27 11:11:19 -07002583 * package is not found in the list of installed applications, the
2584 * package information is retrieved from the list of uninstalled
kmccormick30498b42013-03-27 17:39:17 -07002585 * applications (which includes installed applications as well as
2586 * applications with data directory i.e. applications which had been
2587 * deleted with {@code DONT_DELETE_DATA} flag set).
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002588 * @throws NameNotFoundException if a package with the given name cannot be
2589 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002590 * @see #GET_ACTIVITIES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002591 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002592 * @see #GET_GIDS
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002593 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002594 * @see #GET_INTENT_FILTERS
2595 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002596 * @see #GET_PERMISSIONS
2597 * @see #GET_PROVIDERS
2598 * @see #GET_RECEIVERS
2599 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002600 * @see #GET_SHARED_LIBRARY_FILES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002601 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002602 * @see #GET_URI_PERMISSION_PATTERNS
2603 * @see #MATCH_DISABLED_COMPONENTS
2604 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
2605 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002606 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002607 public abstract PackageInfo getPackageInfo(String packageName, @PackageInfoFlags int flags)
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002608 throws NameNotFoundException;
2609
2610 /**
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002611 * @hide
2612 * Retrieve overall information about an application package that is
2613 * installed on the system.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002614 *
2615 * @param packageName The full name (i.e. com.google.apps.contacts) of the
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002616 * desired package.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002617 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002618 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
2619 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
2620 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
2621 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
2622 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
2623 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
2624 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
2625 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
2626 * {@link #MATCH_UNINSTALLED_PACKAGES}
2627 * to modify the data returned.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002628 * @param userId The user id.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002629 *
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002630 * @return A PackageInfo object containing information about the
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002631 * package. If flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002632 * package is not found in the list of installed applications, the
2633 * package information is retrieved from the list of uninstalled
2634 * applications (which includes installed applications as well as
2635 * applications with data directory i.e. applications which had been
2636 * deleted with {@code DONT_DELETE_DATA} flag set).
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002637 * @throws NameNotFoundException if a package with the given name cannot be
2638 * found on the system.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002639 * @see #GET_ACTIVITIES
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002640 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002641 * @see #GET_GIDS
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002642 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002643 * @see #GET_INTENT_FILTERS
2644 * @see #GET_META_DATA
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002645 * @see #GET_PERMISSIONS
2646 * @see #GET_PROVIDERS
2647 * @see #GET_RECEIVERS
2648 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002649 * @see #GET_SHARED_LIBRARY_FILES
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002650 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002651 * @see #GET_URI_PERMISSION_PATTERNS
2652 * @see #MATCH_DISABLED_COMPONENTS
2653 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
2654 * @see #MATCH_UNINSTALLED_PACKAGES
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002655 */
2656 @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS)
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002657 public abstract PackageInfo getPackageInfoAsUser(String packageName,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002658 @PackageInfoFlags int flags, @UserIdInt int userId) throws NameNotFoundException;
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002659
2660 /**
Dianne Hackborn47096932010-02-11 15:57:09 -08002661 * Map from the current package names in use on the device to whatever
2662 * the current canonical name of that package is.
2663 * @param names Array of current names to be mapped.
2664 * @return Returns an array of the same size as the original, containing
2665 * the canonical name for each package.
2666 */
2667 public abstract String[] currentToCanonicalPackageNames(String[] names);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002668
Dianne Hackborn47096932010-02-11 15:57:09 -08002669 /**
2670 * Map from a packages canonical name to the current name in use on the device.
2671 * @param names Array of new names to be mapped.
2672 * @return Returns an array of the same size as the original, containing
2673 * the current name for each package.
2674 */
2675 public abstract String[] canonicalToCurrentPackageNames(String[] names);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002676
Dianne Hackborn47096932010-02-11 15:57:09 -08002677 /**
Andrew Solovay5ae13352014-06-06 12:23:09 -07002678 * Returns a "good" intent to launch a front-door activity in a package.
2679 * This is used, for example, to implement an "open" button when browsing
2680 * through packages. The current implementation looks first for a main
2681 * activity in the category {@link Intent#CATEGORY_INFO}, and next for a
2682 * main activity in the category {@link Intent#CATEGORY_LAUNCHER}. Returns
2683 * <code>null</code> if neither are found.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002684 *
2685 * @param packageName The name of the package to inspect.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002686 *
Andrew Solovay5ae13352014-06-06 12:23:09 -07002687 * @return A fully-qualified {@link Intent} that can be used to launch the
2688 * main activity in the package. Returns <code>null</code> if the package
2689 * does not contain such an activity, or if <em>packageName</em> is not
Ihab Awad1ec68882014-09-12 11:09:01 -07002690 * recognized.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002691 */
Mihai Predaeae850c2009-05-13 10:13:48 +02002692 public abstract Intent getLaunchIntentForPackage(String packageName);
2693
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002694 /**
Jose Lima970417c2014-04-10 10:42:19 -07002695 * Return a "good" intent to launch a front-door Leanback activity in a
2696 * package, for use for example to implement an "open" button when browsing
2697 * through packages. The current implementation will look for a main
2698 * activity in the category {@link Intent#CATEGORY_LEANBACK_LAUNCHER}, or
2699 * return null if no main leanback activities are found.
Adam Connors551c0782014-06-05 12:13:03 +01002700 *
Jose Lima970417c2014-04-10 10:42:19 -07002701 * @param packageName The name of the package to inspect.
2702 * @return Returns either a fully-qualified Intent that can be used to launch
2703 * the main Leanback activity in the package, or null if the package
2704 * does not contain such an activity.
2705 */
2706 public abstract Intent getLeanbackLaunchIntentForPackage(String packageName);
2707
2708 /**
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06002709 * Return an array of all of the POSIX secondary group IDs that have been
2710 * assigned to the given package.
2711 * <p>
2712 * Note that the same package may have different GIDs under different
2713 * {@link UserHandle} on the same device.
Adam Connors551c0782014-06-05 12:13:03 +01002714 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002715 * @param packageName The full name (i.e. com.google.apps.contacts) of the
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06002716 * desired package.
2717 * @return Returns an int array of the assigned GIDs, or null if there are
Jose Lima970417c2014-04-10 10:42:19 -07002718 * none.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002719 * @throws NameNotFoundException if a package with the given name cannot be
2720 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002721 */
2722 public abstract int[] getPackageGids(String packageName)
2723 throws NameNotFoundException;
2724
2725 /**
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06002726 * Return an array of all of the POSIX secondary group IDs that have been
2727 * assigned to the given package.
2728 * <p>
2729 * Note that the same package may have different GIDs under different
2730 * {@link UserHandle} on the same device.
Dianne Hackborna06de0f2012-12-11 16:34:47 -08002731 *
2732 * @param packageName The full name (i.e. com.google.apps.contacts) of the
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002733 * desired package.
2734 * @return Returns an int array of the assigned gids, or null if there are
2735 * none.
2736 * @throws NameNotFoundException if a package with the given name cannot be
2737 * found on the system.
Dianne Hackborna06de0f2012-12-11 16:34:47 -08002738 */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002739 public abstract int[] getPackageGids(String packageName, @PackageInfoFlags int flags)
Dianne Hackborna06de0f2012-12-11 16:34:47 -08002740 throws NameNotFoundException;
2741
2742 /**
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002743 * Return the UID associated with the given package name.
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06002744 * <p>
2745 * Note that the same package will have different UIDs under different
2746 * {@link UserHandle} on the same device.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002747 *
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002748 * @param packageName The full name (i.e. com.google.apps.contacts) of the
2749 * desired package.
2750 * @return Returns an integer UID who owns the given package name.
2751 * @throws NameNotFoundException if a package with the given name can not be
2752 * found on the system.
2753 */
2754 public abstract int getPackageUid(String packageName, @PackageInfoFlags int flags)
2755 throws NameNotFoundException;
2756
2757 /**
2758 * Return the UID associated with the given package name.
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06002759 * <p>
2760 * Note that the same package will have different UIDs under different
2761 * {@link UserHandle} on the same device.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002762 *
2763 * @param packageName The full name (i.e. com.google.apps.contacts) of the
2764 * desired package.
2765 * @param userId The user handle identifier to look up the package under.
2766 * @return Returns an integer UID who owns the given package name.
2767 * @throws NameNotFoundException if a package with the given name can not be
2768 * found on the system.
2769 * @hide
2770 */
2771 public abstract int getPackageUidAsUser(String packageName, @UserIdInt int userId)
2772 throws NameNotFoundException;
2773
2774 /**
2775 * Return the UID associated with the given package name.
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06002776 * <p>
2777 * Note that the same package will have different UIDs under different
2778 * {@link UserHandle} on the same device.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002779 *
2780 * @param packageName The full name (i.e. com.google.apps.contacts) of the
2781 * desired package.
2782 * @param userId The user handle identifier to look up the package under.
2783 * @return Returns an integer UID who owns the given package name.
2784 * @throws NameNotFoundException if a package with the given name can not be
2785 * found on the system.
2786 * @hide
2787 */
2788 public abstract int getPackageUidAsUser(String packageName, @PackageInfoFlags int flags,
2789 @UserIdInt int userId) throws NameNotFoundException;
2790
2791 /**
2792 * Retrieve all of the information we know about a particular permission.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002793 *
2794 * @param name The fully qualified name (i.e. com.google.permission.LOGIN)
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002795 * of the permission you are interested in.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002796 * @param flags Additional option flags. Use {@link #GET_META_DATA} to
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002797 * retrieve any meta-data associated with the permission.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002798 *
2799 * @return Returns a {@link PermissionInfo} containing information about the
2800 * permission.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002801 * @throws NameNotFoundException if a package with the given name cannot be
2802 * found on the system.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002803 *
2804 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002805 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002806 public abstract PermissionInfo getPermissionInfo(String name, @PermissionInfoFlags int flags)
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002807 throws NameNotFoundException;
2808
2809 /**
2810 * Query for all of the permissions associated with a particular group.
2811 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002812 * @param group The fully qualified name (i.e. com.google.permission.LOGIN)
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002813 * of the permission group you are interested in. Use null to
2814 * find all of the permissions not associated with a group.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002815 * @param flags Additional option flags. Use {@link #GET_META_DATA} to
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002816 * retrieve any meta-data associated with the permissions.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002817 *
2818 * @return Returns a list of {@link PermissionInfo} containing information
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002819 * about all of the permissions in the given group.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002820 * @throws NameNotFoundException if a package with the given name cannot be
2821 * found on the system.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002822 *
2823 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002824 */
2825 public abstract List<PermissionInfo> queryPermissionsByGroup(String group,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002826 @PermissionInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002827
2828 /**
2829 * Retrieve all of the information we know about a particular group of
2830 * permissions.
2831 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002832 * @param name The fully qualified name (i.e. com.google.permission_group.APPS)
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002833 * of the permission you are interested in.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002834 * @param flags Additional option flags. Use {@link #GET_META_DATA} to
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002835 * retrieve any meta-data associated with the permission group.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002836 *
2837 * @return Returns a {@link PermissionGroupInfo} containing information
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002838 * about the permission.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002839 * @throws NameNotFoundException if a package with the given name cannot be
2840 * found on the system.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002841 *
2842 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002843 */
2844 public abstract PermissionGroupInfo getPermissionGroupInfo(String name,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002845 @PermissionGroupInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002846
2847 /**
2848 * Retrieve all of the known permission groups in the system.
2849 *
2850 * @param flags Additional option flags. Use {@link #GET_META_DATA} to
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002851 * retrieve any meta-data associated with the permission group.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002852 *
2853 * @return Returns a list of {@link PermissionGroupInfo} containing
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002854 * information about all of the known permission groups.
2855 *
2856 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002857 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002858 public abstract List<PermissionGroupInfo> getAllPermissionGroups(
2859 @PermissionGroupInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002860
2861 /**
2862 * Retrieve all of the information we know about a particular
2863 * package/application.
2864 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002865 * @param packageName The full name (i.e. com.google.apps.contacts) of an
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002866 * application.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002867 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002868 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
2869 * {@link #MATCH_SYSTEM_ONLY}, {@link #MATCH_UNINSTALLED_PACKAGES}
2870 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002871 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002872 * @return An {@link ApplicationInfo} containing information about the
2873 * package. If flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the
2874 * package is not found in the list of installed applications, the
2875 * application information is retrieved from the list of uninstalled
2876 * applications (which includes installed applications as well as
2877 * applications with data directory i.e. applications which had been
kmccormick30498b42013-03-27 17:39:17 -07002878 * deleted with {@code DONT_DELETE_DATA} flag set).
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002879 * @throws NameNotFoundException if a package with the given name cannot be
2880 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002881 *
2882 * @see #GET_META_DATA
2883 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy5a32c6c2016-07-07 14:29:06 -07002884 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002885 * @see #MATCH_SYSTEM_ONLY
2886 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002887 */
2888 public abstract ApplicationInfo getApplicationInfo(String packageName,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002889 @ApplicationInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002890
Jeff Sharkeycd654482016-01-08 17:42:11 -07002891 /** {@hide} */
2892 public abstract ApplicationInfo getApplicationInfoAsUser(String packageName,
2893 @ApplicationInfoFlags int flags, @UserIdInt int userId) throws NameNotFoundException;
2894
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002895 /**
2896 * Retrieve all of the information we know about a particular activity
2897 * class.
2898 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07002899 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002900 * com.google.apps.contacts/com.google.apps.contacts.
2901 * ContactsList) of an Activity class.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002902 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002903 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
2904 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
2905 * {@link #MATCH_DISABLED_COMPONENTS},
2906 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
2907 * {@link #MATCH_DIRECT_BOOT_AWARE},
2908 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
2909 * {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
2910 * returned.
2911 * @return An {@link ActivityInfo} containing information about the
2912 * activity.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002913 * @throws NameNotFoundException if a package with the given name cannot be
2914 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002915 * @see #GET_META_DATA
2916 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002917 * @see #MATCH_ALL
2918 * @see #MATCH_DEBUG_TRIAGED_MISSING
2919 * @see #MATCH_DEFAULT_ONLY
2920 * @see #MATCH_DISABLED_COMPONENTS
2921 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002922 * @see #MATCH_DIRECT_BOOT_AWARE
2923 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002924 * @see #MATCH_SYSTEM_ONLY
2925 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002926 */
Dianne Hackborn361199b2010-08-30 17:42:07 -07002927 public abstract ActivityInfo getActivityInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002928 @ComponentInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002929
2930 /**
2931 * Retrieve all of the information we know about a particular receiver
2932 * class.
2933 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07002934 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002935 * com.google.apps.calendar/com.google.apps.calendar.
2936 * CalendarAlarm) of a Receiver class.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002937 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002938 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
2939 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
2940 * {@link #MATCH_DISABLED_COMPONENTS},
2941 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
2942 * {@link #MATCH_DIRECT_BOOT_AWARE},
2943 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
2944 * {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
2945 * returned.
2946 * @return An {@link ActivityInfo} containing information about the
2947 * receiver.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002948 * @throws NameNotFoundException if a package with the given name cannot be
2949 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002950 * @see #GET_META_DATA
2951 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002952 * @see #MATCH_ALL
2953 * @see #MATCH_DEBUG_TRIAGED_MISSING
2954 * @see #MATCH_DEFAULT_ONLY
2955 * @see #MATCH_DISABLED_COMPONENTS
2956 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002957 * @see #MATCH_DIRECT_BOOT_AWARE
2958 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002959 * @see #MATCH_SYSTEM_ONLY
2960 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002961 */
Dianne Hackborn361199b2010-08-30 17:42:07 -07002962 public abstract ActivityInfo getReceiverInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002963 @ComponentInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002964
2965 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002966 * Retrieve all of the information we know about a particular service class.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002967 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07002968 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002969 * com.google.apps.media/com.google.apps.media.
2970 * BackgroundPlayback) of a Service class.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002971 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002972 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
2973 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
2974 * {@link #MATCH_DISABLED_COMPONENTS},
2975 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
2976 * {@link #MATCH_DIRECT_BOOT_AWARE},
2977 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
2978 * {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
2979 * returned.
2980 * @return A {@link ServiceInfo} object containing information about the
2981 * service.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002982 * @throws NameNotFoundException if a package with the given name cannot be
2983 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002984 * @see #GET_META_DATA
2985 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002986 * @see #MATCH_ALL
2987 * @see #MATCH_DEBUG_TRIAGED_MISSING
2988 * @see #MATCH_DEFAULT_ONLY
2989 * @see #MATCH_DISABLED_COMPONENTS
2990 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002991 * @see #MATCH_DIRECT_BOOT_AWARE
2992 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002993 * @see #MATCH_SYSTEM_ONLY
2994 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002995 */
Dianne Hackborn361199b2010-08-30 17:42:07 -07002996 public abstract ServiceInfo getServiceInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002997 @ComponentInfoFlags int flags) throws NameNotFoundException;
Dianne Hackborn361199b2010-08-30 17:42:07 -07002998
2999 /**
3000 * Retrieve all of the information we know about a particular content
3001 * provider class.
3002 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07003003 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003004 * com.google.providers.media/com.google.providers.media.
3005 * MediaProvider) of a ContentProvider class.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003006 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003007 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
3008 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
3009 * {@link #MATCH_DISABLED_COMPONENTS},
3010 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3011 * {@link #MATCH_DIRECT_BOOT_AWARE},
3012 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3013 * {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3014 * returned.
3015 * @return A {@link ProviderInfo} object containing information about the
3016 * provider.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003017 * @throws NameNotFoundException if a package with the given name cannot be
3018 * found on the system.
Dianne Hackborn361199b2010-08-30 17:42:07 -07003019 * @see #GET_META_DATA
3020 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003021 * @see #MATCH_ALL
3022 * @see #MATCH_DEBUG_TRIAGED_MISSING
3023 * @see #MATCH_DEFAULT_ONLY
3024 * @see #MATCH_DISABLED_COMPONENTS
3025 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003026 * @see #MATCH_DIRECT_BOOT_AWARE
3027 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003028 * @see #MATCH_SYSTEM_ONLY
3029 * @see #MATCH_UNINSTALLED_PACKAGES
Dianne Hackborn361199b2010-08-30 17:42:07 -07003030 */
3031 public abstract ProviderInfo getProviderInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003032 @ComponentInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003033
3034 /**
3035 * Return a List of all packages that are installed
3036 * on the device.
3037 *
3038 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003039 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
3040 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
3041 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
3042 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
3043 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
3044 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
3045 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
3046 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3047 * {@link #MATCH_UNINSTALLED_PACKAGES}
3048 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003049 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003050 * @return A List of PackageInfo objects, one for each installed package,
3051 * containing information about the package. In the unlikely case
3052 * there are no installed packages, an empty list is returned. If
3053 * flag {@code MATCH_UNINSTALLED_PACKAGES} is set, the package
3054 * information is retrieved from the list of uninstalled
3055 * applications (which includes installed applications as well as
3056 * applications with data directory i.e. applications which had been
3057 * deleted with {@code DONT_DELETE_DATA} flag set).
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003058 *
3059 * @see #GET_ACTIVITIES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003060 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003061 * @see #GET_GIDS
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003062 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003063 * @see #GET_INTENT_FILTERS
3064 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003065 * @see #GET_PERMISSIONS
3066 * @see #GET_PROVIDERS
3067 * @see #GET_RECEIVERS
3068 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003069 * @see #GET_SHARED_LIBRARY_FILES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003070 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003071 * @see #GET_URI_PERMISSION_PATTERNS
3072 * @see #MATCH_DISABLED_COMPONENTS
3073 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3074 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003075 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003076 public abstract List<PackageInfo> getInstalledPackages(@PackageInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003077
3078 /**
Dianne Hackborne7991752013-01-16 17:56:46 -08003079 * Return a List of all installed packages that are currently
3080 * holding any of the given permissions.
3081 *
3082 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003083 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
3084 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
3085 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
3086 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
3087 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
3088 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
3089 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
3090 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3091 * {@link #MATCH_UNINSTALLED_PACKAGES}
3092 * to modify the data returned.
Dianne Hackborne7991752013-01-16 17:56:46 -08003093 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003094 * @return A List of PackageInfo objects, one for each installed package
3095 * that holds any of the permissions that were provided, containing
3096 * information about the package. If no installed packages hold any
3097 * of the permissions, an empty list is returned. If flag
3098 * {@code MATCH_UNINSTALLED_PACKAGES} is set, the package information
3099 * is retrieved from the list of uninstalled applications (which
3100 * includes installed applications as well as applications with data
3101 * directory i.e. applications which had been deleted with
3102 * {@code DONT_DELETE_DATA} flag set).
Dianne Hackborne7991752013-01-16 17:56:46 -08003103 *
3104 * @see #GET_ACTIVITIES
Dianne Hackborne7991752013-01-16 17:56:46 -08003105 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003106 * @see #GET_GIDS
Dianne Hackborne7991752013-01-16 17:56:46 -08003107 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003108 * @see #GET_INTENT_FILTERS
3109 * @see #GET_META_DATA
Dianne Hackborne7991752013-01-16 17:56:46 -08003110 * @see #GET_PERMISSIONS
3111 * @see #GET_PROVIDERS
3112 * @see #GET_RECEIVERS
3113 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003114 * @see #GET_SHARED_LIBRARY_FILES
Dianne Hackborne7991752013-01-16 17:56:46 -08003115 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003116 * @see #GET_URI_PERMISSION_PATTERNS
3117 * @see #MATCH_DISABLED_COMPONENTS
3118 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3119 * @see #MATCH_UNINSTALLED_PACKAGES
Dianne Hackborne7991752013-01-16 17:56:46 -08003120 */
3121 public abstract List<PackageInfo> getPackagesHoldingPermissions(
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003122 String[] permissions, @PackageInfoFlags int flags);
Dianne Hackborne7991752013-01-16 17:56:46 -08003123
3124 /**
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003125 * Return a List of all packages that are installed on the device, for a specific user.
3126 * Requesting a list of installed packages for another user
3127 * will require the permission INTERACT_ACROSS_USERS_FULL.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003128 *
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003129 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003130 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
3131 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
3132 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
3133 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
3134 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
3135 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
3136 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
3137 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3138 * {@link #MATCH_UNINSTALLED_PACKAGES}
3139 * to modify the data returned.
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003140 * @param userId The user for whom the installed packages are to be listed
3141 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003142 * @return A List of PackageInfo objects, one for each installed package,
3143 * containing information about the package. In the unlikely case
3144 * there are no installed packages, an empty list is returned. If
3145 * flag {@code MATCH_UNINSTALLED_PACKAGES} is set, the package
3146 * information is retrieved from the list of uninstalled
3147 * applications (which includes installed applications as well as
3148 * applications with data directory i.e. applications which had been
3149 * deleted with {@code DONT_DELETE_DATA} flag set).
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003150 *
3151 * @see #GET_ACTIVITIES
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003152 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003153 * @see #GET_GIDS
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003154 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003155 * @see #GET_INTENT_FILTERS
3156 * @see #GET_META_DATA
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003157 * @see #GET_PERMISSIONS
3158 * @see #GET_PROVIDERS
3159 * @see #GET_RECEIVERS
3160 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003161 * @see #GET_SHARED_LIBRARY_FILES
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003162 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003163 * @see #GET_URI_PERMISSION_PATTERNS
3164 * @see #MATCH_DISABLED_COMPONENTS
3165 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3166 * @see #MATCH_UNINSTALLED_PACKAGES
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003167 *
3168 * @hide
3169 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08003170 @SystemApi
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07003171 public abstract List<PackageInfo> getInstalledPackagesAsUser(@PackageInfoFlags int flags,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003172 @UserIdInt int userId);
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003173
3174 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003175 * Check whether a particular package has been granted a particular
3176 * permission.
3177 *
Svet Ganovad3b2972015-07-07 22:49:17 -07003178 * @param permName The name of the permission you are checking for.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003179 * @param pkgName The name of the package you are checking against.
3180 *
3181 * @return If the package has the permission, PERMISSION_GRANTED is
3182 * returned. If it does not have the permission, PERMISSION_DENIED
3183 * is returned.
3184 *
3185 * @see #PERMISSION_GRANTED
3186 * @see #PERMISSION_DENIED
3187 */
Tor Norbye1c2bf032015-03-02 10:57:08 -08003188 @CheckResult
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003189 public abstract int checkPermission(String permName, String pkgName);
3190
3191 /**
Svet Ganovad3b2972015-07-07 22:49:17 -07003192 * Checks whether a particular permissions has been revoked for a
3193 * package by policy. Typically the device owner or the profile owner
3194 * may apply such a policy. The user cannot grant policy revoked
3195 * permissions, hence the only way for an app to get such a permission
3196 * is by a policy change.
3197 *
3198 * @param permName The name of the permission you are checking for.
3199 * @param pkgName The name of the package you are checking against.
3200 *
3201 * @return Whether the permission is restricted by policy.
3202 */
3203 @CheckResult
Svet Ganovf1b7f202015-07-29 08:33:42 -07003204 public abstract boolean isPermissionRevokedByPolicy(@NonNull String permName,
3205 @NonNull String pkgName);
3206
3207 /**
3208 * Gets the package name of the component controlling runtime permissions.
3209 *
3210 * @return The package name.
3211 *
3212 * @hide
3213 */
3214 public abstract String getPermissionControllerPackageName();
Svet Ganovad3b2972015-07-07 22:49:17 -07003215
3216 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003217 * Add a new dynamic permission to the system. For this to work, your
3218 * package must have defined a permission tree through the
3219 * {@link android.R.styleable#AndroidManifestPermissionTree
3220 * &lt;permission-tree&gt;} tag in its manifest. A package can only add
3221 * permissions to trees that were defined by either its own package or
3222 * another with the same user id; a permission is in a tree if it
3223 * matches the name of the permission tree + ".": for example,
3224 * "com.foo.bar" is a member of the permission tree "com.foo".
3225 *
3226 * <p>It is good to make your permission tree name descriptive, because you
3227 * are taking possession of that entire set of permission names. Thus, it
3228 * must be under a domain you control, with a suffix that will not match
3229 * any normal permissions that may be declared in any applications that
3230 * are part of that domain.
3231 *
3232 * <p>New permissions must be added before
3233 * any .apks are installed that use those permissions. Permissions you
3234 * add through this method are remembered across reboots of the device.
3235 * If the given permission already exists, the info you supply here
3236 * will be used to update it.
3237 *
3238 * @param info Description of the permission to be added.
3239 *
3240 * @return Returns true if a new permission was created, false if an
3241 * existing one was updated.
3242 *
3243 * @throws SecurityException if you are not allowed to add the
3244 * given permission name.
3245 *
3246 * @see #removePermission(String)
3247 */
3248 public abstract boolean addPermission(PermissionInfo info);
3249
3250 /**
Dianne Hackbornd7c09682010-03-30 10:42:20 -07003251 * Like {@link #addPermission(PermissionInfo)} but asynchronously
3252 * persists the package manager state after returning from the call,
3253 * allowing it to return quicker and batch a series of adds at the
3254 * expense of no guarantee the added permission will be retained if
3255 * the device is rebooted before it is written.
3256 */
3257 public abstract boolean addPermissionAsync(PermissionInfo info);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003258
Dianne Hackbornd7c09682010-03-30 10:42:20 -07003259 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003260 * Removes a permission that was previously added with
3261 * {@link #addPermission(PermissionInfo)}. The same ownership rules apply
3262 * -- you are only allowed to remove permissions that you are allowed
3263 * to add.
3264 *
3265 * @param name The name of the permission to remove.
3266 *
3267 * @throws SecurityException if you are not allowed to remove the
3268 * given permission name.
3269 *
3270 * @see #addPermission(PermissionInfo)
3271 */
3272 public abstract void removePermission(String name);
3273
Svet Ganov8c7f7002015-05-07 10:48:44 -07003274
3275 /**
3276 * Permission flags set when granting or revoking a permission.
3277 *
3278 * @hide
3279 */
3280 @SystemApi
3281 @IntDef({FLAG_PERMISSION_USER_SET,
3282 FLAG_PERMISSION_USER_FIXED,
3283 FLAG_PERMISSION_POLICY_FIXED,
Svet Ganovb3f22b42015-05-12 11:01:24 -07003284 FLAG_PERMISSION_REVOKE_ON_UPGRADE,
Svet Ganov77ab6a82015-07-03 12:03:02 -07003285 FLAG_PERMISSION_SYSTEM_FIXED,
3286 FLAG_PERMISSION_GRANTED_BY_DEFAULT})
Svet Ganov8c7f7002015-05-07 10:48:44 -07003287 @Retention(RetentionPolicy.SOURCE)
3288 public @interface PermissionFlags {}
3289
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003290 /**
Svetoslavc6d1c342015-02-26 14:44:43 -08003291 * Grant a runtime permission to an application which the application does not
3292 * already have. The permission must have been requested by the application.
3293 * If the application is not allowed to hold the permission, a {@link
Ruben Brunk12ab5e12016-11-10 15:27:30 -08003294 * java.lang.SecurityException} is thrown. If the package or permission is
3295 * invalid, a {@link java.lang.IllegalArgumentException} is thrown.
Svetoslavc6d1c342015-02-26 14:44:43 -08003296 * <p>
3297 * <strong>Note: </strong>Using this API requires holding
3298 * android.permission.GRANT_REVOKE_PERMISSIONS and if the user id is
3299 * not the current user android.permission.INTERACT_ACROSS_USERS_FULL.
3300 * </p>
Nick Kralevich035f80d2013-03-27 15:20:08 -07003301 *
Svetoslavc6d1c342015-02-26 14:44:43 -08003302 * @param packageName The package to which to grant the permission.
3303 * @param permissionName The permission name to grant.
3304 * @param user The user for which to grant the permission.
3305 *
Svet Ganov8c7f7002015-05-07 10:48:44 -07003306 * @see #revokeRuntimePermission(String, String, android.os.UserHandle)
3307 * @see android.content.pm.PackageManager.PermissionFlags
Svetoslavc6d1c342015-02-26 14:44:43 -08003308 *
3309 * @hide
Nick Kralevich035f80d2013-03-27 15:20:08 -07003310 */
Svetoslavc6d1c342015-02-26 14:44:43 -08003311 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07003312 public abstract void grantRuntimePermission(@NonNull String packageName,
Svetoslavc6d1c342015-02-26 14:44:43 -08003313 @NonNull String permissionName, @NonNull UserHandle user);
Nick Kralevich035f80d2013-03-27 15:20:08 -07003314
Svetoslavc6d1c342015-02-26 14:44:43 -08003315 /**
3316 * Revoke a runtime permission that was previously granted by {@link
Svet Ganov8c7f7002015-05-07 10:48:44 -07003317 * #grantRuntimePermission(String, String, android.os.UserHandle)}. The
3318 * permission must have been requested by and granted to the application.
3319 * If the application is not allowed to hold the permission, a {@link
Ruben Brunk12ab5e12016-11-10 15:27:30 -08003320 * java.lang.SecurityException} is thrown. If the package or permission is
3321 * invalid, a {@link java.lang.IllegalArgumentException} is thrown.
Svetoslavc6d1c342015-02-26 14:44:43 -08003322 * <p>
3323 * <strong>Note: </strong>Using this API requires holding
3324 * android.permission.GRANT_REVOKE_PERMISSIONS and if the user id is
3325 * not the current user android.permission.INTERACT_ACROSS_USERS_FULL.
3326 * </p>
3327 *
3328 * @param packageName The package from which to revoke the permission.
3329 * @param permissionName The permission name to revoke.
3330 * @param user The user for which to revoke the permission.
3331 *
Svet Ganov8c7f7002015-05-07 10:48:44 -07003332 * @see #grantRuntimePermission(String, String, android.os.UserHandle)
3333 * @see android.content.pm.PackageManager.PermissionFlags
Svetoslavc6d1c342015-02-26 14:44:43 -08003334 *
3335 * @hide
3336 */
3337 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07003338 public abstract void revokeRuntimePermission(@NonNull String packageName,
Svetoslavc6d1c342015-02-26 14:44:43 -08003339 @NonNull String permissionName, @NonNull UserHandle user);
3340
3341 /**
Svet Ganov8c7f7002015-05-07 10:48:44 -07003342 * Gets the state flags associated with a permission.
3343 *
3344 * @param permissionName The permission for which to get the flags.
3345 * @param packageName The package name for which to get the flags.
3346 * @param user The user for which to get permission flags.
3347 * @return The permission flags.
3348 *
3349 * @hide
3350 */
3351 @SystemApi
3352 public abstract @PermissionFlags int getPermissionFlags(String permissionName,
3353 String packageName, @NonNull UserHandle user);
3354
3355 /**
3356 * Updates the flags associated with a permission by replacing the flags in
3357 * the specified mask with the provided flag values.
3358 *
3359 * @param permissionName The permission for which to update the flags.
3360 * @param packageName The package name for which to update the flags.
3361 * @param flagMask The flags which to replace.
3362 * @param flagValues The flags with which to replace.
3363 * @param user The user for which to update the permission flags.
3364 *
3365 * @hide
3366 */
3367 @SystemApi
3368 public abstract void updatePermissionFlags(String permissionName,
3369 String packageName, @PermissionFlags int flagMask, int flagValues,
3370 @NonNull UserHandle user);
3371
3372 /**
Svetoslav20770dd2015-05-29 15:43:04 -07003373 * Gets whether you should show UI with rationale for requesting a permission.
3374 * You should do this only if you do not have the permission and the context in
3375 * which the permission is requested does not clearly communicate to the user
3376 * what would be the benefit from grating this permission.
3377 *
3378 * @param permission A permission your app wants to request.
3379 * @return Whether you can show permission rationale UI.
3380 *
3381 * @hide
3382 */
3383 public abstract boolean shouldShowRequestPermissionRationale(String permission);
3384
3385 /**
Svetoslavc6d1c342015-02-26 14:44:43 -08003386 * Returns an {@link android.content.Intent} suitable for passing to
3387 * {@link android.app.Activity#startActivityForResult(android.content.Intent, int)}
3388 * which prompts the user to grant permissions to this application.
3389 *
3390 * @throws NullPointerException if {@code permissions} is {@code null} or empty.
3391 *
3392 * @hide
3393 */
3394 public Intent buildRequestPermissionsIntent(@NonNull String[] permissions) {
3395 if (ArrayUtils.isEmpty(permissions)) {
Svet Ganovf66381c2016-02-18 20:02:36 -08003396 throw new IllegalArgumentException("permission cannot be null or empty");
Svetoslavc6d1c342015-02-26 14:44:43 -08003397 }
3398 Intent intent = new Intent(ACTION_REQUEST_PERMISSIONS);
3399 intent.putExtra(EXTRA_REQUEST_PERMISSIONS_NAMES, permissions);
Svet Ganovf1b7f202015-07-29 08:33:42 -07003400 intent.setPackage(getPermissionControllerPackageName());
Svetoslavc6d1c342015-02-26 14:44:43 -08003401 return intent;
Nick Kralevich035f80d2013-03-27 15:20:08 -07003402 }
3403
3404 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003405 * Compare the signatures of two packages to determine if the same
3406 * signature appears in both of them. If they do contain the same
3407 * signature, then they are allowed special privileges when working
3408 * with each other: they can share the same user-id, run instrumentation
3409 * against each other, etc.
3410 *
3411 * @param pkg1 First package name whose signature will be compared.
3412 * @param pkg2 Second package name whose signature will be compared.
Chris Palmer09f33602010-09-13 14:27:18 -07003413 *
3414 * @return Returns an integer indicating whether all signatures on the
3415 * two packages match. The value is >= 0 ({@link #SIGNATURE_MATCH}) if
3416 * all signatures match or < 0 if there is not a match ({@link
3417 * #SIGNATURE_NO_MATCH} or {@link #SIGNATURE_UNKNOWN_PACKAGE}).
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003418 *
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003419 * @see #checkSignatures(int, int)
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003420 * @see #SIGNATURE_MATCH
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003421 * @see #SIGNATURE_NO_MATCH
3422 * @see #SIGNATURE_UNKNOWN_PACKAGE
3423 */
Tor Norbye1c2bf032015-03-02 10:57:08 -08003424 @CheckResult
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003425 public abstract int checkSignatures(String pkg1, String pkg2);
3426
3427 /**
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003428 * Like {@link #checkSignatures(String, String)}, but takes UIDs of
3429 * the two packages to be checked. This can be useful, for example,
3430 * when doing the check in an IPC, where the UID is the only identity
3431 * available. It is functionally identical to determining the package
3432 * associated with the UIDs and checking their signatures.
3433 *
Joe Onorato25660ec2009-08-12 22:40:37 -07003434 * @param uid1 First UID whose signature will be compared.
3435 * @param uid2 Second UID whose signature will be compared.
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003436 *
Chris Palmer09f33602010-09-13 14:27:18 -07003437 * @return Returns an integer indicating whether all signatures on the
3438 * two packages match. The value is >= 0 ({@link #SIGNATURE_MATCH}) if
3439 * all signatures match or < 0 if there is not a match ({@link
3440 * #SIGNATURE_NO_MATCH} or {@link #SIGNATURE_UNKNOWN_PACKAGE}).
3441 *
3442 * @see #checkSignatures(String, String)
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003443 * @see #SIGNATURE_MATCH
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003444 * @see #SIGNATURE_NO_MATCH
3445 * @see #SIGNATURE_UNKNOWN_PACKAGE
3446 */
Tor Norbye1c2bf032015-03-02 10:57:08 -08003447 @CheckResult
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003448 public abstract int checkSignatures(int uid1, int uid2);
3449
3450 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003451 * Retrieve the names of all packages that are associated with a particular
3452 * user id. In most cases, this will be a single package name, the package
3453 * that has been assigned that user id. Where there are multiple packages
3454 * sharing the same user id through the "sharedUserId" mechanism, all
3455 * packages with that id will be returned.
3456 *
3457 * @param uid The user id for which you would like to retrieve the
3458 * associated packages.
3459 *
3460 * @return Returns an array of one or more packages assigned to the user
3461 * id, or null if there are no known packages with the given id.
3462 */
Jeff Sharkey377ded0f2016-01-10 13:15:41 -07003463 public abstract @Nullable String[] getPackagesForUid(int uid);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003464
3465 /**
3466 * Retrieve the official name associated with a user id. This name is
Jonathan Basseri7ea3a332015-05-12 19:39:22 -07003467 * guaranteed to never change, though it is possible for the underlying
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003468 * user id to be changed. That is, if you are storing information about
3469 * user ids in persistent storage, you should use the string returned
3470 * by this function instead of the raw user-id.
3471 *
3472 * @param uid The user id for which you would like to retrieve a name.
3473 * @return Returns a unique name for the given user id, or null if the
3474 * user id is not currently assigned.
3475 */
Jeff Sharkey377ded0f2016-01-10 13:15:41 -07003476 public abstract @Nullable String getNameForUid(int uid);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003477
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003478 /**
3479 * Return the user id associated with a shared user name. Multiple
3480 * applications can specify a shared user name in their manifest and thus
3481 * end up using a common uid. This might be used for new applications
3482 * that use an existing shared user name and need to know the uid of the
3483 * shared user.
3484 *
3485 * @param sharedUserName The shared user name whose uid is to be retrieved.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003486 * @return Returns the UID associated with the shared user.
3487 * @throws NameNotFoundException if a package with the given name cannot be
3488 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003489 * @hide
3490 */
3491 public abstract int getUidForSharedUser(String sharedUserName)
3492 throws NameNotFoundException;
3493
3494 /**
3495 * Return a List of all application packages that are installed on the
3496 * device. If flag GET_UNINSTALLED_PACKAGES has been set, a list of all
kmccormick30498b42013-03-27 17:39:17 -07003497 * applications including those deleted with {@code DONT_DELETE_DATA} (partially
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003498 * installed apps with data directory) will be returned.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003499 *
3500 * @param flags Additional option flags. Use any combination of
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003501 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003502 * {@link #MATCH_SYSTEM_ONLY}, {@link #MATCH_UNINSTALLED_PACKAGES}
3503 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003504 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003505 * @return A List of ApplicationInfo objects, one for each installed application.
3506 * In the unlikely case there are no installed packages, an empty list
3507 * is returned. If flag {@code MATCH_UNINSTALLED_PACKAGES} is set, the
3508 * application information is retrieved from the list of uninstalled
3509 * applications (which includes installed applications as well as
3510 * applications with data directory i.e. applications which had been
3511 * deleted with {@code DONT_DELETE_DATA} flag set).
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003512 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003513 * @see #GET_META_DATA
3514 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy5a32c6c2016-07-07 14:29:06 -07003515 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003516 * @see #MATCH_SYSTEM_ONLY
3517 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003518 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003519 public abstract List<ApplicationInfo> getInstalledApplications(@ApplicationInfoFlags int flags);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003520
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003521 /**
Svet Ganov2acf0632015-11-24 19:10:59 -08003522 * Gets the ephemeral applications the user recently used. Requires
3523 * holding "android.permission.ACCESS_EPHEMERAL_APPS".
3524 *
3525 * @return The ephemeral app list.
3526 *
3527 * @hide
3528 */
3529 @RequiresPermission(Manifest.permission.ACCESS_EPHEMERAL_APPS)
3530 public abstract List<EphemeralApplicationInfo> getEphemeralApplications();
3531
3532 /**
3533 * Gets the icon for an ephemeral application.
3534 *
3535 * @param packageName The app package name.
3536 *
3537 * @hide
3538 */
3539 public abstract Drawable getEphemeralApplicationIcon(String packageName);
3540
3541 /**
3542 * Gets whether the caller is an ephemeral app.
3543 *
3544 * @return Whether caller is an ephemeral app.
3545 *
3546 * @see #setEphemeralCookie(byte[])
3547 * @see #getEphemeralCookie()
3548 * @see #getEphemeralCookieMaxSizeBytes()
Todd Kennedy12705132016-01-05 15:17:57 -08003549 *
3550 * @hide
Svet Ganov2acf0632015-11-24 19:10:59 -08003551 */
3552 public abstract boolean isEphemeralApplication();
3553
3554 /**
3555 * Gets the maximum size in bytes of the cookie data an ephemeral app
3556 * can store on the device.
3557 *
3558 * @return The max cookie size in bytes.
3559 *
3560 * @see #isEphemeralApplication()
3561 * @see #setEphemeralCookie(byte[])
3562 * @see #getEphemeralCookie()
Todd Kennedy12705132016-01-05 15:17:57 -08003563 *
3564 * @hide
Svet Ganov2acf0632015-11-24 19:10:59 -08003565 */
3566 public abstract int getEphemeralCookieMaxSizeBytes();
3567
3568 /**
3569 * Gets the ephemeral application cookie for this app. Non
3570 * ephemeral apps and apps that were ephemeral but were upgraded
3571 * to non-ephemeral can still access this API. For ephemeral apps
3572 * this cooke is cached for some time after uninstall while for
3573 * normal apps the cookie is deleted after the app is uninstalled.
3574 * The cookie is always present while the app is installed.
3575 *
3576 * @return The cookie.
3577 *
3578 * @see #isEphemeralApplication()
3579 * @see #setEphemeralCookie(byte[])
3580 * @see #getEphemeralCookieMaxSizeBytes()
Todd Kennedy12705132016-01-05 15:17:57 -08003581 *
3582 * @hide
Svet Ganov2acf0632015-11-24 19:10:59 -08003583 */
3584 public abstract @NonNull byte[] getEphemeralCookie();
3585
3586 /**
3587 * Sets the ephemeral application cookie for the calling app. Non
3588 * ephemeral apps and apps that were ephemeral but were upgraded
3589 * to non-ephemeral can still access this API. For ephemeral apps
3590 * this cooke is cached for some time after uninstall while for
3591 * normal apps the cookie is deleted after the app is uninstalled.
3592 * The cookie is always present while the app is installed. The
3593 * cookie size is limited by {@link #getEphemeralCookieMaxSizeBytes()}.
3594 *
3595 * @param cookie The cookie data.
3596 * @return True if the cookie was set.
3597 *
3598 * @see #isEphemeralApplication()
3599 * @see #getEphemeralCookieMaxSizeBytes()
Jeff Sharkey5aa86932016-01-08 19:07:49 -07003600 * @see #getEphemeralCookie()
Todd Kennedy12705132016-01-05 15:17:57 -08003601 *
3602 * @hide
Svet Ganov2acf0632015-11-24 19:10:59 -08003603 */
3604 public abstract boolean setEphemeralCookie(@NonNull byte[] cookie);
3605
3606 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003607 * Get a list of shared libraries that are available on the
3608 * system.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003609 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003610 * @return An array of shared library names that are
3611 * available on the system, or null if none are installed.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003612 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003613 */
3614 public abstract String[] getSystemSharedLibraryNames();
3615
3616 /**
Svet Ganovd7b1f4112016-02-09 18:49:23 -08003617 * Get the name of the package hosting the services shared library.
3618 *
3619 * @return The library host package.
3620 *
3621 * @hide
3622 */
Svetoslav Ganova9c25002016-04-13 19:25:56 -07003623 public abstract @NonNull String getServicesSystemSharedLibraryPackageName();
3624
3625 /**
3626 * Get the name of the package hosting the shared components shared library.
3627 *
3628 * @return The library host package.
3629 *
3630 * @hide
3631 */
3632 public abstract @NonNull String getSharedSystemSharedLibraryPackageName();
Svet Ganovd7b1f4112016-02-09 18:49:23 -08003633
3634 /**
Dianne Hackborn49237342009-08-27 20:08:01 -07003635 * Get a list of features that are available on the
3636 * system.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003637 *
Dianne Hackborn49237342009-08-27 20:08:01 -07003638 * @return An array of FeatureInfo classes describing the features
3639 * that are available on the system, or null if there are none(!!).
Dianne Hackborn49237342009-08-27 20:08:01 -07003640 */
3641 public abstract FeatureInfo[] getSystemAvailableFeatures();
3642
3643 /**
Jeff Sharkey115d2c12016-02-15 17:25:57 -07003644 * Check whether the given feature name is one of the available features as
3645 * returned by {@link #getSystemAvailableFeatures()}. This tests for the
3646 * presence of <em>any</em> version of the given feature name; use
3647 * {@link #hasSystemFeature(String, int)} to check for a minimum version.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003648 *
Jeff Sharkey115d2c12016-02-15 17:25:57 -07003649 * @return Returns true if the devices supports the feature, else false.
Dianne Hackborn039c68e2009-09-26 16:39:23 -07003650 */
3651 public abstract boolean hasSystemFeature(String name);
3652
3653 /**
Jeff Sharkey115d2c12016-02-15 17:25:57 -07003654 * Check whether the given feature name and version is one of the available
3655 * features as returned by {@link #getSystemAvailableFeatures()}. Since
3656 * features are defined to always be backwards compatible, this returns true
3657 * if the available feature version is greater than or equal to the
3658 * requested version.
3659 *
3660 * @return Returns true if the devices supports the feature, else false.
3661 */
3662 public abstract boolean hasSystemFeature(String name, int version);
3663
3664 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003665 * Determine the best action to perform for a given Intent. This is how
3666 * {@link Intent#resolveActivity} finds an activity if a class has not been
3667 * explicitly specified.
3668 * <p>
3669 * <em>Note:</em> if using an implicit Intent (without an explicit
3670 * ComponentName specified), be sure to consider whether to set the
3671 * {@link #MATCH_DEFAULT_ONLY} only flag. You need to do so to resolve the
3672 * activity in the same way that
3673 * {@link android.content.Context#startActivity(Intent)} and
Dianne Hackborn4d023d212010-10-01 13:41:04 -07003674 * {@link android.content.Intent#resolveActivity(PackageManager)
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003675 * Intent.resolveActivity(PackageManager)} do.
3676 * </p>
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003677 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003678 * @param intent An intent containing all of the desired specification
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003679 * (action, data, type, category, and/or component).
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003680 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003681 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3682 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3683 * {@link #MATCH_DISABLED_COMPONENTS},
3684 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3685 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3686 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3687 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3688 * returned. The most important is {@link #MATCH_DEFAULT_ONLY},
3689 * to limit the resolution to only those activities that support
3690 * the {@link android.content.Intent#CATEGORY_DEFAULT}.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003691 * @return Returns a ResolveInfo object containing the final activity intent
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003692 * that was determined to be the best action. Returns null if no
Mike LeBeaubd3f5272010-02-18 19:27:17 -08003693 * matching activity was found. If multiple matching activities are
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003694 * found and there is no default set, returns a ResolveInfo object
Mike LeBeaubd3f5272010-02-18 19:27:17 -08003695 * containing something else, such as the activity resolver.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003696 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003697 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003698 * @see #GET_SHARED_LIBRARY_FILES
3699 * @see #MATCH_ALL
3700 * @see #MATCH_DISABLED_COMPONENTS
3701 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3702 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003703 * @see #MATCH_DIRECT_BOOT_AWARE
3704 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003705 * @see #MATCH_SYSTEM_ONLY
3706 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003707 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003708 public abstract ResolveInfo resolveActivity(Intent intent, @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003709
3710 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003711 * Determine the best action to perform for a given Intent for a given user.
3712 * This is how {@link Intent#resolveActivity} finds an activity if a class
3713 * has not been explicitly specified.
3714 * <p>
3715 * <em>Note:</em> if using an implicit Intent (without an explicit
3716 * ComponentName specified), be sure to consider whether to set the
3717 * {@link #MATCH_DEFAULT_ONLY} only flag. You need to do so to resolve the
3718 * activity in the same way that
3719 * {@link android.content.Context#startActivity(Intent)} and
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003720 * {@link android.content.Intent#resolveActivity(PackageManager)
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003721 * Intent.resolveActivity(PackageManager)} do.
3722 * </p>
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003723 *
3724 * @param intent An intent containing all of the desired specification
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003725 * (action, data, type, category, and/or component).
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003726 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003727 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3728 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3729 * {@link #MATCH_DISABLED_COMPONENTS},
3730 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3731 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3732 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3733 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3734 * returned. The most important is {@link #MATCH_DEFAULT_ONLY},
3735 * to limit the resolution to only those activities that support
3736 * the {@link android.content.Intent#CATEGORY_DEFAULT}.
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003737 * @param userId The user id.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003738 * @return Returns a ResolveInfo object containing the final activity intent
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003739 * that was determined to be the best action. Returns null if no
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003740 * matching activity was found. If multiple matching activities are
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003741 * found and there is no default set, returns a ResolveInfo object
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003742 * containing something else, such as the activity resolver.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003743 * @see #GET_META_DATA
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003744 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003745 * @see #GET_SHARED_LIBRARY_FILES
3746 * @see #MATCH_ALL
3747 * @see #MATCH_DISABLED_COMPONENTS
3748 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3749 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003750 * @see #MATCH_DIRECT_BOOT_AWARE
3751 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003752 * @see #MATCH_SYSTEM_ONLY
3753 * @see #MATCH_UNINSTALLED_PACKAGES
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003754 * @hide
3755 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003756 public abstract ResolveInfo resolveActivityAsUser(Intent intent, @ResolveInfoFlags int flags,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003757 @UserIdInt int userId);
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003758
3759 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003760 * Retrieve all activities that can be performed for the given intent.
3761 *
3762 * @param intent The desired intent as per resolveActivity().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003763 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003764 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3765 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3766 * {@link #MATCH_DISABLED_COMPONENTS},
3767 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3768 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3769 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3770 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3771 * returned. The most important is {@link #MATCH_DEFAULT_ONLY},
3772 * to limit the resolution to only those activities that support
3773 * the {@link android.content.Intent#CATEGORY_DEFAULT}. Or, set
3774 * {@link #MATCH_ALL} to prevent any filtering of the results.
3775 * @return Returns a List of ResolveInfo objects containing one entry for
3776 * each matching activity, ordered from best to worst. In other
3777 * words, the first item is what would be returned by
3778 * {@link #resolveActivity}. If there are no matching activities, an
3779 * empty list is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003780 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003781 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003782 * @see #GET_SHARED_LIBRARY_FILES
3783 * @see #MATCH_ALL
3784 * @see #MATCH_DISABLED_COMPONENTS
3785 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3786 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003787 * @see #MATCH_DIRECT_BOOT_AWARE
3788 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003789 * @see #MATCH_SYSTEM_ONLY
3790 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003791 */
3792 public abstract List<ResolveInfo> queryIntentActivities(Intent intent,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003793 @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003794
3795 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003796 * Retrieve all activities that can be performed for the given intent, for a
3797 * specific user.
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003798 *
3799 * @param intent The desired intent as per resolveActivity().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003800 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003801 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3802 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3803 * {@link #MATCH_DISABLED_COMPONENTS},
3804 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3805 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3806 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3807 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3808 * returned. The most important is {@link #MATCH_DEFAULT_ONLY},
3809 * to limit the resolution to only those activities that support
3810 * the {@link android.content.Intent#CATEGORY_DEFAULT}. Or, set
3811 * {@link #MATCH_ALL} to prevent any filtering of the results.
3812 * @return Returns a List of ResolveInfo objects containing one entry for
3813 * each matching activity, ordered from best to worst. In other
3814 * words, the first item is what would be returned by
3815 * {@link #resolveActivity}. If there are no matching activities, an
3816 * empty list is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003817 * @see #GET_META_DATA
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003818 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003819 * @see #GET_SHARED_LIBRARY_FILES
3820 * @see #MATCH_ALL
3821 * @see #MATCH_DISABLED_COMPONENTS
3822 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3823 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003824 * @see #MATCH_DIRECT_BOOT_AWARE
3825 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003826 * @see #MATCH_SYSTEM_ONLY
3827 * @see #MATCH_UNINSTALLED_PACKAGES
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003828 * @hide
3829 */
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003830 public abstract List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003831 @ResolveInfoFlags int flags, @UserIdInt int userId);
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003832
3833 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003834 * Retrieve a set of activities that should be presented to the user as
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003835 * similar options. This is like {@link #queryIntentActivities}, except it
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003836 * also allows you to supply a list of more explicit Intents that you would
3837 * like to resolve to particular options, and takes care of returning the
3838 * final ResolveInfo list in a reasonable order, with no duplicates, based
3839 * on those inputs.
3840 *
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003841 * @param caller The class name of the activity that is making the request.
3842 * This activity will never appear in the output list. Can be
3843 * null.
3844 * @param specifics An array of Intents that should be resolved to the first
3845 * specific results. Can be null.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003846 * @param intent The desired intent as per resolveActivity().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003847 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003848 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3849 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3850 * {@link #MATCH_DISABLED_COMPONENTS},
3851 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3852 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3853 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3854 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3855 * returned. The most important is {@link #MATCH_DEFAULT_ONLY},
3856 * to limit the resolution to only those activities that support
3857 * the {@link android.content.Intent#CATEGORY_DEFAULT}.
3858 * @return Returns a List of ResolveInfo objects containing one entry for
3859 * each matching activity. The list is ordered first by all of the
3860 * intents resolved in <var>specifics</var> and then any additional
3861 * activities that can handle <var>intent</var> but did not get
3862 * included by one of the <var>specifics</var> intents. If there are
3863 * no matching activities, an empty list is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003864 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003865 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003866 * @see #GET_SHARED_LIBRARY_FILES
3867 * @see #MATCH_ALL
3868 * @see #MATCH_DISABLED_COMPONENTS
3869 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3870 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003871 * @see #MATCH_DIRECT_BOOT_AWARE
3872 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003873 * @see #MATCH_SYSTEM_ONLY
3874 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003875 */
3876 public abstract List<ResolveInfo> queryIntentActivityOptions(
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003877 ComponentName caller, Intent[] specifics, Intent intent, @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003878
3879 /**
3880 * Retrieve all receivers that can handle a broadcast of the given intent.
3881 *
3882 * @param intent The desired intent as per resolveActivity().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003883 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003884 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3885 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3886 * {@link #MATCH_DISABLED_COMPONENTS},
3887 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3888 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3889 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3890 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3891 * returned.
3892 * @return Returns a List of ResolveInfo objects containing one entry for
3893 * each matching receiver, ordered from best to worst. If there are
3894 * no matching receivers, an empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003895 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003896 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003897 * @see #GET_SHARED_LIBRARY_FILES
3898 * @see #MATCH_ALL
3899 * @see #MATCH_DISABLED_COMPONENTS
3900 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3901 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003902 * @see #MATCH_DIRECT_BOOT_AWARE
3903 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003904 * @see #MATCH_SYSTEM_ONLY
3905 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003906 */
3907 public abstract List<ResolveInfo> queryBroadcastReceivers(Intent intent,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003908 @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003909
3910 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003911 * Retrieve all receivers that can handle a broadcast of the given intent,
3912 * for a specific user.
Amith Yamasanif203aee2012-08-29 18:41:53 -07003913 *
3914 * @param intent The desired intent as per resolveActivity().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003915 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003916 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3917 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3918 * {@link #MATCH_DISABLED_COMPONENTS},
3919 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3920 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3921 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3922 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3923 * returned.
Fyodor Kupolov940e8572016-01-26 12:03:51 -08003924 * @param userHandle UserHandle of the user being queried.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003925 * @return Returns a List of ResolveInfo objects containing one entry for
3926 * each matching receiver, ordered from best to worst. If there are
3927 * no matching receivers, an empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003928 * @see #GET_META_DATA
Amith Yamasanif203aee2012-08-29 18:41:53 -07003929 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003930 * @see #GET_SHARED_LIBRARY_FILES
3931 * @see #MATCH_ALL
3932 * @see #MATCH_DISABLED_COMPONENTS
3933 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3934 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003935 * @see #MATCH_DIRECT_BOOT_AWARE
3936 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003937 * @see #MATCH_SYSTEM_ONLY
3938 * @see #MATCH_UNINSTALLED_PACKAGES
Amith Yamasanif203aee2012-08-29 18:41:53 -07003939 * @hide
3940 */
Fyodor Kupolov940e8572016-01-26 12:03:51 -08003941 @SystemApi
3942 public List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent,
3943 @ResolveInfoFlags int flags, UserHandle userHandle) {
3944 return queryBroadcastReceiversAsUser(intent, flags, userHandle.getIdentifier());
3945 }
3946
3947 /**
3948 * @hide
3949 */
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07003950 public abstract List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003951 @ResolveInfoFlags int flags, @UserIdInt int userId);
Amith Yamasanif203aee2012-08-29 18:41:53 -07003952
Fyodor Kupolov940e8572016-01-26 12:03:51 -08003953
Jeff Sharkeybd940222016-01-08 11:07:13 -07003954 /** {@hide} */
3955 @Deprecated
3956 public List<ResolveInfo> queryBroadcastReceivers(Intent intent,
3957 @ResolveInfoFlags int flags, @UserIdInt int userId) {
3958 Log.w(TAG, "STAHP USING HIDDEN APIS KTHX");
3959 return queryBroadcastReceiversAsUser(intent, flags, userId);
3960 }
3961
Amith Yamasanif203aee2012-08-29 18:41:53 -07003962 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003963 * Determine the best service to handle for a given Intent.
3964 *
3965 * @param intent An intent containing all of the desired specification
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003966 * (action, data, type, category, and/or component).
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003967 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003968 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3969 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3970 * {@link #MATCH_DISABLED_COMPONENTS},
3971 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3972 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3973 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3974 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3975 * returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003976 * @return Returns a ResolveInfo object containing the final service intent
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003977 * that was determined to be the best action. Returns null if no
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003978 * matching service was found.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003979 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003980 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003981 * @see #GET_SHARED_LIBRARY_FILES
3982 * @see #MATCH_ALL
3983 * @see #MATCH_DISABLED_COMPONENTS
3984 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3985 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003986 * @see #MATCH_DIRECT_BOOT_AWARE
3987 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003988 * @see #MATCH_SYSTEM_ONLY
3989 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003990 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003991 public abstract ResolveInfo resolveService(Intent intent, @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003992
3993 /**
3994 * Retrieve all services that can match the given intent.
3995 *
3996 * @param intent The desired intent as per resolveService().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003997 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003998 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3999 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
4000 * {@link #MATCH_DISABLED_COMPONENTS},
4001 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4002 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
4003 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4004 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4005 * returned.
4006 * @return Returns a List of ResolveInfo objects containing one entry for
4007 * each matching service, ordered from best to worst. In other
4008 * words, the first item is what would be returned by
4009 * {@link #resolveService}. If there are no matching services, an
4010 * empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004011 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004012 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004013 * @see #GET_SHARED_LIBRARY_FILES
4014 * @see #MATCH_ALL
4015 * @see #MATCH_DISABLED_COMPONENTS
4016 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
4017 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004018 * @see #MATCH_DIRECT_BOOT_AWARE
4019 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004020 * @see #MATCH_SYSTEM_ONLY
4021 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004022 */
4023 public abstract List<ResolveInfo> queryIntentServices(Intent intent,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004024 @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004025
4026 /**
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004027 * Retrieve all services that can match the given intent for a given user.
4028 *
4029 * @param intent The desired intent as per resolveService().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004030 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004031 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
4032 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
4033 * {@link #MATCH_DISABLED_COMPONENTS},
4034 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4035 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
4036 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4037 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4038 * returned.
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004039 * @param userId The user id.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004040 * @return Returns a List of ResolveInfo objects containing one entry for
4041 * each matching service, ordered from best to worst. In other
4042 * words, the first item is what would be returned by
4043 * {@link #resolveService}. If there are no matching services, an
4044 * empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004045 * @see #GET_META_DATA
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004046 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004047 * @see #GET_SHARED_LIBRARY_FILES
4048 * @see #MATCH_ALL
4049 * @see #MATCH_DISABLED_COMPONENTS
4050 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
4051 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004052 * @see #MATCH_DIRECT_BOOT_AWARE
4053 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004054 * @see #MATCH_SYSTEM_ONLY
4055 * @see #MATCH_UNINSTALLED_PACKAGES
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004056 * @hide
4057 */
4058 public abstract List<ResolveInfo> queryIntentServicesAsUser(Intent intent,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004059 @ResolveInfoFlags int flags, @UserIdInt int userId);
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004060
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004061 /**
4062 * Retrieve all providers that can match the given intent.
4063 *
4064 * @param intent An intent containing all of the desired specification
4065 * (action, data, type, category, and/or component).
4066 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004067 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
4068 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
4069 * {@link #MATCH_DISABLED_COMPONENTS},
4070 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4071 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
4072 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4073 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4074 * returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004075 * @param userId The user id.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004076 * @return Returns a List of ResolveInfo objects containing one entry for
4077 * each matching provider, ordered from best to worst. If there are
4078 * no matching services, an empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004079 * @see #GET_META_DATA
4080 * @see #GET_RESOLVED_FILTER
4081 * @see #GET_SHARED_LIBRARY_FILES
4082 * @see #MATCH_ALL
4083 * @see #MATCH_DISABLED_COMPONENTS
4084 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
4085 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004086 * @see #MATCH_DIRECT_BOOT_AWARE
4087 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004088 * @see #MATCH_SYSTEM_ONLY
4089 * @see #MATCH_UNINSTALLED_PACKAGES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004090 * @hide
4091 */
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004092 public abstract List<ResolveInfo> queryIntentContentProvidersAsUser(
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004093 Intent intent, @ResolveInfoFlags int flags, @UserIdInt int userId);
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004094
4095 /**
4096 * Retrieve all providers that can match the given intent.
4097 *
4098 * @param intent An intent containing all of the desired specification
4099 * (action, data, type, category, and/or component).
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004100 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004101 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
4102 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
4103 * {@link #MATCH_DISABLED_COMPONENTS},
4104 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4105 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
4106 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4107 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4108 * returned.
4109 * @return Returns a List of ResolveInfo objects containing one entry for
4110 * each matching provider, ordered from best to worst. If there are
4111 * no matching services, an empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004112 * @see #GET_META_DATA
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004113 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004114 * @see #GET_SHARED_LIBRARY_FILES
4115 * @see #MATCH_ALL
4116 * @see #MATCH_DISABLED_COMPONENTS
4117 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
4118 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004119 * @see #MATCH_DIRECT_BOOT_AWARE
4120 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004121 * @see #MATCH_SYSTEM_ONLY
4122 * @see #MATCH_UNINSTALLED_PACKAGES
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004123 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004124 public abstract List<ResolveInfo> queryIntentContentProviders(Intent intent,
4125 @ResolveInfoFlags int flags);
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004126
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004127 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004128 * Find a single content provider by its base path name.
4129 *
4130 * @param name The name of the provider to find.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004131 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004132 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
4133 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
4134 * {@link #MATCH_DISABLED_COMPONENTS},
4135 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4136 * {@link #MATCH_DIRECT_BOOT_AWARE},
4137 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4138 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4139 * returned.
4140 * @return A {@link ProviderInfo} object containing information about the
4141 * provider. If a provider was not found, returns null.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004142 * @see #GET_META_DATA
4143 * @see #GET_SHARED_LIBRARY_FILES
4144 * @see #MATCH_ALL
4145 * @see #MATCH_DEBUG_TRIAGED_MISSING
4146 * @see #MATCH_DEFAULT_ONLY
4147 * @see #MATCH_DISABLED_COMPONENTS
4148 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004149 * @see #MATCH_DIRECT_BOOT_AWARE
4150 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004151 * @see #MATCH_SYSTEM_ONLY
4152 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004153 */
4154 public abstract ProviderInfo resolveContentProvider(String name,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004155 @ComponentInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004156
4157 /**
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004158 * Find a single content provider by its base path name.
4159 *
4160 * @param name The name of the provider to find.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004161 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004162 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
4163 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
4164 * {@link #MATCH_DISABLED_COMPONENTS},
4165 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4166 * {@link #MATCH_DIRECT_BOOT_AWARE},
4167 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4168 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4169 * returned.
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004170 * @param userId The user id.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004171 * @return A {@link ProviderInfo} object containing information about the
4172 * provider. If a provider was not found, returns null.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004173 * @see #GET_META_DATA
4174 * @see #GET_SHARED_LIBRARY_FILES
4175 * @see #MATCH_ALL
4176 * @see #MATCH_DEBUG_TRIAGED_MISSING
4177 * @see #MATCH_DEFAULT_ONLY
4178 * @see #MATCH_DISABLED_COMPONENTS
4179 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004180 * @see #MATCH_DIRECT_BOOT_AWARE
4181 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004182 * @see #MATCH_SYSTEM_ONLY
4183 * @see #MATCH_UNINSTALLED_PACKAGES
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004184 * @hide
4185 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004186 public abstract ProviderInfo resolveContentProviderAsUser(String name,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004187 @ComponentInfoFlags int flags, @UserIdInt int userId);
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004188
4189 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004190 * Retrieve content provider information.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004191 * <p>
4192 * <em>Note: unlike most other methods, an empty result set is indicated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004193 * by a null return instead of an empty list.</em>
4194 *
4195 * @param processName If non-null, limits the returned providers to only
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004196 * those that are hosted by the given process. If null, all
4197 * content providers are returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004198 * @param uid If <var>processName</var> is non-null, this is the required
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004199 * uid owning the requested content providers.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004200 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004201 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
4202 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
4203 * {@link #MATCH_DISABLED_COMPONENTS},
4204 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4205 * {@link #MATCH_DIRECT_BOOT_AWARE},
4206 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4207 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4208 * returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004209 * @return A list of {@link ProviderInfo} objects containing one entry for
4210 * each provider either matching <var>processName</var> or, if
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004211 * <var>processName</var> is null, all known content providers.
4212 * <em>If there are no matching providers, null is returned.</em>
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004213 * @see #GET_META_DATA
4214 * @see #GET_SHARED_LIBRARY_FILES
4215 * @see #MATCH_ALL
4216 * @see #MATCH_DEBUG_TRIAGED_MISSING
4217 * @see #MATCH_DEFAULT_ONLY
4218 * @see #MATCH_DISABLED_COMPONENTS
4219 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004220 * @see #MATCH_DIRECT_BOOT_AWARE
4221 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004222 * @see #MATCH_SYSTEM_ONLY
4223 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004224 */
4225 public abstract List<ProviderInfo> queryContentProviders(
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004226 String processName, int uid, @ComponentInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004227
4228 /**
4229 * Retrieve all of the information we know about a particular
4230 * instrumentation class.
4231 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004232 * @param className The full name (i.e.
4233 * com.google.apps.contacts.InstrumentList) of an
4234 * Instrumentation class.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004235 * @param flags Additional option flags. Use any combination of
4236 * {@link #GET_META_DATA}
4237 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004238 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004239 * @return An {@link InstrumentationInfo} object containing information about the
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004240 * instrumentation.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004241 * @throws NameNotFoundException if a package with the given name cannot be
4242 * found on the system.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004243 *
4244 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004245 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004246 public abstract InstrumentationInfo getInstrumentationInfo(ComponentName className,
4247 @InstrumentationInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004248
4249 /**
4250 * Retrieve information about available instrumentation code. May be used
4251 * to retrieve either all instrumentation code, or only the code targeting
4252 * a particular package.
4253 *
4254 * @param targetPackage If null, all instrumentation is returned; only the
4255 * instrumentation targeting this package name is
4256 * returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004257 * @param flags Additional option flags. Use any combination of
4258 * {@link #GET_META_DATA}
4259 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004260 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004261 * @return A list of {@link InstrumentationInfo} objects containing one
4262 * entry for each matching instrumentation. If there are no
Jesse Hallf77a34f2016-02-04 18:41:33 -08004263 * instrumentation available, returns an empty list.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004264 *
4265 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004266 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004267 public abstract List<InstrumentationInfo> queryInstrumentation(String targetPackage,
4268 @InstrumentationInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004269
4270 /**
4271 * Retrieve an image from a package. This is a low-level API used by
4272 * the various package manager info structures (such as
4273 * {@link ComponentInfo} to implement retrieval of their associated
4274 * icon.
4275 *
4276 * @param packageName The name of the package that this icon is coming from.
kmccormick30498b42013-03-27 17:39:17 -07004277 * Cannot be null.
4278 * @param resid The resource identifier of the desired image. Cannot be 0.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004279 * @param appInfo Overall information about <var>packageName</var>. This
4280 * may be null, in which case the application information will be retrieved
4281 * for you if needed; if you already have this information around, it can
4282 * be much more efficient to supply it here.
4283 *
4284 * @return Returns a Drawable holding the requested image. Returns null if
4285 * an image could not be found for any reason.
4286 */
Tor Norbye7b9c9122013-05-30 16:48:33 -07004287 public abstract Drawable getDrawable(String packageName, @DrawableRes int resid,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004288 ApplicationInfo appInfo);
4289
4290 /**
4291 * Retrieve the icon associated with an activity. Given the full name of
4292 * an activity, retrieves the information about it and calls
4293 * {@link ComponentInfo#loadIcon ComponentInfo.loadIcon()} to return its icon.
kmccormick30498b42013-03-27 17:39:17 -07004294 * If the activity cannot be found, NameNotFoundException is thrown.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004295 *
4296 * @param activityName Name of the activity whose icon is to be retrieved.
4297 *
4298 * @return Returns the image of the icon, or the default activity icon if
4299 * it could not be found. Does not return null.
4300 * @throws NameNotFoundException Thrown if the resources for the given
4301 * activity could not be loaded.
4302 *
4303 * @see #getActivityIcon(Intent)
4304 */
4305 public abstract Drawable getActivityIcon(ComponentName activityName)
4306 throws NameNotFoundException;
4307
4308 /**
4309 * Retrieve the icon associated with an Intent. If intent.getClassName() is
4310 * set, this simply returns the result of
4311 * getActivityIcon(intent.getClassName()). Otherwise it resolves the intent's
4312 * component and returns the icon associated with the resolved component.
kmccormick30498b42013-03-27 17:39:17 -07004313 * If intent.getClassName() cannot be found or the Intent cannot be resolved
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004314 * to a component, NameNotFoundException is thrown.
4315 *
4316 * @param intent The intent for which you would like to retrieve an icon.
4317 *
4318 * @return Returns the image of the icon, or the default activity icon if
4319 * it could not be found. Does not return null.
4320 * @throws NameNotFoundException Thrown if the resources for application
4321 * matching the given intent could not be loaded.
4322 *
4323 * @see #getActivityIcon(ComponentName)
4324 */
4325 public abstract Drawable getActivityIcon(Intent intent)
4326 throws NameNotFoundException;
4327
4328 /**
Jose Limaf78e3122014-03-06 12:13:15 -08004329 * Retrieve the banner associated with an activity. Given the full name of
4330 * an activity, retrieves the information about it and calls
4331 * {@link ComponentInfo#loadIcon ComponentInfo.loadIcon()} to return its
4332 * banner. If the activity cannot be found, NameNotFoundException is thrown.
4333 *
4334 * @param activityName Name of the activity whose banner is to be retrieved.
4335 * @return Returns the image of the banner, or null if the activity has no
4336 * banner specified.
4337 * @throws NameNotFoundException Thrown if the resources for the given
4338 * activity could not be loaded.
4339 * @see #getActivityBanner(Intent)
4340 */
4341 public abstract Drawable getActivityBanner(ComponentName activityName)
4342 throws NameNotFoundException;
4343
4344 /**
4345 * Retrieve the banner associated with an Intent. If intent.getClassName()
4346 * is set, this simply returns the result of
4347 * getActivityBanner(intent.getClassName()). Otherwise it resolves the
4348 * intent's component and returns the banner associated with the resolved
4349 * component. If intent.getClassName() cannot be found or the Intent cannot
4350 * be resolved to a component, NameNotFoundException is thrown.
4351 *
4352 * @param intent The intent for which you would like to retrieve a banner.
4353 * @return Returns the image of the banner, or null if the activity has no
4354 * banner specified.
4355 * @throws NameNotFoundException Thrown if the resources for application
4356 * matching the given intent could not be loaded.
4357 * @see #getActivityBanner(ComponentName)
4358 */
4359 public abstract Drawable getActivityBanner(Intent intent)
4360 throws NameNotFoundException;
4361
4362 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004363 * Return the generic icon for an activity that is used when no specific
4364 * icon is defined.
Adam Connors23cc04e2014-04-01 12:12:20 +01004365 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004366 * @return Drawable Image of the icon.
4367 */
4368 public abstract Drawable getDefaultActivityIcon();
4369
4370 /**
4371 * Retrieve the icon associated with an application. If it has not defined
4372 * an icon, the default app icon is returned. Does not return null.
4373 *
4374 * @param info Information about application being queried.
4375 *
4376 * @return Returns the image of the icon, or the default application icon
4377 * if it could not be found.
4378 *
4379 * @see #getApplicationIcon(String)
4380 */
4381 public abstract Drawable getApplicationIcon(ApplicationInfo info);
4382
4383 /**
4384 * Retrieve the icon associated with an application. Given the name of the
4385 * application's package, retrieves the information about it and calls
kmccormick30498b42013-03-27 17:39:17 -07004386 * getApplicationIcon() to return its icon. If the application cannot be
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004387 * found, NameNotFoundException is thrown.
4388 *
4389 * @param packageName Name of the package whose application icon is to be
4390 * retrieved.
4391 *
4392 * @return Returns the image of the icon, or the default application icon
4393 * if it could not be found. Does not return null.
4394 * @throws NameNotFoundException Thrown if the resources for the given
4395 * application could not be loaded.
4396 *
4397 * @see #getApplicationIcon(ApplicationInfo)
4398 */
4399 public abstract Drawable getApplicationIcon(String packageName)
4400 throws NameNotFoundException;
4401
4402 /**
Jose Limaf78e3122014-03-06 12:13:15 -08004403 * Retrieve the banner associated with an application.
4404 *
4405 * @param info Information about application being queried.
4406 * @return Returns the image of the banner or null if the application has no
4407 * banner specified.
4408 * @see #getApplicationBanner(String)
4409 */
4410 public abstract Drawable getApplicationBanner(ApplicationInfo info);
4411
4412 /**
4413 * Retrieve the banner associated with an application. Given the name of the
4414 * application's package, retrieves the information about it and calls
4415 * getApplicationIcon() to return its banner. If the application cannot be
4416 * found, NameNotFoundException is thrown.
4417 *
4418 * @param packageName Name of the package whose application banner is to be
4419 * retrieved.
4420 * @return Returns the image of the banner or null if the application has no
4421 * banner specified.
4422 * @throws NameNotFoundException Thrown if the resources for the given
4423 * application could not be loaded.
4424 * @see #getApplicationBanner(ApplicationInfo)
4425 */
4426 public abstract Drawable getApplicationBanner(String packageName)
4427 throws NameNotFoundException;
4428
4429 /**
4430 * Retrieve the logo associated with an activity. Given the full name of an
4431 * activity, retrieves the information about it and calls
4432 * {@link ComponentInfo#loadLogo ComponentInfo.loadLogo()} to return its
4433 * logo. If the activity cannot be found, NameNotFoundException is thrown.
Adam Powell81cd2e92010-04-21 16:35:18 -07004434 *
4435 * @param activityName Name of the activity whose logo is to be retrieved.
Jose Limaf78e3122014-03-06 12:13:15 -08004436 * @return Returns the image of the logo or null if the activity has no logo
4437 * specified.
Adam Powell81cd2e92010-04-21 16:35:18 -07004438 * @throws NameNotFoundException Thrown if the resources for the given
Jose Limaf78e3122014-03-06 12:13:15 -08004439 * activity could not be loaded.
Adam Powell81cd2e92010-04-21 16:35:18 -07004440 * @see #getActivityLogo(Intent)
4441 */
4442 public abstract Drawable getActivityLogo(ComponentName activityName)
4443 throws NameNotFoundException;
4444
4445 /**
4446 * Retrieve the logo associated with an Intent. If intent.getClassName() is
4447 * set, this simply returns the result of
4448 * getActivityLogo(intent.getClassName()). Otherwise it resolves the intent's
4449 * component and returns the logo associated with the resolved component.
kmccormick30498b42013-03-27 17:39:17 -07004450 * If intent.getClassName() cannot be found or the Intent cannot be resolved
Adam Powell81cd2e92010-04-21 16:35:18 -07004451 * to a component, NameNotFoundException is thrown.
4452 *
4453 * @param intent The intent for which you would like to retrieve a logo.
4454 *
4455 * @return Returns the image of the logo, or null if the activity has no
4456 * logo specified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07004457 *
Adam Powell81cd2e92010-04-21 16:35:18 -07004458 * @throws NameNotFoundException Thrown if the resources for application
4459 * matching the given intent could not be loaded.
4460 *
4461 * @see #getActivityLogo(ComponentName)
4462 */
4463 public abstract Drawable getActivityLogo(Intent intent)
4464 throws NameNotFoundException;
4465
4466 /**
4467 * Retrieve the logo associated with an application. If it has not specified
4468 * a logo, this method returns null.
4469 *
4470 * @param info Information about application being queried.
4471 *
4472 * @return Returns the image of the logo, or null if no logo is specified
4473 * by the application.
4474 *
4475 * @see #getApplicationLogo(String)
4476 */
4477 public abstract Drawable getApplicationLogo(ApplicationInfo info);
4478
4479 /**
4480 * Retrieve the logo associated with an application. Given the name of the
4481 * application's package, retrieves the information about it and calls
kmccormick30498b42013-03-27 17:39:17 -07004482 * getApplicationLogo() to return its logo. If the application cannot be
Adam Powell81cd2e92010-04-21 16:35:18 -07004483 * found, NameNotFoundException is thrown.
4484 *
4485 * @param packageName Name of the package whose application logo is to be
4486 * retrieved.
4487 *
4488 * @return Returns the image of the logo, or null if no application logo
4489 * has been specified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07004490 *
Adam Powell81cd2e92010-04-21 16:35:18 -07004491 * @throws NameNotFoundException Thrown if the resources for the given
4492 * application could not be loaded.
4493 *
4494 * @see #getApplicationLogo(ApplicationInfo)
4495 */
4496 public abstract Drawable getApplicationLogo(String packageName)
4497 throws NameNotFoundException;
4498
4499 /**
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004500 * Returns a managed-user-style badged copy of the given drawable allowing the user to
4501 * distinguish it from the original drawable.
4502 * The caller can specify the location in the bounds of the drawable to be
4503 * badged where the badge should be applied as well as the density of the
4504 * badge to be used.
4505 * <p>
4506 * If the original drawable is a BitmapDrawable and the backing bitmap is
4507 * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging
4508 * is performed in place and the original drawable is returned.
4509 * </p>
4510 *
4511 * @param drawable The drawable to badge.
4512 * @param badgeLocation Where in the bounds of the badged drawable to place
4513 * the badge. If it's {@code null}, the badge is applied on top of the entire
4514 * drawable being badged.
4515 * @param badgeDensity The optional desired density for the badge as per
4516 * {@link android.util.DisplayMetrics#densityDpi}. If it's not positive,
4517 * the density of the display is used.
4518 * @return A drawable that combines the original drawable and a badge as
4519 * determined by the system.
4520 * @hide
4521 */
4522 public abstract Drawable getManagedUserBadgedDrawable(Drawable drawable, Rect badgeLocation,
4523 int badgeDensity);
4524
4525 /**
Tony Mak4dc008c2016-03-16 10:46:49 +00004526 * If the target user is a managed profile, then this returns a badged copy of the given icon
4527 * to be able to distinguish it from the original icon. For badging an arbitrary drawable use
Kenny Guydf77d712015-05-29 17:02:22 +01004528 * {@link #getUserBadgedDrawableForDensity(
Svetoslavc7d62f02014-09-04 15:39:54 -07004529 * android.graphics.drawable.Drawable, UserHandle, android.graphics.Rect, int)}.
4530 * <p>
4531 * If the original drawable is a BitmapDrawable and the backing bitmap is
4532 * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging
4533 * is performed in place and the original drawable is returned.
4534 * </p>
4535 *
4536 * @param icon The icon to badge.
4537 * @param user The target user.
4538 * @return A drawable that combines the original icon and a badge as
4539 * determined by the system.
4540 */
4541 public abstract Drawable getUserBadgedIcon(Drawable icon, UserHandle user);
4542
4543 /**
4544 * If the target user is a managed profile of the calling user or the caller
4545 * is itself a managed profile, then this returns a badged copy of the given
4546 * drawable allowing the user to distinguish it from the original drawable.
4547 * The caller can specify the location in the bounds of the drawable to be
4548 * badged where the badge should be applied as well as the density of the
4549 * badge to be used.
4550 * <p>
4551 * If the original drawable is a BitmapDrawable and the backing bitmap is
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004552 * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging
Svetoslavc7d62f02014-09-04 15:39:54 -07004553 * is performed in place and the original drawable is returned.
4554 * </p>
4555 *
4556 * @param drawable The drawable to badge.
4557 * @param user The target user.
4558 * @param badgeLocation Where in the bounds of the badged drawable to place
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004559 * the badge. If it's {@code null}, the badge is applied on top of the entire
Svetoslavc7d62f02014-09-04 15:39:54 -07004560 * drawable being badged.
4561 * @param badgeDensity The optional desired density for the badge as per
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004562 * {@link android.util.DisplayMetrics#densityDpi}. If it's not positive,
Svetoslavc7d62f02014-09-04 15:39:54 -07004563 * the density of the display is used.
4564 * @return A drawable that combines the original drawable and a badge as
4565 * determined by the system.
4566 */
4567 public abstract Drawable getUserBadgedDrawableForDensity(Drawable drawable,
4568 UserHandle user, Rect badgeLocation, int badgeDensity);
4569
4570 /**
4571 * If the target user is a managed profile of the calling user or the caller
4572 * is itself a managed profile, then this returns a drawable to use as a small
4573 * icon to include in a view to distinguish it from the original icon.
4574 *
4575 * @param user The target user.
4576 * @param density The optional desired density for the badge as per
4577 * {@link android.util.DisplayMetrics#densityDpi}. If not provided
4578 * the density of the current display is used.
4579 * @return the drawable or null if no drawable is required.
4580 * @hide
4581 */
4582 public abstract Drawable getUserBadgeForDensity(UserHandle user, int density);
4583
4584 /**
4585 * If the target user is a managed profile of the calling user or the caller
Selim Cineke6ff9462016-01-15 15:07:06 -08004586 * is itself a managed profile, then this returns a drawable to use as a small
4587 * icon to include in a view to distinguish it from the original icon. This version
4588 * doesn't have background protection and should be used over a light background instead of
4589 * a badge.
4590 *
4591 * @param user The target user.
4592 * @param density The optional desired density for the badge as per
4593 * {@link android.util.DisplayMetrics#densityDpi}. If not provided
4594 * the density of the current display is used.
4595 * @return the drawable or null if no drawable is required.
4596 * @hide
4597 */
4598 public abstract Drawable getUserBadgeForDensityNoBackground(UserHandle user, int density);
4599
4600 /**
4601 * If the target user is a managed profile of the calling user or the caller
Svetoslavc7d62f02014-09-04 15:39:54 -07004602 * is itself a managed profile, then this returns a copy of the label with
4603 * badging for accessibility services like talkback. E.g. passing in "Email"
4604 * and it might return "Work Email" for Email in the work profile.
4605 *
4606 * @param label The label to change.
4607 * @param user The target user.
4608 * @return A label that combines the original label and a badge as
4609 * determined by the system.
4610 */
4611 public abstract CharSequence getUserBadgedLabel(CharSequence label, UserHandle user);
4612
4613 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004614 * Retrieve text from a package. This is a low-level API used by
4615 * the various package manager info structures (such as
4616 * {@link ComponentInfo} to implement retrieval of their associated
4617 * labels and other text.
4618 *
4619 * @param packageName The name of the package that this text is coming from.
kmccormick30498b42013-03-27 17:39:17 -07004620 * Cannot be null.
4621 * @param resid The resource identifier of the desired text. Cannot be 0.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004622 * @param appInfo Overall information about <var>packageName</var>. This
4623 * may be null, in which case the application information will be retrieved
4624 * for you if needed; if you already have this information around, it can
4625 * be much more efficient to supply it here.
4626 *
4627 * @return Returns a CharSequence holding the requested text. Returns null
4628 * if the text could not be found for any reason.
4629 */
Tor Norbye7b9c9122013-05-30 16:48:33 -07004630 public abstract CharSequence getText(String packageName, @StringRes int resid,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004631 ApplicationInfo appInfo);
4632
4633 /**
4634 * Retrieve an XML file from a package. This is a low-level API used to
4635 * retrieve XML meta data.
4636 *
4637 * @param packageName The name of the package that this xml is coming from.
kmccormick30498b42013-03-27 17:39:17 -07004638 * Cannot be null.
4639 * @param resid The resource identifier of the desired xml. Cannot be 0.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004640 * @param appInfo Overall information about <var>packageName</var>. This
4641 * may be null, in which case the application information will be retrieved
4642 * for you if needed; if you already have this information around, it can
4643 * be much more efficient to supply it here.
4644 *
4645 * @return Returns an XmlPullParser allowing you to parse out the XML
4646 * data. Returns null if the xml resource could not be found for any
4647 * reason.
4648 */
Tor Norbye7b9c9122013-05-30 16:48:33 -07004649 public abstract XmlResourceParser getXml(String packageName, @XmlRes int resid,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004650 ApplicationInfo appInfo);
4651
4652 /**
4653 * Return the label to use for this application.
4654 *
4655 * @return Returns the label associated with this application, or null if
4656 * it could not be found for any reason.
kmccormick30498b42013-03-27 17:39:17 -07004657 * @param info The application to get the label of.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004658 */
4659 public abstract CharSequence getApplicationLabel(ApplicationInfo info);
4660
4661 /**
4662 * Retrieve the resources associated with an activity. Given the full
4663 * name of an activity, retrieves the information about it and calls
4664 * getResources() to return its application's resources. If the activity
kmccormick30498b42013-03-27 17:39:17 -07004665 * cannot be found, NameNotFoundException is thrown.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004666 *
4667 * @param activityName Name of the activity whose resources are to be
4668 * retrieved.
4669 *
4670 * @return Returns the application's Resources.
4671 * @throws NameNotFoundException Thrown if the resources for the given
4672 * application could not be loaded.
4673 *
4674 * @see #getResourcesForApplication(ApplicationInfo)
4675 */
4676 public abstract Resources getResourcesForActivity(ComponentName activityName)
4677 throws NameNotFoundException;
4678
4679 /**
4680 * Retrieve the resources for an application. Throws NameNotFoundException
4681 * if the package is no longer installed.
4682 *
4683 * @param app Information about the desired application.
4684 *
4685 * @return Returns the application's Resources.
4686 * @throws NameNotFoundException Thrown if the resources for the given
4687 * application could not be loaded (most likely because it was uninstalled).
4688 */
4689 public abstract Resources getResourcesForApplication(ApplicationInfo app)
4690 throws NameNotFoundException;
4691
4692 /**
4693 * Retrieve the resources associated with an application. Given the full
4694 * package name of an application, retrieves the information about it and
4695 * calls getResources() to return its application's resources. If the
kmccormick30498b42013-03-27 17:39:17 -07004696 * appPackageName cannot be found, NameNotFoundException is thrown.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004697 *
4698 * @param appPackageName Package name of the application whose resources
4699 * are to be retrieved.
4700 *
4701 * @return Returns the application's Resources.
4702 * @throws NameNotFoundException Thrown if the resources for the given
4703 * application could not be loaded.
4704 *
4705 * @see #getResourcesForApplication(ApplicationInfo)
4706 */
4707 public abstract Resources getResourcesForApplication(String appPackageName)
4708 throws NameNotFoundException;
4709
Amith Yamasani98edc952012-09-25 14:09:27 -07004710 /** @hide */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004711 public abstract Resources getResourcesForApplicationAsUser(String appPackageName,
4712 @UserIdInt int userId) throws NameNotFoundException;
Amith Yamasani98edc952012-09-25 14:09:27 -07004713
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004714 /**
4715 * Retrieve overall information about an application package defined
4716 * in a package archive file
4717 *
4718 * @param archiveFilePath The path to the archive file
4719 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004720 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
4721 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
4722 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
4723 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
4724 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
4725 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
4726 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
4727 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4728 * {@link #MATCH_UNINSTALLED_PACKAGES}
4729 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004730 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004731 * @return A PackageInfo object containing information about the
4732 * package archive. If the package could not be parsed,
4733 * returns null.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004734 *
4735 * @see #GET_ACTIVITIES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004736 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004737 * @see #GET_GIDS
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004738 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004739 * @see #GET_INTENT_FILTERS
4740 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004741 * @see #GET_PERMISSIONS
4742 * @see #GET_PROVIDERS
4743 * @see #GET_RECEIVERS
4744 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004745 * @see #GET_SHARED_LIBRARY_FILES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004746 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004747 * @see #GET_URI_PERMISSION_PATTERNS
4748 * @see #MATCH_DISABLED_COMPONENTS
4749 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
4750 * @see #MATCH_UNINSTALLED_PACKAGES
Amith Yamasani4b2e9342011-03-31 12:38:53 -07004751 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004752 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004753 public PackageInfo getPackageArchiveInfo(String archiveFilePath, @PackageInfoFlags int flags) {
Jeff Sharkey275e0852014-06-17 18:18:49 -07004754 final PackageParser parser = new PackageParser();
4755 final File apkFile = new File(archiveFilePath);
Jeff Sharkeyc4858a22014-06-16 10:51:20 -07004756 try {
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004757 if ((flags & (MATCH_DIRECT_BOOT_UNAWARE | MATCH_DIRECT_BOOT_AWARE)) != 0) {
Jeff Sharkeyc3132512016-01-12 14:06:58 -07004758 // Caller expressed an explicit opinion about what encryption
4759 // aware/unaware components they want to see, so fall through and
4760 // give them what they want
4761 } else {
4762 // Caller expressed no opinion, so match everything
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004763 flags |= MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE;
Jeff Sharkeyc3132512016-01-12 14:06:58 -07004764 }
4765
Jeff Sharkey275e0852014-06-17 18:18:49 -07004766 PackageParser.Package pkg = parser.parseMonolithicPackage(apkFile, 0);
Jeff Sharkeyc4858a22014-06-16 10:51:20 -07004767 if ((flags & GET_SIGNATURES) != 0) {
Svet Ganov354cd3c2015-12-17 11:35:04 -08004768 PackageParser.collectCertificates(pkg, 0);
Jeff Sharkeyc4858a22014-06-16 10:51:20 -07004769 }
4770 PackageUserState state = new PackageUserState();
4771 return PackageParser.generatePackageInfo(pkg, null, flags, 0, 0, null, state);
4772 } catch (PackageParserException e) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004773 return null;
4774 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004775 }
4776
4777 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004778 * @deprecated replaced by {@link PackageInstaller}
4779 * @hide
Jacek Surazski65e13172009-04-28 15:26:38 +02004780 */
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004781 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004782 public abstract void installPackage(
Todd Kennedya6793232016-02-24 22:46:00 +00004783 Uri packageURI,
4784 IPackageInstallObserver observer,
4785 @InstallFlags int flags,
Jacek Surazski65e13172009-04-28 15:26:38 +02004786 String installerPackageName);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004787 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004788 * @deprecated replaced by {@link PackageInstaller}
Christopher Tateab8a5012014-03-24 16:25:51 -07004789 * @hide
Christopher Tateab8a5012014-03-24 16:25:51 -07004790 */
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004791 @Deprecated
Todd Kennedya6793232016-02-24 22:46:00 +00004792 public abstract void installPackage(
4793 Uri packageURI,
4794 PackageInstallObserver observer,
4795 @InstallFlags int flags,
4796 String installerPackageName);
Christopher Tateab8a5012014-03-24 16:25:51 -07004797
rich cannings706e8ba2012-08-20 13:20:14 -07004798 /**
Dianne Hackborn7767eac2012-08-23 18:25:40 -07004799 * If there is already an application with the given package name installed
4800 * on the system for other users, also install it for the calling user.
4801 * @hide
4802 */
Nicolas Prevot9a80e532015-09-23 15:49:28 +01004803 public abstract int installExistingPackage(String packageName) throws NameNotFoundException;
4804
4805 /**
4806 * If there is already an application with the given package name installed
4807 * on the system for other users, also install it for the specified user.
4808 * @hide
4809 */
4810 @RequiresPermission(anyOf = {
4811 Manifest.permission.INSTALL_PACKAGES,
4812 Manifest.permission.INTERACT_ACROSS_USERS_FULL})
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004813 public abstract int installExistingPackageAsUser(String packageName, @UserIdInt int userId)
Dianne Hackborn7767eac2012-08-23 18:25:40 -07004814 throws NameNotFoundException;
4815
4816 /**
Kenny Root5ab21572011-07-27 11:11:19 -07004817 * Allows a package listening to the
4818 * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification
Kenny Root3a9b5fb2011-09-20 14:15:38 -07004819 * broadcast} to respond to the package manager. The response must include
4820 * the {@code verificationCode} which is one of
4821 * {@link PackageManager#VERIFICATION_ALLOW} or
4822 * {@link PackageManager#VERIFICATION_REJECT}.
Kenny Root5ab21572011-07-27 11:11:19 -07004823 *
4824 * @param id pending package identifier as passed via the
kmccormick30498b42013-03-27 17:39:17 -07004825 * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra.
Kenny Root3a9b5fb2011-09-20 14:15:38 -07004826 * @param verificationCode either {@link PackageManager#VERIFICATION_ALLOW}
4827 * or {@link PackageManager#VERIFICATION_REJECT}.
rich cannings7e671512012-08-27 14:44:16 -07004828 * @throws SecurityException if the caller does not have the
Dianne Hackborn8832c182012-09-17 17:20:24 -07004829 * PACKAGE_VERIFICATION_AGENT permission.
Kenny Root5ab21572011-07-27 11:11:19 -07004830 */
Kenny Root3a9b5fb2011-09-20 14:15:38 -07004831 public abstract void verifyPendingInstall(int id, int verificationCode);
Kenny Root5ab21572011-07-27 11:11:19 -07004832
4833 /**
rich canningsd9ef3e52012-08-22 14:28:05 -07004834 * Allows a package listening to the
4835 * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification
4836 * broadcast} to extend the default timeout for a response and declare what
4837 * action to perform after the timeout occurs. The response must include
4838 * the {@code verificationCodeAtTimeout} which is one of
4839 * {@link PackageManager#VERIFICATION_ALLOW} or
4840 * {@link PackageManager#VERIFICATION_REJECT}.
4841 *
4842 * This method may only be called once per package id. Additional calls
4843 * will have no effect.
4844 *
4845 * @param id pending package identifier as passed via the
kmccormick30498b42013-03-27 17:39:17 -07004846 * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra.
rich canningsd9ef3e52012-08-22 14:28:05 -07004847 * @param verificationCodeAtTimeout either
4848 * {@link PackageManager#VERIFICATION_ALLOW} or
rich canningsd1b5cfc2012-08-29 14:49:51 -07004849 * {@link PackageManager#VERIFICATION_REJECT}. If
4850 * {@code verificationCodeAtTimeout} is neither
4851 * {@link PackageManager#VERIFICATION_ALLOW} or
4852 * {@link PackageManager#VERIFICATION_REJECT}, then
4853 * {@code verificationCodeAtTimeout} will default to
rich canningsd9ef3e52012-08-22 14:28:05 -07004854 * {@link PackageManager#VERIFICATION_REJECT}.
4855 * @param millisecondsToDelay the amount of time requested for the timeout.
4856 * Must be positive and less than
rich canningsd1b5cfc2012-08-29 14:49:51 -07004857 * {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}. If
4858 * {@code millisecondsToDelay} is out of bounds,
4859 * {@code millisecondsToDelay} will be set to the closest in
4860 * bounds value; namely, 0 or
rich canningsd9ef3e52012-08-22 14:28:05 -07004861 * {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}.
rich cannings7e671512012-08-27 14:44:16 -07004862 * @throws SecurityException if the caller does not have the
Dianne Hackborn8832c182012-09-17 17:20:24 -07004863 * PACKAGE_VERIFICATION_AGENT permission.
rich canningsd9ef3e52012-08-22 14:28:05 -07004864 */
4865 public abstract void extendVerificationTimeout(int id,
4866 int verificationCodeAtTimeout, long millisecondsToDelay);
4867
4868 /**
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004869 * Allows a package listening to the
Todd Kennedydfa93ab2016-03-03 15:24:33 -08004870 * {@link Intent#ACTION_INTENT_FILTER_NEEDS_VERIFICATION} intent filter verification
4871 * broadcast to respond to the package manager. The response must include
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004872 * the {@code verificationCode} which is one of
4873 * {@link PackageManager#INTENT_FILTER_VERIFICATION_SUCCESS} or
4874 * {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}.
4875 *
4876 * @param verificationId pending package identifier as passed via the
4877 * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra.
4878 * @param verificationCode either {@link PackageManager#INTENT_FILTER_VERIFICATION_SUCCESS}
4879 * or {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}.
Todd Kennedydfa93ab2016-03-03 15:24:33 -08004880 * @param failedDomains a list of failed domains if the verificationCode is
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004881 * {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}, otherwise null;
4882 * @throws SecurityException if the caller does not have the
4883 * INTENT_FILTER_VERIFICATION_AGENT permission.
4884 *
4885 * @hide
4886 */
Fabrice Di Meglioef741da2015-05-12 16:31:38 -07004887 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004888 public abstract void verifyIntentFilter(int verificationId, int verificationCode,
Todd Kennedydfa93ab2016-03-03 15:24:33 -08004889 List<String> failedDomains);
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004890
4891 /**
4892 * Get the status of a Domain Verification Result for an IntentFilter. This is
4893 * related to the {@link android.content.IntentFilter#setAutoVerify(boolean)} and
4894 * {@link android.content.IntentFilter#getAutoVerify()}
4895 *
4896 * This is used by the ResolverActivity to change the status depending on what the User select
4897 * in the Disambiguation Dialog and also used by the Settings App for changing the default App
4898 * for a domain.
4899 *
4900 * @param packageName The package name of the Activity associated with the IntentFilter.
4901 * @param userId The user id.
4902 *
4903 * @return The status to set to. This can be
4904 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK} or
4905 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS} or
4906 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER} or
4907 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED}
4908 *
4909 * @hide
4910 */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004911 public abstract int getIntentVerificationStatusAsUser(String packageName, @UserIdInt int userId);
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004912
4913 /**
4914 * Allow to change the status of a Intent Verification status for all IntentFilter of an App.
4915 * This is related to the {@link android.content.IntentFilter#setAutoVerify(boolean)} and
4916 * {@link android.content.IntentFilter#getAutoVerify()}
4917 *
4918 * This is used by the ResolverActivity to change the status depending on what the User select
4919 * in the Disambiguation Dialog and also used by the Settings App for changing the default App
4920 * for a domain.
4921 *
4922 * @param packageName The package name of the Activity associated with the IntentFilter.
4923 * @param status The status to set to. This can be
4924 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK} or
4925 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS} or
4926 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER}
4927 * @param userId The user id.
4928 *
4929 * @return true if the status has been set. False otherwise.
4930 *
4931 * @hide
4932 */
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07004933 public abstract boolean updateIntentVerificationStatusAsUser(String packageName, int status,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004934 @UserIdInt int userId);
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004935
4936 /**
4937 * Get the list of IntentFilterVerificationInfo for a specific package and User.
4938 *
4939 * @param packageName the package name. When this parameter is set to a non null value,
4940 * the results will be filtered by the package name provided.
4941 * Otherwise, there will be no filtering and it will return a list
Fabrice Di Meglio07885952015-04-06 19:41:28 -07004942 * corresponding for all packages
4943 *
4944 * @return a list of IntentFilterVerificationInfo for a specific package.
4945 *
4946 * @hide
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004947 */
4948 public abstract List<IntentFilterVerificationInfo> getIntentFilterVerifications(
4949 String packageName);
4950
4951 /**
Fabrice Di Meglio07885952015-04-06 19:41:28 -07004952 * Get the list of IntentFilter for a specific package.
4953 *
4954 * @param packageName the package name. This parameter is set to a non null value,
4955 * the list will contain all the IntentFilter for that package.
4956 * Otherwise, the list will be empty.
4957 *
4958 * @return a list of IntentFilter for a specific package.
4959 *
4960 * @hide
4961 */
4962 public abstract List<IntentFilter> getAllIntentFilters(String packageName);
4963
4964 /**
Fabrice Di Meglio62271722015-04-10 17:24:02 -07004965 * Get the default Browser package name for a specific user.
4966 *
4967 * @param userId The user id.
4968 *
4969 * @return the package name of the default Browser for the specified user. If the user id passed
4970 * is -1 (all users) it will return a null value.
4971 *
4972 * @hide
4973 */
Jeff Sharkeya73b8fd2016-01-06 17:02:08 -07004974 @TestApi
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004975 public abstract String getDefaultBrowserPackageNameAsUser(@UserIdInt int userId);
Fabrice Di Meglio62271722015-04-10 17:24:02 -07004976
4977 /**
4978 * Set the default Browser package name for a specific user.
4979 *
4980 * @param packageName The package name of the default Browser.
4981 * @param userId The user id.
4982 *
4983 * @return true if the default Browser for the specified user has been set,
4984 * otherwise return false. If the user id passed is -1 (all users) this call will not
4985 * do anything and just return false.
4986 *
4987 * @hide
4988 */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004989 public abstract boolean setDefaultBrowserPackageNameAsUser(String packageName,
4990 @UserIdInt int userId);
Fabrice Di Meglio62271722015-04-10 17:24:02 -07004991
4992 /**
Dianne Hackborn880119b2010-11-18 22:26:40 -08004993 * Change the installer associated with a given package. There are limitations
4994 * on how the installer package can be changed; in particular:
4995 * <ul>
4996 * <li> A SecurityException will be thrown if <var>installerPackageName</var>
4997 * is not signed with the same certificate as the calling application.
4998 * <li> A SecurityException will be thrown if <var>targetPackage</var> already
4999 * has an installer package, and that installer package is not signed with
5000 * the same certificate as the calling application.
5001 * </ul>
5002 *
5003 * @param targetPackage The installed package whose installer will be changed.
5004 * @param installerPackageName The package name of the new installer. May be
5005 * null to clear the association.
5006 */
5007 public abstract void setInstallerPackageName(String targetPackage,
5008 String installerPackageName);
5009
5010 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005011 * Attempts to delete a package. Since this may take a little while, the
5012 * result will be posted back to the given observer. A deletion will fail if
5013 * the calling context lacks the
5014 * {@link android.Manifest.permission#DELETE_PACKAGES} permission, if the
5015 * named package cannot be found, or if the named package is a system
5016 * package.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005017 *
5018 * @param packageName The name of the package to delete
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005019 * @param observer An observer callback to get notified when the package
5020 * deletion is complete.
5021 * {@link android.content.pm.IPackageDeleteObserver#packageDeleted}
5022 * will be called when that happens. observer may be null to
5023 * indicate that no callback is desired.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005024 * @hide
5025 */
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005026 public abstract void deletePackage(String packageName, IPackageDeleteObserver observer,
5027 @DeleteFlags int flags);
Jacek Surazski65e13172009-04-28 15:26:38 +02005028
5029 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005030 * Attempts to delete a package. Since this may take a little while, the
5031 * result will be posted back to the given observer. A deletion will fail if
5032 * the named package cannot be found, or if the named package is a system
5033 * package.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01005034 *
5035 * @param packageName The name of the package to delete
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005036 * @param observer An observer callback to get notified when the package
5037 * deletion is complete.
5038 * {@link android.content.pm.IPackageDeleteObserver#packageDeleted}
5039 * will be called when that happens. observer may be null to
5040 * indicate that no callback is desired.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01005041 * @param userId The user Id
Nicolas Prevot9a80e532015-09-23 15:49:28 +01005042 * @hide
5043 */
5044 @RequiresPermission(anyOf = {
5045 Manifest.permission.DELETE_PACKAGES,
5046 Manifest.permission.INTERACT_ACROSS_USERS_FULL})
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005047 public abstract void deletePackageAsUser(String packageName, IPackageDeleteObserver observer,
5048 @DeleteFlags int flags, @UserIdInt int userId);
Nicolas Prevot9a80e532015-09-23 15:49:28 +01005049
5050 /**
Jacek Surazski65e13172009-04-28 15:26:38 +02005051 * Retrieve the package name of the application that installed a package. This identifies
5052 * which market the package came from.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005053 *
Jacek Surazski65e13172009-04-28 15:26:38 +02005054 * @param packageName The name of the package to query
5055 */
5056 public abstract String getInstallerPackageName(String packageName);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005057
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005058 /**
5059 * Attempts to clear the user data directory of an application.
5060 * Since this may take a little while, the result will
5061 * be posted back to the given observer. A deletion will fail if the
5062 * named package cannot be found, or if the named package is a "system package".
5063 *
5064 * @param packageName The name of the package
5065 * @param observer An observer callback to get notified when the operation is finished
5066 * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
5067 * will be called when that happens. observer may be null to indicate that
5068 * no callback is desired.
5069 *
5070 * @hide
5071 */
5072 public abstract void clearApplicationUserData(String packageName,
5073 IPackageDataObserver observer);
5074 /**
5075 * Attempts to delete the cache files associated with an application.
5076 * Since this may take a little while, the result will
5077 * be posted back to the given observer. A deletion will fail if the calling context
5078 * lacks the {@link android.Manifest.permission#DELETE_CACHE_FILES} permission, if the
5079 * named package cannot be found, or if the named package is a "system package".
5080 *
5081 * @param packageName The name of the package to delete
5082 * @param observer An observer callback to get notified when the cache file deletion
5083 * is complete.
5084 * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
5085 * will be called when that happens. observer may be null to indicate that
5086 * no callback is desired.
5087 *
5088 * @hide
5089 */
5090 public abstract void deleteApplicationCacheFiles(String packageName,
5091 IPackageDataObserver observer);
5092
5093 /**
Suprabh Shukla78c9eb82016-04-12 15:51:35 -07005094 * Attempts to delete the cache files associated with an application for a given user. Since
5095 * this may take a little while, the result will be posted back to the given observer. A
5096 * deletion will fail if the calling context lacks the
5097 * {@link android.Manifest.permission#DELETE_CACHE_FILES} permission, if the named package
5098 * cannot be found, or if the named package is a "system package". If {@code userId} does not
5099 * belong to the calling user, the caller must have
5100 * {@link android.Manifest.permission#INTERACT_ACROSS_USERS} permission.
5101 *
5102 * @param packageName The name of the package to delete
5103 * @param userId the user for which the cache files needs to be deleted
5104 * @param observer An observer callback to get notified when the cache file deletion is
5105 * complete.
5106 * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
5107 * will be called when that happens. observer may be null to indicate that no
5108 * callback is desired.
5109 * @hide
5110 */
5111 public abstract void deleteApplicationCacheFilesAsUser(String packageName, int userId,
5112 IPackageDataObserver observer);
5113
5114 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005115 * Free storage by deleting LRU sorted list of cache files across
5116 * all applications. If the currently available free storage
5117 * on the device is greater than or equal to the requested
5118 * free storage, no cache files are cleared. If the currently
5119 * available storage on the device is less than the requested
5120 * free storage, some or all of the cache files across
5121 * all applications are deleted (based on last accessed time)
5122 * to increase the free storage space on the device to
5123 * the requested value. There is no guarantee that clearing all
5124 * the cache files from all applications will clear up
5125 * enough storage to achieve the desired value.
5126 * @param freeStorageSize The number of bytes of storage to be
5127 * freed by the system. Say if freeStorageSize is XX,
5128 * and the current free storage is YY,
5129 * if XX is less than YY, just return. if not free XX-YY number
5130 * of bytes if possible.
5131 * @param observer call back used to notify when
5132 * the operation is completed
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005133 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005134 * @hide
5135 */
Jeff Sharkey529f91f2015-04-18 20:23:13 -07005136 public void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer) {
5137 freeStorageAndNotify(null, freeStorageSize, observer);
5138 }
5139
5140 /** {@hide} */
5141 public abstract void freeStorageAndNotify(String volumeUuid, long freeStorageSize,
5142 IPackageDataObserver observer);
Suchi Amalapurapu1ccac752009-06-12 10:09:58 -07005143
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005144 /**
5145 * Free storage by deleting LRU sorted list of cache files across
5146 * all applications. If the currently available free storage
5147 * on the device is greater than or equal to the requested
5148 * free storage, no cache files are cleared. If the currently
5149 * available storage on the device is less than the requested
5150 * free storage, some or all of the cache files across
5151 * all applications are deleted (based on last accessed time)
5152 * to increase the free storage space on the device to
5153 * the requested value. There is no guarantee that clearing all
5154 * the cache files from all applications will clear up
5155 * enough storage to achieve the desired value.
5156 * @param freeStorageSize The number of bytes of storage to be
5157 * freed by the system. Say if freeStorageSize is XX,
5158 * and the current free storage is YY,
5159 * if XX is less than YY, just return. if not free XX-YY number
5160 * of bytes if possible.
Suchi Amalapurapu1ccac752009-06-12 10:09:58 -07005161 * @param pi IntentSender call back used to
5162 * notify when the operation is completed.May be null
5163 * to indicate that no call back is desired.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005164 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005165 * @hide
5166 */
Jeff Sharkey529f91f2015-04-18 20:23:13 -07005167 public void freeStorage(long freeStorageSize, IntentSender pi) {
5168 freeStorage(null, freeStorageSize, pi);
5169 }
5170
5171 /** {@hide} */
5172 public abstract void freeStorage(String volumeUuid, long freeStorageSize, IntentSender pi);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005173
5174 /**
5175 * Retrieve the size information for a package.
5176 * Since this may take a little while, the result will
5177 * be posted back to the given observer. The calling context
5178 * should have the {@link android.Manifest.permission#GET_PACKAGE_SIZE} permission.
5179 *
5180 * @param packageName The name of the package whose size information is to be retrieved
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005181 * @param userId The user whose size information should be retrieved.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005182 * @param observer An observer callback to get notified when the operation
5183 * is complete.
5184 * {@link android.content.pm.IPackageStatsObserver#onGetStatsCompleted(PackageStats, boolean)}
5185 * The observer's callback is invoked with a PackageStats object(containing the
5186 * code, data and cache sizes of the package) and a boolean value representing
5187 * the status of the operation. observer may be null to indicate that
5188 * no callback is desired.
5189 *
5190 * @hide
5191 */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07005192 public abstract void getPackageSizeInfoAsUser(String packageName, @UserIdInt int userId,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005193 IPackageStatsObserver observer);
5194
5195 /**
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005196 * Like {@link #getPackageSizeInfoAsUser(String, int, IPackageStatsObserver)}, but
Dianne Hackborn0c380492012-08-20 17:23:30 -07005197 * returns the size for the calling user.
5198 *
5199 * @hide
5200 */
5201 public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) {
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005202 getPackageSizeInfoAsUser(packageName, UserHandle.myUserId(), observer);
Dianne Hackborn0c380492012-08-20 17:23:30 -07005203 }
5204
5205 /**
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005206 * @deprecated This function no longer does anything; it was an old
kmccormickac66b852013-03-28 15:17:15 -07005207 * approach to managing preferred activities, which has been superseded
5208 * by (and conflicts with) the modern activity-based preferences.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005209 */
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005210 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005211 public abstract void addPackageToPreferred(String packageName);
5212
5213 /**
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005214 * @deprecated This function no longer does anything; it was an old
kmccormickac66b852013-03-28 15:17:15 -07005215 * approach to managing preferred activities, which has been superseded
5216 * by (and conflicts with) the modern activity-based preferences.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005217 */
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005218 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005219 public abstract void removePackageFromPreferred(String packageName);
5220
5221 /**
Jeff Sharkey629f9842016-01-08 16:36:54 -07005222 * Retrieve the list of all currently configured preferred packages. The
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005223 * first package on the list is the most preferred, the last is the
5224 * least preferred.
5225 *
5226 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005227 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
5228 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
5229 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
5230 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
5231 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
5232 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
5233 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
5234 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
5235 * {@link #MATCH_UNINSTALLED_PACKAGES}
5236 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005237 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005238 * @return A List of PackageInfo objects, one for each preferred application,
5239 * in order of preference.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005240 *
5241 * @see #GET_ACTIVITIES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005242 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005243 * @see #GET_GIDS
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005244 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005245 * @see #GET_INTENT_FILTERS
5246 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005247 * @see #GET_PERMISSIONS
5248 * @see #GET_PROVIDERS
5249 * @see #GET_RECEIVERS
5250 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005251 * @see #GET_SHARED_LIBRARY_FILES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005252 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005253 * @see #GET_URI_PERMISSION_PATTERNS
5254 * @see #MATCH_DISABLED_COMPONENTS
5255 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
5256 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005257 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07005258 public abstract List<PackageInfo> getPreferredPackages(@PackageInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005259
5260 /**
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005261 * @deprecated This is a protected API that should not have been available
5262 * to third party applications. It is the platform's responsibility for
kmccormick30498b42013-03-27 17:39:17 -07005263 * assigning preferred activities and this cannot be directly modified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005264 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005265 * Add a new preferred activity mapping to the system. This will be used
5266 * to automatically select the given activity component when
5267 * {@link Context#startActivity(Intent) Context.startActivity()} finds
5268 * multiple matching activities and also matches the given filter.
5269 *
5270 * @param filter The set of intents under which this activity will be
5271 * made preferred.
5272 * @param match The IntentFilter match category that this preference
5273 * applies to.
5274 * @param set The set of activities that the user was picking from when
5275 * this preference was made.
5276 * @param activity The component name of the activity that is to be
5277 * preferred.
5278 */
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005279 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005280 public abstract void addPreferredActivity(IntentFilter filter, int match,
5281 ComponentName[] set, ComponentName activity);
5282
5283 /**
Amith Yamasania3f133a2012-08-09 17:11:28 -07005284 * Same as {@link #addPreferredActivity(IntentFilter, int,
5285 ComponentName[], ComponentName)}, but with a specific userId to apply the preference
5286 to.
5287 * @hide
5288 */
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005289 public void addPreferredActivityAsUser(IntentFilter filter, int match,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07005290 ComponentName[] set, ComponentName activity, @UserIdInt int userId) {
Amith Yamasania3f133a2012-08-09 17:11:28 -07005291 throw new RuntimeException("Not implemented. Must override in a subclass.");
5292 }
5293
5294 /**
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005295 * @deprecated This is a protected API that should not have been available
5296 * to third party applications. It is the platform's responsibility for
kmccormick30498b42013-03-27 17:39:17 -07005297 * assigning preferred activities and this cannot be directly modified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005298 *
Satish Sampath8dbe6122009-06-02 23:35:54 +01005299 * Replaces an existing preferred activity mapping to the system, and if that were not present
5300 * adds a new preferred activity. This will be used
5301 * to automatically select the given activity component when
5302 * {@link Context#startActivity(Intent) Context.startActivity()} finds
5303 * multiple matching activities and also matches the given filter.
5304 *
5305 * @param filter The set of intents under which this activity will be
5306 * made preferred.
5307 * @param match The IntentFilter match category that this preference
5308 * applies to.
5309 * @param set The set of activities that the user was picking from when
5310 * this preference was made.
5311 * @param activity The component name of the activity that is to be
5312 * preferred.
5313 * @hide
5314 */
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005315 @Deprecated
Satish Sampath8dbe6122009-06-02 23:35:54 +01005316 public abstract void replacePreferredActivity(IntentFilter filter, int match,
5317 ComponentName[] set, ComponentName activity);
5318
5319 /**
Amith Yamasani41c1ded2014-08-05 11:15:05 -07005320 * @hide
5321 */
5322 @Deprecated
5323 public void replacePreferredActivityAsUser(IntentFilter filter, int match,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07005324 ComponentName[] set, ComponentName activity, @UserIdInt int userId) {
Amith Yamasani41c1ded2014-08-05 11:15:05 -07005325 throw new RuntimeException("Not implemented. Must override in a subclass.");
5326 }
5327
5328 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005329 * Remove all preferred activity mappings, previously added with
5330 * {@link #addPreferredActivity}, from the
5331 * system whose activities are implemented in the given package name.
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005332 * An application can only clear its own package(s).
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005333 *
5334 * @param packageName The name of the package whose preferred activity
5335 * mappings are to be removed.
5336 */
5337 public abstract void clearPackagePreferredActivities(String packageName);
5338
5339 /**
5340 * Retrieve all preferred activities, previously added with
5341 * {@link #addPreferredActivity}, that are
5342 * currently registered with the system.
5343 *
John Spurlock38e64252015-03-18 12:09:32 -04005344 * @param outFilters A required list in which to place the filters of all of the
5345 * preferred activities.
5346 * @param outActivities A required list in which to place the component names of
5347 * all of the preferred activities.
5348 * @param packageName An optional package in which you would like to limit
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005349 * the list. If null, all activities will be returned; if non-null, only
5350 * those activities in the given package are returned.
5351 *
5352 * @return Returns the total number of registered preferred activities
5353 * (the number of distinct IntentFilter records, not the number of unique
5354 * activity components) that were found.
5355 */
John Spurlock38e64252015-03-18 12:09:32 -04005356 public abstract int getPreferredActivities(@NonNull List<IntentFilter> outFilters,
5357 @NonNull List<ComponentName> outActivities, String packageName);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005358
5359 /**
Christopher Tatea2a0850d2013-09-05 16:38:58 -07005360 * Ask for the set of available 'home' activities and the current explicit
5361 * default, if any.
5362 * @hide
5363 */
5364 public abstract ComponentName getHomeActivities(List<ResolveInfo> outActivities);
5365
5366 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005367 * Set the enabled setting for a package component (activity, receiver, service, provider).
5368 * This setting will override any enabled state which may have been set by the component in its
5369 * manifest.
5370 *
5371 * @param componentName The component to enable
5372 * @param newState The new enabled state for the component. The legal values for this state
5373 * are:
5374 * {@link #COMPONENT_ENABLED_STATE_ENABLED},
5375 * {@link #COMPONENT_ENABLED_STATE_DISABLED}
5376 * and
5377 * {@link #COMPONENT_ENABLED_STATE_DEFAULT}
5378 * The last one removes the setting, thereby restoring the component's state to
5379 * whatever was set in it's manifest (or enabled, by default).
5380 * @param flags Optional behavior flags: {@link #DONT_KILL_APP} or 0.
5381 */
5382 public abstract void setComponentEnabledSetting(ComponentName componentName,
5383 int newState, int flags);
5384
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005385 /**
Amaury Medeirosdde24262014-06-03 20:06:41 -03005386 * Return the enabled setting for a package component (activity,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005387 * receiver, service, provider). This returns the last value set by
5388 * {@link #setComponentEnabledSetting(ComponentName, int, int)}; in most
5389 * cases this value will be {@link #COMPONENT_ENABLED_STATE_DEFAULT} since
5390 * the value originally specified in the manifest has not been modified.
5391 *
5392 * @param componentName The component to retrieve.
5393 * @return Returns the current enabled state for the component. May
5394 * be one of {@link #COMPONENT_ENABLED_STATE_ENABLED},
5395 * {@link #COMPONENT_ENABLED_STATE_DISABLED}, or
5396 * {@link #COMPONENT_ENABLED_STATE_DEFAULT}. The last one means the
5397 * component's enabled state is based on the original information in
5398 * the manifest as found in {@link ComponentInfo}.
5399 */
5400 public abstract int getComponentEnabledSetting(ComponentName componentName);
5401
5402 /**
5403 * Set the enabled setting for an application
5404 * This setting will override any enabled state which may have been set by the application in
5405 * its manifest. It also overrides the enabled state set in the manifest for any of the
5406 * application's components. It does not override any enabled state set by
5407 * {@link #setComponentEnabledSetting} for any of the application's components.
5408 *
5409 * @param packageName The package name of the application to enable
5410 * @param newState The new enabled state for the component. The legal values for this state
5411 * are:
5412 * {@link #COMPONENT_ENABLED_STATE_ENABLED},
5413 * {@link #COMPONENT_ENABLED_STATE_DISABLED}
5414 * and
5415 * {@link #COMPONENT_ENABLED_STATE_DEFAULT}
5416 * The last one removes the setting, thereby restoring the applications's state to
5417 * whatever was set in its manifest (or enabled, by default).
5418 * @param flags Optional behavior flags: {@link #DONT_KILL_APP} or 0.
5419 */
5420 public abstract void setApplicationEnabledSetting(String packageName,
5421 int newState, int flags);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005422
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005423 /**
Amaury Medeirosdde24262014-06-03 20:06:41 -03005424 * Return the enabled setting for an application. This returns
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005425 * the last value set by
5426 * {@link #setApplicationEnabledSetting(String, int, int)}; in most
5427 * cases this value will be {@link #COMPONENT_ENABLED_STATE_DEFAULT} since
5428 * the value originally specified in the manifest has not been modified.
5429 *
Amaury Medeirosdde24262014-06-03 20:06:41 -03005430 * @param packageName The package name of the application to retrieve.
5431 * @return Returns the current enabled state for the application. May
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005432 * be one of {@link #COMPONENT_ENABLED_STATE_ENABLED},
5433 * {@link #COMPONENT_ENABLED_STATE_DISABLED}, or
5434 * {@link #COMPONENT_ENABLED_STATE_DEFAULT}. The last one means the
5435 * application's enabled state is based on the original information in
Kevin Hufnagle5add7692016-08-29 16:50:17 -07005436 * the manifest as found in {@link ApplicationInfo}.
Mathew Inwood1b9f8d92011-09-26 13:23:56 +01005437 * @throws IllegalArgumentException if the named package does not exist.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005438 */
5439 public abstract int getApplicationEnabledSetting(String packageName);
5440
5441 /**
Sudheer Shankabbb3ff22015-07-09 15:39:23 +01005442 * Flush the package restrictions for a given user to disk. This forces the package restrictions
5443 * like component and package enabled settings to be written to disk and avoids the delay that
5444 * is otherwise present when changing those settings.
5445 *
5446 * @param userId Ther userId of the user whose restrictions are to be flushed.
5447 * @hide
5448 */
5449 public abstract void flushPackageRestrictionsAsUser(int userId);
5450
5451 /**
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005452 * Puts the package in a hidden state, which is almost like an uninstalled state,
Amith Yamasani655d0e22013-06-12 14:19:10 -07005453 * making the package unavailable, but it doesn't remove the data or the actual
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005454 * package file. Application can be unhidden by either resetting the hidden state
5455 * or by installing it, such as with {@link #installExistingPackage(String)}
Amith Yamasani655d0e22013-06-12 14:19:10 -07005456 * @hide
5457 */
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005458 public abstract boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden,
Amith Yamasani655d0e22013-06-12 14:19:10 -07005459 UserHandle userHandle);
5460
5461 /**
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005462 * Returns the hidden state of a package.
5463 * @see #setApplicationHiddenSettingAsUser(String, boolean, UserHandle)
Amith Yamasani655d0e22013-06-12 14:19:10 -07005464 * @hide
5465 */
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005466 public abstract boolean getApplicationHiddenSettingAsUser(String packageName,
Amith Yamasani655d0e22013-06-12 14:19:10 -07005467 UserHandle userHandle);
5468
5469 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005470 * Return whether the device has been booted into safe mode.
5471 */
5472 public abstract boolean isSafeMode();
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08005473
5474 /**
Svetoslavf7c06eb2015-06-10 18:43:22 -07005475 * Adds a listener for permission changes for installed packages.
5476 *
5477 * @param listener The listener to add.
5478 *
5479 * @hide
5480 */
5481 @SystemApi
5482 @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS)
5483 public abstract void addOnPermissionsChangeListener(OnPermissionsChangedListener listener);
5484
5485 /**
5486 * Remvoes a listener for permission changes for installed packages.
5487 *
5488 * @param listener The listener to remove.
5489 *
5490 * @hide
5491 */
5492 @SystemApi
5493 public abstract void removeOnPermissionsChangeListener(OnPermissionsChangedListener listener);
5494
5495 /**
dcashman9d2f4412014-06-09 09:27:54 -07005496 * Return the {@link KeySet} associated with the String alias for this
5497 * application.
5498 *
5499 * @param alias The alias for a given {@link KeySet} as defined in the
5500 * application's AndroidManifest.xml.
dcashmanc6f22492014-08-14 09:54:51 -07005501 * @hide
dcashman9d2f4412014-06-09 09:27:54 -07005502 */
5503 public abstract KeySet getKeySetByAlias(String packageName, String alias);
5504
Ihab Awad1ec68882014-09-12 11:09:01 -07005505 /** Return the signing {@link KeySet} for this application.
dcashmanc6f22492014-08-14 09:54:51 -07005506 * @hide
5507 */
dcashman9d2f4412014-06-09 09:27:54 -07005508 public abstract KeySet getSigningKeySet(String packageName);
5509
5510 /**
5511 * Return whether the package denoted by packageName has been signed by all
5512 * of the keys specified by the {@link KeySet} ks. This will return true if
5513 * the package has been signed by additional keys (a superset) as well.
5514 * Compare to {@link #isSignedByExactly(String packageName, KeySet ks)}.
dcashmanc6f22492014-08-14 09:54:51 -07005515 * @hide
dcashman9d2f4412014-06-09 09:27:54 -07005516 */
5517 public abstract boolean isSignedBy(String packageName, KeySet ks);
5518
5519 /**
5520 * Return whether the package denoted by packageName has been signed by all
5521 * of, and only, the keys specified by the {@link KeySet} ks. Compare to
5522 * {@link #isSignedBy(String packageName, KeySet ks)}.
dcashmanc6f22492014-08-14 09:54:51 -07005523 * @hide
dcashman9d2f4412014-06-09 09:27:54 -07005524 */
5525 public abstract boolean isSignedByExactly(String packageName, KeySet ks);
5526
5527 /**
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005528 * Puts the package in a suspended state, where attempts at starting activities are denied.
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005529 *
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005530 * <p>It doesn't remove the data or the actual package file. The application notifications
5531 * will be hidden, the application will not show up in recents, will not be able to show
5532 * toasts or dialogs or ring the device.
5533 *
Kenny Guy871f3eb2016-03-09 20:06:16 +00005534 * <p>The package must already be installed. If the package is uninstalled while suspended
5535 * the package will no longer be suspended.
5536 *
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005537 * @param packageNames The names of the packages to set the suspended status.
5538 * @param suspended If set to {@code true} than the packages will be suspended, if set to
5539 * {@code false} the packages will be unsuspended.
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005540 * @param userId The user id.
5541 *
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005542 * @return an array of package names for which the suspended status is not set as requested in
5543 * this method.
5544 *
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005545 * @hide
5546 */
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005547 public abstract String[] setPackagesSuspendedAsUser(
5548 String[] packageNames, boolean suspended, @UserIdInt int userId);
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005549
Andrei Stingaceanu355b2322016-02-12 16:43:51 +00005550 /**
5551 * @see #setPackageSuspendedAsUser(String, boolean, int)
5552 * @param packageName The name of the package to get the suspended status of.
5553 * @param userId The user id.
5554 * @return {@code true} if the package is suspended or {@code false} if the package is not
5555 * suspended or could not be found.
5556 * @hide
5557 */
5558 public abstract boolean isPackageSuspendedForUser(String packageName, int userId);
5559
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -07005560 /** {@hide} */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005561 public static boolean isMoveStatusFinished(int status) {
5562 return (status < 0 || status > 100);
5563 }
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005564
Jeff Sharkeye2d45be2015-04-15 17:14:12 -07005565 /** {@hide} */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005566 public static abstract class MoveCallback {
Jeff Sharkey50a05452015-04-29 11:24:52 -07005567 public void onCreated(int moveId, Bundle extras) {}
5568 public abstract void onStatusChanged(int moveId, int status, long estMillis);
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005569 }
Jeff Sharkeye2d45be2015-04-15 17:14:12 -07005570
5571 /** {@hide} */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005572 public abstract int getMoveStatus(int moveId);
5573
5574 /** {@hide} */
5575 public abstract void registerMoveCallback(MoveCallback callback, Handler handler);
5576 /** {@hide} */
5577 public abstract void unregisterMoveCallback(MoveCallback callback);
5578
5579 /** {@hide} */
5580 public abstract int movePackage(String packageName, VolumeInfo vol);
5581 /** {@hide} */
5582 public abstract @Nullable VolumeInfo getPackageCurrentVolume(ApplicationInfo app);
5583 /** {@hide} */
5584 public abstract @NonNull List<VolumeInfo> getPackageCandidateVolumes(ApplicationInfo app);
5585
5586 /** {@hide} */
5587 public abstract int movePrimaryStorage(VolumeInfo vol);
5588 /** {@hide} */
5589 public abstract @Nullable VolumeInfo getPrimaryStorageCurrentVolume();
5590 /** {@hide} */
5591 public abstract @NonNull List<VolumeInfo> getPrimaryStorageCandidateVolumes();
Jeff Sharkeye2d45be2015-04-15 17:14:12 -07005592
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005593 /**
Amith Yamasani13593602012-03-22 16:16:17 -07005594 * Returns the device identity that verifiers can use to associate their scheme to a particular
5595 * device. This should not be used by anything other than a package verifier.
Aravind Akella068b0c02013-10-12 17:39:15 -07005596 *
Kenny Root0aaa0d92011-09-12 16:42:55 -07005597 * @return identity that uniquely identifies current device
5598 * @hide
5599 */
5600 public abstract VerifierDeviceIdentity getVerifierDeviceIdentity();
Amith Yamasani742a6712011-05-04 14:49:28 -07005601
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005602 /**
Jeff Hao9f60c082014-10-28 18:51:07 -07005603 * Returns true if the device is upgrading, such as first boot after OTA.
5604 *
5605 * @hide
5606 */
5607 public abstract boolean isUpgrade();
5608
5609 /**
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005610 * Return interface that offers the ability to install, upgrade, and remove
5611 * applications on the device.
5612 */
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005613 public abstract @NonNull PackageInstaller getPackageInstaller();
Jeff Sharkey3a44f3f2014-04-28 17:36:31 -07005614
Amith Yamasani742a6712011-05-04 14:49:28 -07005615 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005616 * Adds a {@code CrossProfileIntentFilter}. After calling this method all
5617 * intents sent from the user with id sourceUserId can also be be resolved
5618 * by activities in the user with id targetUserId if they match the
5619 * specified intent filter.
5620 *
Nicolas Prevot3f7777f2014-07-24 15:58:39 +01005621 * @param filter The {@link IntentFilter} the intent has to match
5622 * @param sourceUserId The source user id.
5623 * @param targetUserId The target user id.
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005624 * @param flags The possible values are {@link #SKIP_CURRENT_PROFILE} and
5625 * {@link #ONLY_IF_NO_MATCH_FOUND}.
Nicolas Prevotc79586e2014-05-06 12:47:57 +01005626 * @hide
5627 */
Nicolas Prevot63798c52014-05-27 13:22:38 +01005628 public abstract void addCrossProfileIntentFilter(IntentFilter filter, int sourceUserId,
5629 int targetUserId, int flags);
Nicolas Prevotc79586e2014-05-06 12:47:57 +01005630
5631 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005632 * Clearing {@code CrossProfileIntentFilter}s which have the specified user
5633 * as their source, and have been set by the app calling this method.
5634 *
Nicolas Prevot3f7777f2014-07-24 15:58:39 +01005635 * @param sourceUserId The source user id.
Nicolas Prevotc79586e2014-05-06 12:47:57 +01005636 * @hide
5637 */
Nicolas Prevot81948992014-05-16 18:25:26 +01005638 public abstract void clearCrossProfileIntentFilters(int sourceUserId);
Alexandra Gherghina6e2ae252014-06-12 16:03:58 +01005639
5640 /**
Nicolas Prevot88cc3462014-05-14 14:51:48 +01005641 * @hide
5642 */
Nicolas Prevot7f7b0c72014-06-23 15:59:38 +01005643 public abstract Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo);
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005644
Benjamin Franzec2d48b2014-10-01 15:38:43 +01005645 /**
5646 * @hide
5647 */
5648 public abstract Drawable loadUnbadgedItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo);
5649
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005650 /** {@hide} */
5651 public abstract boolean isPackageAvailable(String packageName);
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005652
5653 /** {@hide} */
Jeff Sharkeya0907432014-08-15 10:23:11 -07005654 public static String installStatusToString(int status, String msg) {
5655 final String str = installStatusToString(status);
5656 if (msg != null) {
5657 return str + ": " + msg;
5658 } else {
5659 return str;
5660 }
5661 }
5662
5663 /** {@hide} */
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005664 public static String installStatusToString(int status) {
5665 switch (status) {
5666 case INSTALL_SUCCEEDED: return "INSTALL_SUCCEEDED";
5667 case INSTALL_FAILED_ALREADY_EXISTS: return "INSTALL_FAILED_ALREADY_EXISTS";
5668 case INSTALL_FAILED_INVALID_APK: return "INSTALL_FAILED_INVALID_APK";
5669 case INSTALL_FAILED_INVALID_URI: return "INSTALL_FAILED_INVALID_URI";
5670 case INSTALL_FAILED_INSUFFICIENT_STORAGE: return "INSTALL_FAILED_INSUFFICIENT_STORAGE";
5671 case INSTALL_FAILED_DUPLICATE_PACKAGE: return "INSTALL_FAILED_DUPLICATE_PACKAGE";
5672 case INSTALL_FAILED_NO_SHARED_USER: return "INSTALL_FAILED_NO_SHARED_USER";
5673 case INSTALL_FAILED_UPDATE_INCOMPATIBLE: return "INSTALL_FAILED_UPDATE_INCOMPATIBLE";
5674 case INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: return "INSTALL_FAILED_SHARED_USER_INCOMPATIBLE";
5675 case INSTALL_FAILED_MISSING_SHARED_LIBRARY: return "INSTALL_FAILED_MISSING_SHARED_LIBRARY";
5676 case INSTALL_FAILED_REPLACE_COULDNT_DELETE: return "INSTALL_FAILED_REPLACE_COULDNT_DELETE";
5677 case INSTALL_FAILED_DEXOPT: return "INSTALL_FAILED_DEXOPT";
5678 case INSTALL_FAILED_OLDER_SDK: return "INSTALL_FAILED_OLDER_SDK";
5679 case INSTALL_FAILED_CONFLICTING_PROVIDER: return "INSTALL_FAILED_CONFLICTING_PROVIDER";
5680 case INSTALL_FAILED_NEWER_SDK: return "INSTALL_FAILED_NEWER_SDK";
5681 case INSTALL_FAILED_TEST_ONLY: return "INSTALL_FAILED_TEST_ONLY";
5682 case INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: return "INSTALL_FAILED_CPU_ABI_INCOMPATIBLE";
5683 case INSTALL_FAILED_MISSING_FEATURE: return "INSTALL_FAILED_MISSING_FEATURE";
5684 case INSTALL_FAILED_CONTAINER_ERROR: return "INSTALL_FAILED_CONTAINER_ERROR";
5685 case INSTALL_FAILED_INVALID_INSTALL_LOCATION: return "INSTALL_FAILED_INVALID_INSTALL_LOCATION";
5686 case INSTALL_FAILED_MEDIA_UNAVAILABLE: return "INSTALL_FAILED_MEDIA_UNAVAILABLE";
5687 case INSTALL_FAILED_VERIFICATION_TIMEOUT: return "INSTALL_FAILED_VERIFICATION_TIMEOUT";
5688 case INSTALL_FAILED_VERIFICATION_FAILURE: return "INSTALL_FAILED_VERIFICATION_FAILURE";
5689 case INSTALL_FAILED_PACKAGE_CHANGED: return "INSTALL_FAILED_PACKAGE_CHANGED";
5690 case INSTALL_FAILED_UID_CHANGED: return "INSTALL_FAILED_UID_CHANGED";
5691 case INSTALL_FAILED_VERSION_DOWNGRADE: return "INSTALL_FAILED_VERSION_DOWNGRADE";
5692 case INSTALL_PARSE_FAILED_NOT_APK: return "INSTALL_PARSE_FAILED_NOT_APK";
5693 case INSTALL_PARSE_FAILED_BAD_MANIFEST: return "INSTALL_PARSE_FAILED_BAD_MANIFEST";
5694 case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return "INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION";
5695 case INSTALL_PARSE_FAILED_NO_CERTIFICATES: return "INSTALL_PARSE_FAILED_NO_CERTIFICATES";
5696 case INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES: return "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES";
5697 case INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING: return "INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING";
5698 case INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME: return "INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME";
5699 case INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: return "INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID";
5700 case INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: return "INSTALL_PARSE_FAILED_MANIFEST_MALFORMED";
5701 case INSTALL_PARSE_FAILED_MANIFEST_EMPTY: return "INSTALL_PARSE_FAILED_MANIFEST_EMPTY";
5702 case INSTALL_FAILED_INTERNAL_ERROR: return "INSTALL_FAILED_INTERNAL_ERROR";
5703 case INSTALL_FAILED_USER_RESTRICTED: return "INSTALL_FAILED_USER_RESTRICTED";
5704 case INSTALL_FAILED_DUPLICATE_PERMISSION: return "INSTALL_FAILED_DUPLICATE_PERMISSION";
5705 case INSTALL_FAILED_NO_MATCHING_ABIS: return "INSTALL_FAILED_NO_MATCHING_ABIS";
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005706 case INSTALL_FAILED_ABORTED: return "INSTALL_FAILED_ABORTED";
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005707 default: return Integer.toString(status);
5708 }
5709 }
5710
5711 /** {@hide} */
Jeff Sharkeya0907432014-08-15 10:23:11 -07005712 public static int installStatusToPublicStatus(int status) {
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005713 switch (status) {
Jeff Sharkeya0907432014-08-15 10:23:11 -07005714 case INSTALL_SUCCEEDED: return PackageInstaller.STATUS_SUCCESS;
5715 case INSTALL_FAILED_ALREADY_EXISTS: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5716 case INSTALL_FAILED_INVALID_APK: return PackageInstaller.STATUS_FAILURE_INVALID;
5717 case INSTALL_FAILED_INVALID_URI: return PackageInstaller.STATUS_FAILURE_INVALID;
5718 case INSTALL_FAILED_INSUFFICIENT_STORAGE: return PackageInstaller.STATUS_FAILURE_STORAGE;
5719 case INSTALL_FAILED_DUPLICATE_PACKAGE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5720 case INSTALL_FAILED_NO_SHARED_USER: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5721 case INSTALL_FAILED_UPDATE_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5722 case INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5723 case INSTALL_FAILED_MISSING_SHARED_LIBRARY: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5724 case INSTALL_FAILED_REPLACE_COULDNT_DELETE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5725 case INSTALL_FAILED_DEXOPT: return PackageInstaller.STATUS_FAILURE_INVALID;
5726 case INSTALL_FAILED_OLDER_SDK: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5727 case INSTALL_FAILED_CONFLICTING_PROVIDER: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5728 case INSTALL_FAILED_NEWER_SDK: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5729 case INSTALL_FAILED_TEST_ONLY: return PackageInstaller.STATUS_FAILURE_INVALID;
5730 case INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5731 case INSTALL_FAILED_MISSING_FEATURE: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5732 case INSTALL_FAILED_CONTAINER_ERROR: return PackageInstaller.STATUS_FAILURE_STORAGE;
5733 case INSTALL_FAILED_INVALID_INSTALL_LOCATION: return PackageInstaller.STATUS_FAILURE_STORAGE;
5734 case INSTALL_FAILED_MEDIA_UNAVAILABLE: return PackageInstaller.STATUS_FAILURE_STORAGE;
5735 case INSTALL_FAILED_VERIFICATION_TIMEOUT: return PackageInstaller.STATUS_FAILURE_ABORTED;
5736 case INSTALL_FAILED_VERIFICATION_FAILURE: return PackageInstaller.STATUS_FAILURE_ABORTED;
5737 case INSTALL_FAILED_PACKAGE_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID;
5738 case INSTALL_FAILED_UID_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID;
5739 case INSTALL_FAILED_VERSION_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID;
Svetoslavd9653702015-05-13 18:02:46 -07005740 case INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID;
Jeff Sharkeya0907432014-08-15 10:23:11 -07005741 case INSTALL_PARSE_FAILED_NOT_APK: return PackageInstaller.STATUS_FAILURE_INVALID;
5742 case INSTALL_PARSE_FAILED_BAD_MANIFEST: return PackageInstaller.STATUS_FAILURE_INVALID;
5743 case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return PackageInstaller.STATUS_FAILURE_INVALID;
5744 case INSTALL_PARSE_FAILED_NO_CERTIFICATES: return PackageInstaller.STATUS_FAILURE_INVALID;
5745 case INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES: return PackageInstaller.STATUS_FAILURE_INVALID;
5746 case INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING: return PackageInstaller.STATUS_FAILURE_INVALID;
5747 case INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME: return PackageInstaller.STATUS_FAILURE_INVALID;
5748 case INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: return PackageInstaller.STATUS_FAILURE_INVALID;
5749 case INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: return PackageInstaller.STATUS_FAILURE_INVALID;
5750 case INSTALL_PARSE_FAILED_MANIFEST_EMPTY: return PackageInstaller.STATUS_FAILURE_INVALID;
5751 case INSTALL_FAILED_INTERNAL_ERROR: return PackageInstaller.STATUS_FAILURE;
5752 case INSTALL_FAILED_USER_RESTRICTED: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5753 case INSTALL_FAILED_DUPLICATE_PERMISSION: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5754 case INSTALL_FAILED_NO_MATCHING_ABIS: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5755 case INSTALL_FAILED_ABORTED: return PackageInstaller.STATUS_FAILURE_ABORTED;
5756 default: return PackageInstaller.STATUS_FAILURE;
5757 }
5758 }
5759
5760 /** {@hide} */
5761 public static String deleteStatusToString(int status, String msg) {
5762 final String str = deleteStatusToString(status);
5763 if (msg != null) {
5764 return str + ": " + msg;
5765 } else {
5766 return str;
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005767 }
5768 }
5769
5770 /** {@hide} */
5771 public static String deleteStatusToString(int status) {
5772 switch (status) {
5773 case DELETE_SUCCEEDED: return "DELETE_SUCCEEDED";
5774 case DELETE_FAILED_INTERNAL_ERROR: return "DELETE_FAILED_INTERNAL_ERROR";
5775 case DELETE_FAILED_DEVICE_POLICY_MANAGER: return "DELETE_FAILED_DEVICE_POLICY_MANAGER";
5776 case DELETE_FAILED_USER_RESTRICTED: return "DELETE_FAILED_USER_RESTRICTED";
5777 case DELETE_FAILED_OWNER_BLOCKED: return "DELETE_FAILED_OWNER_BLOCKED";
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005778 case DELETE_FAILED_ABORTED: return "DELETE_FAILED_ABORTED";
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005779 default: return Integer.toString(status);
5780 }
5781 }
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005782
5783 /** {@hide} */
Jeff Sharkeya0907432014-08-15 10:23:11 -07005784 public static int deleteStatusToPublicStatus(int status) {
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005785 switch (status) {
Jeff Sharkeya0907432014-08-15 10:23:11 -07005786 case DELETE_SUCCEEDED: return PackageInstaller.STATUS_SUCCESS;
5787 case DELETE_FAILED_INTERNAL_ERROR: return PackageInstaller.STATUS_FAILURE;
5788 case DELETE_FAILED_DEVICE_POLICY_MANAGER: return PackageInstaller.STATUS_FAILURE_BLOCKED;
5789 case DELETE_FAILED_USER_RESTRICTED: return PackageInstaller.STATUS_FAILURE_BLOCKED;
5790 case DELETE_FAILED_OWNER_BLOCKED: return PackageInstaller.STATUS_FAILURE_BLOCKED;
5791 case DELETE_FAILED_ABORTED: return PackageInstaller.STATUS_FAILURE_ABORTED;
5792 default: return PackageInstaller.STATUS_FAILURE;
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005793 }
5794 }
Jeff Sharkey6c0b9da2014-08-07 22:07:11 -07005795
5796 /** {@hide} */
Svet Ganov77ab6a82015-07-03 12:03:02 -07005797 public static String permissionFlagToString(int flag) {
5798 switch (flag) {
Svetoslav4a5f4a22015-07-07 18:18:15 -07005799 case FLAG_PERMISSION_GRANTED_BY_DEFAULT: return "GRANTED_BY_DEFAULT";
5800 case FLAG_PERMISSION_POLICY_FIXED: return "POLICY_FIXED";
5801 case FLAG_PERMISSION_SYSTEM_FIXED: return "SYSTEM_FIXED";
5802 case FLAG_PERMISSION_USER_SET: return "USER_SET";
5803 case FLAG_PERMISSION_REVOKE_ON_UPGRADE: return "REVOKE_ON_UPGRADE";
5804 case FLAG_PERMISSION_USER_FIXED: return "USER_FIXED";
Svet Ganov9c165d72015-12-01 19:52:26 -08005805 case FLAG_PERMISSION_REVIEW_REQUIRED: return "REVIEW_REQUIRED";
Svet Ganov77ab6a82015-07-03 12:03:02 -07005806 default: return Integer.toString(flag);
5807 }
5808 }
5809
5810 /** {@hide} */
Jeff Sharkey6c0b9da2014-08-07 22:07:11 -07005811 public static class LegacyPackageInstallObserver extends PackageInstallObserver {
5812 private final IPackageInstallObserver mLegacy;
5813
5814 public LegacyPackageInstallObserver(IPackageInstallObserver legacy) {
5815 mLegacy = legacy;
5816 }
5817
5818 @Override
5819 public void onPackageInstalled(String basePackageName, int returnCode, String msg,
5820 Bundle extras) {
5821 if (mLegacy == null) return;
5822 try {
5823 mLegacy.packageInstalled(basePackageName, returnCode);
5824 } catch (RemoteException ignored) {
5825 }
5826 }
5827 }
5828
5829 /** {@hide} */
5830 public static class LegacyPackageDeleteObserver extends PackageDeleteObserver {
5831 private final IPackageDeleteObserver mLegacy;
5832
5833 public LegacyPackageDeleteObserver(IPackageDeleteObserver legacy) {
5834 mLegacy = legacy;
5835 }
5836
5837 @Override
5838 public void onPackageDeleted(String basePackageName, int returnCode, String msg) {
5839 if (mLegacy == null) return;
5840 try {
5841 mLegacy.packageDeleted(basePackageName, returnCode);
5842 } catch (RemoteException ignored) {
5843 }
5844 }
5845 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005846}