blob: ac4751f8f56769726b41662bad5c9b0212330f4c [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 /**
Paul Navin7b89a7b2017-01-26 23:56:08 +00002829 * Returns true if Permission Review Mode is enabled, false otherwise.
2830 *
2831 * @hide
2832 */
2833 @TestApi
2834 public abstract boolean isPermissionReviewModeEnabled();
2835
2836 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002837 * Retrieve all of the information we know about a particular group of
2838 * permissions.
2839 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002840 * @param name The fully qualified name (i.e. com.google.permission_group.APPS)
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002841 * of the permission you are interested in.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002842 * @param flags Additional option flags. Use {@link #GET_META_DATA} to
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002843 * retrieve any meta-data associated with the permission group.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002844 *
2845 * @return Returns a {@link PermissionGroupInfo} containing information
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002846 * about the permission.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002847 * @throws NameNotFoundException if a package with the given name cannot be
2848 * found on the system.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002849 *
2850 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002851 */
2852 public abstract PermissionGroupInfo getPermissionGroupInfo(String name,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002853 @PermissionGroupInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002854
2855 /**
2856 * Retrieve all of the known permission groups in the system.
2857 *
2858 * @param flags Additional option flags. Use {@link #GET_META_DATA} to
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002859 * retrieve any meta-data associated with the permission group.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002860 *
2861 * @return Returns a list of {@link PermissionGroupInfo} containing
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002862 * information about all of the known permission groups.
2863 *
2864 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002865 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002866 public abstract List<PermissionGroupInfo> getAllPermissionGroups(
2867 @PermissionGroupInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002868
2869 /**
2870 * Retrieve all of the information we know about a particular
2871 * package/application.
2872 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002873 * @param packageName The full name (i.e. com.google.apps.contacts) of an
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002874 * application.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002875 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002876 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
2877 * {@link #MATCH_SYSTEM_ONLY}, {@link #MATCH_UNINSTALLED_PACKAGES}
2878 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002879 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002880 * @return An {@link ApplicationInfo} containing information about the
2881 * package. If flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the
2882 * package is not found in the list of installed applications, the
2883 * application information is retrieved from the list of uninstalled
2884 * applications (which includes installed applications as well as
2885 * applications with data directory i.e. applications which had been
kmccormick30498b42013-03-27 17:39:17 -07002886 * deleted with {@code DONT_DELETE_DATA} flag set).
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002887 * @throws NameNotFoundException if a package with the given name cannot be
2888 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002889 *
2890 * @see #GET_META_DATA
2891 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy5a32c6c2016-07-07 14:29:06 -07002892 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002893 * @see #MATCH_SYSTEM_ONLY
2894 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002895 */
2896 public abstract ApplicationInfo getApplicationInfo(String packageName,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002897 @ApplicationInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002898
Jeff Sharkeycd654482016-01-08 17:42:11 -07002899 /** {@hide} */
2900 public abstract ApplicationInfo getApplicationInfoAsUser(String packageName,
2901 @ApplicationInfoFlags int flags, @UserIdInt int userId) throws NameNotFoundException;
2902
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002903 /**
2904 * Retrieve all of the information we know about a particular activity
2905 * class.
2906 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07002907 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002908 * com.google.apps.contacts/com.google.apps.contacts.
2909 * ContactsList) of an Activity class.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002910 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002911 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
2912 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
2913 * {@link #MATCH_DISABLED_COMPONENTS},
2914 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
2915 * {@link #MATCH_DIRECT_BOOT_AWARE},
2916 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
2917 * {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
2918 * returned.
2919 * @return An {@link ActivityInfo} containing information about the
2920 * activity.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002921 * @throws NameNotFoundException if a package with the given name cannot be
2922 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002923 * @see #GET_META_DATA
2924 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002925 * @see #MATCH_ALL
2926 * @see #MATCH_DEBUG_TRIAGED_MISSING
2927 * @see #MATCH_DEFAULT_ONLY
2928 * @see #MATCH_DISABLED_COMPONENTS
2929 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002930 * @see #MATCH_DIRECT_BOOT_AWARE
2931 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002932 * @see #MATCH_SYSTEM_ONLY
2933 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002934 */
Dianne Hackborn361199b2010-08-30 17:42:07 -07002935 public abstract ActivityInfo getActivityInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002936 @ComponentInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002937
2938 /**
2939 * Retrieve all of the information we know about a particular receiver
2940 * class.
2941 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07002942 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002943 * com.google.apps.calendar/com.google.apps.calendar.
2944 * CalendarAlarm) of a Receiver class.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002945 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002946 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
2947 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
2948 * {@link #MATCH_DISABLED_COMPONENTS},
2949 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
2950 * {@link #MATCH_DIRECT_BOOT_AWARE},
2951 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
2952 * {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
2953 * returned.
2954 * @return An {@link ActivityInfo} containing information about the
2955 * receiver.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002956 * @throws NameNotFoundException if a package with the given name cannot be
2957 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002958 * @see #GET_META_DATA
2959 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002960 * @see #MATCH_ALL
2961 * @see #MATCH_DEBUG_TRIAGED_MISSING
2962 * @see #MATCH_DEFAULT_ONLY
2963 * @see #MATCH_DISABLED_COMPONENTS
2964 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002965 * @see #MATCH_DIRECT_BOOT_AWARE
2966 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002967 * @see #MATCH_SYSTEM_ONLY
2968 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002969 */
Dianne Hackborn361199b2010-08-30 17:42:07 -07002970 public abstract ActivityInfo getReceiverInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002971 @ComponentInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002972
2973 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002974 * Retrieve all of the information we know about a particular service class.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002975 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07002976 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002977 * com.google.apps.media/com.google.apps.media.
2978 * BackgroundPlayback) of a Service class.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002979 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002980 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
2981 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
2982 * {@link #MATCH_DISABLED_COMPONENTS},
2983 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
2984 * {@link #MATCH_DIRECT_BOOT_AWARE},
2985 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
2986 * {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
2987 * returned.
2988 * @return A {@link ServiceInfo} object containing information about the
2989 * service.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002990 * @throws NameNotFoundException if a package with the given name cannot be
2991 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002992 * @see #GET_META_DATA
2993 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08002994 * @see #MATCH_ALL
2995 * @see #MATCH_DEBUG_TRIAGED_MISSING
2996 * @see #MATCH_DEFAULT_ONLY
2997 * @see #MATCH_DISABLED_COMPONENTS
2998 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06002999 * @see #MATCH_DIRECT_BOOT_AWARE
3000 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003001 * @see #MATCH_SYSTEM_ONLY
3002 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003003 */
Dianne Hackborn361199b2010-08-30 17:42:07 -07003004 public abstract ServiceInfo getServiceInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003005 @ComponentInfoFlags int flags) throws NameNotFoundException;
Dianne Hackborn361199b2010-08-30 17:42:07 -07003006
3007 /**
3008 * Retrieve all of the information we know about a particular content
3009 * provider class.
3010 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07003011 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003012 * com.google.providers.media/com.google.providers.media.
3013 * MediaProvider) of a ContentProvider class.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003014 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003015 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
3016 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
3017 * {@link #MATCH_DISABLED_COMPONENTS},
3018 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3019 * {@link #MATCH_DIRECT_BOOT_AWARE},
3020 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3021 * {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3022 * returned.
3023 * @return A {@link ProviderInfo} object containing information about the
3024 * provider.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003025 * @throws NameNotFoundException if a package with the given name cannot be
3026 * found on the system.
Dianne Hackborn361199b2010-08-30 17:42:07 -07003027 * @see #GET_META_DATA
3028 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003029 * @see #MATCH_ALL
3030 * @see #MATCH_DEBUG_TRIAGED_MISSING
3031 * @see #MATCH_DEFAULT_ONLY
3032 * @see #MATCH_DISABLED_COMPONENTS
3033 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003034 * @see #MATCH_DIRECT_BOOT_AWARE
3035 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003036 * @see #MATCH_SYSTEM_ONLY
3037 * @see #MATCH_UNINSTALLED_PACKAGES
Dianne Hackborn361199b2010-08-30 17:42:07 -07003038 */
3039 public abstract ProviderInfo getProviderInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003040 @ComponentInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003041
3042 /**
3043 * Return a List of all packages that are installed
3044 * on the device.
3045 *
3046 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003047 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
3048 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
3049 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
3050 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
3051 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
3052 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
3053 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
3054 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3055 * {@link #MATCH_UNINSTALLED_PACKAGES}
3056 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003057 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003058 * @return A List of PackageInfo objects, one for each installed package,
3059 * containing information about the package. In the unlikely case
3060 * there are no installed packages, an empty list is returned. If
3061 * flag {@code MATCH_UNINSTALLED_PACKAGES} is set, the package
3062 * information is retrieved from the list of uninstalled
3063 * applications (which includes installed applications as well as
3064 * applications with data directory i.e. applications which had been
3065 * deleted with {@code DONT_DELETE_DATA} flag set).
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003066 *
3067 * @see #GET_ACTIVITIES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003068 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003069 * @see #GET_GIDS
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003070 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003071 * @see #GET_INTENT_FILTERS
3072 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003073 * @see #GET_PERMISSIONS
3074 * @see #GET_PROVIDERS
3075 * @see #GET_RECEIVERS
3076 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003077 * @see #GET_SHARED_LIBRARY_FILES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003078 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003079 * @see #GET_URI_PERMISSION_PATTERNS
3080 * @see #MATCH_DISABLED_COMPONENTS
3081 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3082 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003083 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003084 public abstract List<PackageInfo> getInstalledPackages(@PackageInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003085
3086 /**
Dianne Hackborne7991752013-01-16 17:56:46 -08003087 * Return a List of all installed packages that are currently
3088 * holding any of the given permissions.
3089 *
3090 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003091 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
3092 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
3093 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
3094 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
3095 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
3096 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
3097 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
3098 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3099 * {@link #MATCH_UNINSTALLED_PACKAGES}
3100 * to modify the data returned.
Dianne Hackborne7991752013-01-16 17:56:46 -08003101 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003102 * @return A List of PackageInfo objects, one for each installed package
3103 * that holds any of the permissions that were provided, containing
3104 * information about the package. If no installed packages hold any
3105 * of the permissions, an empty list is returned. If flag
3106 * {@code MATCH_UNINSTALLED_PACKAGES} is set, the package information
3107 * is retrieved from the list of uninstalled applications (which
3108 * includes installed applications as well as applications with data
3109 * directory i.e. applications which had been deleted with
3110 * {@code DONT_DELETE_DATA} flag set).
Dianne Hackborne7991752013-01-16 17:56:46 -08003111 *
3112 * @see #GET_ACTIVITIES
Dianne Hackborne7991752013-01-16 17:56:46 -08003113 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003114 * @see #GET_GIDS
Dianne Hackborne7991752013-01-16 17:56:46 -08003115 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003116 * @see #GET_INTENT_FILTERS
3117 * @see #GET_META_DATA
Dianne Hackborne7991752013-01-16 17:56:46 -08003118 * @see #GET_PERMISSIONS
3119 * @see #GET_PROVIDERS
3120 * @see #GET_RECEIVERS
3121 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003122 * @see #GET_SHARED_LIBRARY_FILES
Dianne Hackborne7991752013-01-16 17:56:46 -08003123 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003124 * @see #GET_URI_PERMISSION_PATTERNS
3125 * @see #MATCH_DISABLED_COMPONENTS
3126 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3127 * @see #MATCH_UNINSTALLED_PACKAGES
Dianne Hackborne7991752013-01-16 17:56:46 -08003128 */
3129 public abstract List<PackageInfo> getPackagesHoldingPermissions(
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003130 String[] permissions, @PackageInfoFlags int flags);
Dianne Hackborne7991752013-01-16 17:56:46 -08003131
3132 /**
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003133 * Return a List of all packages that are installed on the device, for a specific user.
3134 * Requesting a list of installed packages for another user
3135 * will require the permission INTERACT_ACROSS_USERS_FULL.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003136 *
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003137 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003138 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
3139 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
3140 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
3141 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
3142 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
3143 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
3144 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
3145 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3146 * {@link #MATCH_UNINSTALLED_PACKAGES}
3147 * to modify the data returned.
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003148 * @param userId The user for whom the installed packages are to be listed
3149 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003150 * @return A List of PackageInfo objects, one for each installed package,
3151 * containing information about the package. In the unlikely case
3152 * there are no installed packages, an empty list is returned. If
3153 * flag {@code MATCH_UNINSTALLED_PACKAGES} is set, the package
3154 * information is retrieved from the list of uninstalled
3155 * applications (which includes installed applications as well as
3156 * applications with data directory i.e. applications which had been
3157 * deleted with {@code DONT_DELETE_DATA} flag set).
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003158 *
3159 * @see #GET_ACTIVITIES
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003160 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003161 * @see #GET_GIDS
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003162 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003163 * @see #GET_INTENT_FILTERS
3164 * @see #GET_META_DATA
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003165 * @see #GET_PERMISSIONS
3166 * @see #GET_PROVIDERS
3167 * @see #GET_RECEIVERS
3168 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003169 * @see #GET_SHARED_LIBRARY_FILES
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003170 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003171 * @see #GET_URI_PERMISSION_PATTERNS
3172 * @see #MATCH_DISABLED_COMPONENTS
3173 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3174 * @see #MATCH_UNINSTALLED_PACKAGES
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003175 *
3176 * @hide
3177 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08003178 @SystemApi
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07003179 public abstract List<PackageInfo> getInstalledPackagesAsUser(@PackageInfoFlags int flags,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003180 @UserIdInt int userId);
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003181
3182 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003183 * Check whether a particular package has been granted a particular
3184 * permission.
3185 *
Svet Ganovad3b2972015-07-07 22:49:17 -07003186 * @param permName The name of the permission you are checking for.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003187 * @param pkgName The name of the package you are checking against.
3188 *
3189 * @return If the package has the permission, PERMISSION_GRANTED is
3190 * returned. If it does not have the permission, PERMISSION_DENIED
3191 * is returned.
3192 *
3193 * @see #PERMISSION_GRANTED
3194 * @see #PERMISSION_DENIED
3195 */
Tor Norbye1c2bf032015-03-02 10:57:08 -08003196 @CheckResult
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003197 public abstract int checkPermission(String permName, String pkgName);
3198
3199 /**
Svet Ganovad3b2972015-07-07 22:49:17 -07003200 * Checks whether a particular permissions has been revoked for a
3201 * package by policy. Typically the device owner or the profile owner
3202 * may apply such a policy. The user cannot grant policy revoked
3203 * permissions, hence the only way for an app to get such a permission
3204 * is by a policy change.
3205 *
3206 * @param permName The name of the permission you are checking for.
3207 * @param pkgName The name of the package you are checking against.
3208 *
3209 * @return Whether the permission is restricted by policy.
3210 */
3211 @CheckResult
Svet Ganovf1b7f202015-07-29 08:33:42 -07003212 public abstract boolean isPermissionRevokedByPolicy(@NonNull String permName,
3213 @NonNull String pkgName);
3214
3215 /**
3216 * Gets the package name of the component controlling runtime permissions.
3217 *
3218 * @return The package name.
3219 *
3220 * @hide
3221 */
3222 public abstract String getPermissionControllerPackageName();
Svet Ganovad3b2972015-07-07 22:49:17 -07003223
3224 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003225 * Add a new dynamic permission to the system. For this to work, your
3226 * package must have defined a permission tree through the
3227 * {@link android.R.styleable#AndroidManifestPermissionTree
3228 * &lt;permission-tree&gt;} tag in its manifest. A package can only add
3229 * permissions to trees that were defined by either its own package or
3230 * another with the same user id; a permission is in a tree if it
3231 * matches the name of the permission tree + ".": for example,
3232 * "com.foo.bar" is a member of the permission tree "com.foo".
3233 *
3234 * <p>It is good to make your permission tree name descriptive, because you
3235 * are taking possession of that entire set of permission names. Thus, it
3236 * must be under a domain you control, with a suffix that will not match
3237 * any normal permissions that may be declared in any applications that
3238 * are part of that domain.
3239 *
3240 * <p>New permissions must be added before
3241 * any .apks are installed that use those permissions. Permissions you
3242 * add through this method are remembered across reboots of the device.
3243 * If the given permission already exists, the info you supply here
3244 * will be used to update it.
3245 *
3246 * @param info Description of the permission to be added.
3247 *
3248 * @return Returns true if a new permission was created, false if an
3249 * existing one was updated.
3250 *
3251 * @throws SecurityException if you are not allowed to add the
3252 * given permission name.
3253 *
3254 * @see #removePermission(String)
3255 */
3256 public abstract boolean addPermission(PermissionInfo info);
3257
3258 /**
Dianne Hackbornd7c09682010-03-30 10:42:20 -07003259 * Like {@link #addPermission(PermissionInfo)} but asynchronously
3260 * persists the package manager state after returning from the call,
3261 * allowing it to return quicker and batch a series of adds at the
3262 * expense of no guarantee the added permission will be retained if
3263 * the device is rebooted before it is written.
3264 */
3265 public abstract boolean addPermissionAsync(PermissionInfo info);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003266
Dianne Hackbornd7c09682010-03-30 10:42:20 -07003267 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003268 * Removes a permission that was previously added with
3269 * {@link #addPermission(PermissionInfo)}. The same ownership rules apply
3270 * -- you are only allowed to remove permissions that you are allowed
3271 * to add.
3272 *
3273 * @param name The name of the permission to remove.
3274 *
3275 * @throws SecurityException if you are not allowed to remove the
3276 * given permission name.
3277 *
3278 * @see #addPermission(PermissionInfo)
3279 */
3280 public abstract void removePermission(String name);
3281
Svet Ganov8c7f7002015-05-07 10:48:44 -07003282
3283 /**
3284 * Permission flags set when granting or revoking a permission.
3285 *
3286 * @hide
3287 */
3288 @SystemApi
3289 @IntDef({FLAG_PERMISSION_USER_SET,
3290 FLAG_PERMISSION_USER_FIXED,
3291 FLAG_PERMISSION_POLICY_FIXED,
Svet Ganovb3f22b42015-05-12 11:01:24 -07003292 FLAG_PERMISSION_REVOKE_ON_UPGRADE,
Svet Ganov77ab6a82015-07-03 12:03:02 -07003293 FLAG_PERMISSION_SYSTEM_FIXED,
3294 FLAG_PERMISSION_GRANTED_BY_DEFAULT})
Svet Ganov8c7f7002015-05-07 10:48:44 -07003295 @Retention(RetentionPolicy.SOURCE)
3296 public @interface PermissionFlags {}
3297
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003298 /**
Svetoslavc6d1c342015-02-26 14:44:43 -08003299 * Grant a runtime permission to an application which the application does not
3300 * already have. The permission must have been requested by the application.
3301 * If the application is not allowed to hold the permission, a {@link
3302 * java.lang.SecurityException} is thrown.
3303 * <p>
3304 * <strong>Note: </strong>Using this API requires holding
3305 * android.permission.GRANT_REVOKE_PERMISSIONS and if the user id is
3306 * not the current user android.permission.INTERACT_ACROSS_USERS_FULL.
3307 * </p>
Nick Kralevich035f80d2013-03-27 15:20:08 -07003308 *
Svetoslavc6d1c342015-02-26 14:44:43 -08003309 * @param packageName The package to which to grant the permission.
3310 * @param permissionName The permission name to grant.
3311 * @param user The user for which to grant the permission.
3312 *
Svet Ganov8c7f7002015-05-07 10:48:44 -07003313 * @see #revokeRuntimePermission(String, String, android.os.UserHandle)
3314 * @see android.content.pm.PackageManager.PermissionFlags
Svetoslavc6d1c342015-02-26 14:44:43 -08003315 *
3316 * @hide
Nick Kralevich035f80d2013-03-27 15:20:08 -07003317 */
Svetoslavc6d1c342015-02-26 14:44:43 -08003318 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07003319 public abstract void grantRuntimePermission(@NonNull String packageName,
Svetoslavc6d1c342015-02-26 14:44:43 -08003320 @NonNull String permissionName, @NonNull UserHandle user);
Nick Kralevich035f80d2013-03-27 15:20:08 -07003321
Svetoslavc6d1c342015-02-26 14:44:43 -08003322 /**
3323 * Revoke a runtime permission that was previously granted by {@link
Svet Ganov8c7f7002015-05-07 10:48:44 -07003324 * #grantRuntimePermission(String, String, android.os.UserHandle)}. The
3325 * permission must have been requested by and granted to the application.
3326 * If the application is not allowed to hold the permission, a {@link
Svetoslavc6d1c342015-02-26 14:44:43 -08003327 * java.lang.SecurityException} is thrown.
3328 * <p>
3329 * <strong>Note: </strong>Using this API requires holding
3330 * android.permission.GRANT_REVOKE_PERMISSIONS and if the user id is
3331 * not the current user android.permission.INTERACT_ACROSS_USERS_FULL.
3332 * </p>
3333 *
3334 * @param packageName The package from which to revoke the permission.
3335 * @param permissionName The permission name to revoke.
3336 * @param user The user for which to revoke the permission.
3337 *
Svet Ganov8c7f7002015-05-07 10:48:44 -07003338 * @see #grantRuntimePermission(String, String, android.os.UserHandle)
3339 * @see android.content.pm.PackageManager.PermissionFlags
Svetoslavc6d1c342015-02-26 14:44:43 -08003340 *
3341 * @hide
3342 */
3343 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07003344 public abstract void revokeRuntimePermission(@NonNull String packageName,
Svetoslavc6d1c342015-02-26 14:44:43 -08003345 @NonNull String permissionName, @NonNull UserHandle user);
3346
3347 /**
Svet Ganov8c7f7002015-05-07 10:48:44 -07003348 * Gets the state flags associated with a permission.
3349 *
3350 * @param permissionName The permission for which to get the flags.
3351 * @param packageName The package name for which to get the flags.
3352 * @param user The user for which to get permission flags.
3353 * @return The permission flags.
3354 *
3355 * @hide
3356 */
3357 @SystemApi
3358 public abstract @PermissionFlags int getPermissionFlags(String permissionName,
3359 String packageName, @NonNull UserHandle user);
3360
3361 /**
3362 * Updates the flags associated with a permission by replacing the flags in
3363 * the specified mask with the provided flag values.
3364 *
3365 * @param permissionName The permission for which to update the flags.
3366 * @param packageName The package name for which to update the flags.
3367 * @param flagMask The flags which to replace.
3368 * @param flagValues The flags with which to replace.
3369 * @param user The user for which to update the permission flags.
3370 *
3371 * @hide
3372 */
3373 @SystemApi
3374 public abstract void updatePermissionFlags(String permissionName,
3375 String packageName, @PermissionFlags int flagMask, int flagValues,
3376 @NonNull UserHandle user);
3377
3378 /**
Svetoslav20770dd2015-05-29 15:43:04 -07003379 * Gets whether you should show UI with rationale for requesting a permission.
3380 * You should do this only if you do not have the permission and the context in
3381 * which the permission is requested does not clearly communicate to the user
3382 * what would be the benefit from grating this permission.
3383 *
3384 * @param permission A permission your app wants to request.
3385 * @return Whether you can show permission rationale UI.
3386 *
3387 * @hide
3388 */
3389 public abstract boolean shouldShowRequestPermissionRationale(String permission);
3390
3391 /**
Svetoslavc6d1c342015-02-26 14:44:43 -08003392 * Returns an {@link android.content.Intent} suitable for passing to
3393 * {@link android.app.Activity#startActivityForResult(android.content.Intent, int)}
3394 * which prompts the user to grant permissions to this application.
3395 *
3396 * @throws NullPointerException if {@code permissions} is {@code null} or empty.
3397 *
3398 * @hide
3399 */
3400 public Intent buildRequestPermissionsIntent(@NonNull String[] permissions) {
3401 if (ArrayUtils.isEmpty(permissions)) {
Svet Ganovf66381c2016-02-18 20:02:36 -08003402 throw new IllegalArgumentException("permission cannot be null or empty");
Svetoslavc6d1c342015-02-26 14:44:43 -08003403 }
3404 Intent intent = new Intent(ACTION_REQUEST_PERMISSIONS);
3405 intent.putExtra(EXTRA_REQUEST_PERMISSIONS_NAMES, permissions);
Svet Ganovf1b7f202015-07-29 08:33:42 -07003406 intent.setPackage(getPermissionControllerPackageName());
Svetoslavc6d1c342015-02-26 14:44:43 -08003407 return intent;
Nick Kralevich035f80d2013-03-27 15:20:08 -07003408 }
3409
3410 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003411 * Compare the signatures of two packages to determine if the same
3412 * signature appears in both of them. If they do contain the same
3413 * signature, then they are allowed special privileges when working
3414 * with each other: they can share the same user-id, run instrumentation
3415 * against each other, etc.
3416 *
3417 * @param pkg1 First package name whose signature will be compared.
3418 * @param pkg2 Second package name whose signature will be compared.
Chris Palmer09f33602010-09-13 14:27:18 -07003419 *
3420 * @return Returns an integer indicating whether all signatures on the
3421 * two packages match. The value is >= 0 ({@link #SIGNATURE_MATCH}) if
3422 * all signatures match or < 0 if there is not a match ({@link
3423 * #SIGNATURE_NO_MATCH} or {@link #SIGNATURE_UNKNOWN_PACKAGE}).
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003424 *
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003425 * @see #checkSignatures(int, int)
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003426 * @see #SIGNATURE_MATCH
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003427 * @see #SIGNATURE_NO_MATCH
3428 * @see #SIGNATURE_UNKNOWN_PACKAGE
3429 */
Tor Norbye1c2bf032015-03-02 10:57:08 -08003430 @CheckResult
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003431 public abstract int checkSignatures(String pkg1, String pkg2);
3432
3433 /**
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003434 * Like {@link #checkSignatures(String, String)}, but takes UIDs of
3435 * the two packages to be checked. This can be useful, for example,
3436 * when doing the check in an IPC, where the UID is the only identity
3437 * available. It is functionally identical to determining the package
3438 * associated with the UIDs and checking their signatures.
3439 *
Joe Onorato25660ec2009-08-12 22:40:37 -07003440 * @param uid1 First UID whose signature will be compared.
3441 * @param uid2 Second UID whose signature will be compared.
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003442 *
Chris Palmer09f33602010-09-13 14:27:18 -07003443 * @return Returns an integer indicating whether all signatures on the
3444 * two packages match. The value is >= 0 ({@link #SIGNATURE_MATCH}) if
3445 * all signatures match or < 0 if there is not a match ({@link
3446 * #SIGNATURE_NO_MATCH} or {@link #SIGNATURE_UNKNOWN_PACKAGE}).
3447 *
3448 * @see #checkSignatures(String, String)
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003449 * @see #SIGNATURE_MATCH
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003450 * @see #SIGNATURE_NO_MATCH
3451 * @see #SIGNATURE_UNKNOWN_PACKAGE
3452 */
Tor Norbye1c2bf032015-03-02 10:57:08 -08003453 @CheckResult
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003454 public abstract int checkSignatures(int uid1, int uid2);
3455
3456 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003457 * Retrieve the names of all packages that are associated with a particular
3458 * user id. In most cases, this will be a single package name, the package
3459 * that has been assigned that user id. Where there are multiple packages
3460 * sharing the same user id through the "sharedUserId" mechanism, all
3461 * packages with that id will be returned.
3462 *
3463 * @param uid The user id for which you would like to retrieve the
3464 * associated packages.
3465 *
3466 * @return Returns an array of one or more packages assigned to the user
3467 * id, or null if there are no known packages with the given id.
3468 */
Jeff Sharkey377ded0f2016-01-10 13:15:41 -07003469 public abstract @Nullable String[] getPackagesForUid(int uid);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003470
3471 /**
3472 * Retrieve the official name associated with a user id. This name is
Jonathan Basseri7ea3a332015-05-12 19:39:22 -07003473 * guaranteed to never change, though it is possible for the underlying
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003474 * user id to be changed. That is, if you are storing information about
3475 * user ids in persistent storage, you should use the string returned
3476 * by this function instead of the raw user-id.
3477 *
3478 * @param uid The user id for which you would like to retrieve a name.
3479 * @return Returns a unique name for the given user id, or null if the
3480 * user id is not currently assigned.
3481 */
Jeff Sharkey377ded0f2016-01-10 13:15:41 -07003482 public abstract @Nullable String getNameForUid(int uid);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003483
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003484 /**
3485 * Return the user id associated with a shared user name. Multiple
3486 * applications can specify a shared user name in their manifest and thus
3487 * end up using a common uid. This might be used for new applications
3488 * that use an existing shared user name and need to know the uid of the
3489 * shared user.
3490 *
3491 * @param sharedUserName The shared user name whose uid is to be retrieved.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003492 * @return Returns the UID associated with the shared user.
3493 * @throws NameNotFoundException if a package with the given name cannot be
3494 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003495 * @hide
3496 */
3497 public abstract int getUidForSharedUser(String sharedUserName)
3498 throws NameNotFoundException;
3499
3500 /**
3501 * Return a List of all application packages that are installed on the
3502 * device. If flag GET_UNINSTALLED_PACKAGES has been set, a list of all
kmccormick30498b42013-03-27 17:39:17 -07003503 * applications including those deleted with {@code DONT_DELETE_DATA} (partially
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003504 * installed apps with data directory) will be returned.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003505 *
3506 * @param flags Additional option flags. Use any combination of
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003507 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003508 * {@link #MATCH_SYSTEM_ONLY}, {@link #MATCH_UNINSTALLED_PACKAGES}
3509 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003510 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003511 * @return A List of ApplicationInfo objects, one for each installed application.
3512 * In the unlikely case there are no installed packages, an empty list
3513 * is returned. If flag {@code MATCH_UNINSTALLED_PACKAGES} is set, the
3514 * application information is retrieved from the list of uninstalled
3515 * applications (which includes installed applications as well as
3516 * applications with data directory i.e. applications which had been
3517 * deleted with {@code DONT_DELETE_DATA} flag set).
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003518 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003519 * @see #GET_META_DATA
3520 * @see #GET_SHARED_LIBRARY_FILES
Todd Kennedy5a32c6c2016-07-07 14:29:06 -07003521 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003522 * @see #MATCH_SYSTEM_ONLY
3523 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003524 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003525 public abstract List<ApplicationInfo> getInstalledApplications(@ApplicationInfoFlags int flags);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003526
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003527 /**
Svet Ganov2acf0632015-11-24 19:10:59 -08003528 * Gets the ephemeral applications the user recently used. Requires
3529 * holding "android.permission.ACCESS_EPHEMERAL_APPS".
3530 *
3531 * @return The ephemeral app list.
3532 *
3533 * @hide
3534 */
3535 @RequiresPermission(Manifest.permission.ACCESS_EPHEMERAL_APPS)
3536 public abstract List<EphemeralApplicationInfo> getEphemeralApplications();
3537
3538 /**
3539 * Gets the icon for an ephemeral application.
3540 *
3541 * @param packageName The app package name.
3542 *
3543 * @hide
3544 */
3545 public abstract Drawable getEphemeralApplicationIcon(String packageName);
3546
3547 /**
3548 * Gets whether the caller is an ephemeral app.
3549 *
3550 * @return Whether caller is an ephemeral app.
3551 *
3552 * @see #setEphemeralCookie(byte[])
3553 * @see #getEphemeralCookie()
3554 * @see #getEphemeralCookieMaxSizeBytes()
Todd Kennedy12705132016-01-05 15:17:57 -08003555 *
3556 * @hide
Svet Ganov2acf0632015-11-24 19:10:59 -08003557 */
3558 public abstract boolean isEphemeralApplication();
3559
3560 /**
3561 * Gets the maximum size in bytes of the cookie data an ephemeral app
3562 * can store on the device.
3563 *
3564 * @return The max cookie size in bytes.
3565 *
3566 * @see #isEphemeralApplication()
3567 * @see #setEphemeralCookie(byte[])
3568 * @see #getEphemeralCookie()
Todd Kennedy12705132016-01-05 15:17:57 -08003569 *
3570 * @hide
Svet Ganov2acf0632015-11-24 19:10:59 -08003571 */
3572 public abstract int getEphemeralCookieMaxSizeBytes();
3573
3574 /**
3575 * Gets the ephemeral application cookie for this app. Non
3576 * ephemeral apps and apps that were ephemeral but were upgraded
3577 * to non-ephemeral can still access this API. For ephemeral apps
3578 * this cooke is cached for some time after uninstall while for
3579 * normal apps the cookie is deleted after the app is uninstalled.
3580 * The cookie is always present while the app is installed.
3581 *
3582 * @return The cookie.
3583 *
3584 * @see #isEphemeralApplication()
3585 * @see #setEphemeralCookie(byte[])
3586 * @see #getEphemeralCookieMaxSizeBytes()
Todd Kennedy12705132016-01-05 15:17:57 -08003587 *
3588 * @hide
Svet Ganov2acf0632015-11-24 19:10:59 -08003589 */
3590 public abstract @NonNull byte[] getEphemeralCookie();
3591
3592 /**
3593 * Sets the ephemeral application cookie for the calling app. Non
3594 * ephemeral apps and apps that were ephemeral but were upgraded
3595 * to non-ephemeral can still access this API. For ephemeral apps
3596 * this cooke is cached for some time after uninstall while for
3597 * normal apps the cookie is deleted after the app is uninstalled.
3598 * The cookie is always present while the app is installed. The
3599 * cookie size is limited by {@link #getEphemeralCookieMaxSizeBytes()}.
3600 *
3601 * @param cookie The cookie data.
3602 * @return True if the cookie was set.
3603 *
3604 * @see #isEphemeralApplication()
3605 * @see #getEphemeralCookieMaxSizeBytes()
Jeff Sharkey5aa86932016-01-08 19:07:49 -07003606 * @see #getEphemeralCookie()
Todd Kennedy12705132016-01-05 15:17:57 -08003607 *
3608 * @hide
Svet Ganov2acf0632015-11-24 19:10:59 -08003609 */
3610 public abstract boolean setEphemeralCookie(@NonNull byte[] cookie);
3611
3612 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003613 * Get a list of shared libraries that are available on the
3614 * system.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003615 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003616 * @return An array of shared library names that are
3617 * available on the system, or null if none are installed.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003618 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003619 */
3620 public abstract String[] getSystemSharedLibraryNames();
3621
3622 /**
Svet Ganovd7b1f4112016-02-09 18:49:23 -08003623 * Get the name of the package hosting the services shared library.
3624 *
3625 * @return The library host package.
3626 *
3627 * @hide
3628 */
Svetoslav Ganova9c25002016-04-13 19:25:56 -07003629 public abstract @NonNull String getServicesSystemSharedLibraryPackageName();
3630
3631 /**
3632 * Get the name of the package hosting the shared components shared library.
3633 *
3634 * @return The library host package.
3635 *
3636 * @hide
3637 */
3638 public abstract @NonNull String getSharedSystemSharedLibraryPackageName();
Svet Ganovd7b1f4112016-02-09 18:49:23 -08003639
3640 /**
Dianne Hackborn49237342009-08-27 20:08:01 -07003641 * Get a list of features that are available on the
3642 * system.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003643 *
Dianne Hackborn49237342009-08-27 20:08:01 -07003644 * @return An array of FeatureInfo classes describing the features
3645 * that are available on the system, or null if there are none(!!).
Dianne Hackborn49237342009-08-27 20:08:01 -07003646 */
3647 public abstract FeatureInfo[] getSystemAvailableFeatures();
3648
3649 /**
Jeff Sharkey115d2c12016-02-15 17:25:57 -07003650 * Check whether the given feature name is one of the available features as
3651 * returned by {@link #getSystemAvailableFeatures()}. This tests for the
3652 * presence of <em>any</em> version of the given feature name; use
3653 * {@link #hasSystemFeature(String, int)} to check for a minimum version.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003654 *
Jeff Sharkey115d2c12016-02-15 17:25:57 -07003655 * @return Returns true if the devices supports the feature, else false.
Dianne Hackborn039c68e2009-09-26 16:39:23 -07003656 */
3657 public abstract boolean hasSystemFeature(String name);
3658
3659 /**
Jeff Sharkey115d2c12016-02-15 17:25:57 -07003660 * Check whether the given feature name and version is one of the available
3661 * features as returned by {@link #getSystemAvailableFeatures()}. Since
3662 * features are defined to always be backwards compatible, this returns true
3663 * if the available feature version is greater than or equal to the
3664 * requested version.
3665 *
3666 * @return Returns true if the devices supports the feature, else false.
3667 */
3668 public abstract boolean hasSystemFeature(String name, int version);
3669
3670 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003671 * Determine the best action to perform for a given Intent. This is how
3672 * {@link Intent#resolveActivity} finds an activity if a class has not been
3673 * explicitly specified.
3674 * <p>
3675 * <em>Note:</em> if using an implicit Intent (without an explicit
3676 * ComponentName specified), be sure to consider whether to set the
3677 * {@link #MATCH_DEFAULT_ONLY} only flag. You need to do so to resolve the
3678 * activity in the same way that
3679 * {@link android.content.Context#startActivity(Intent)} and
Dianne Hackborn4d023d212010-10-01 13:41:04 -07003680 * {@link android.content.Intent#resolveActivity(PackageManager)
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003681 * Intent.resolveActivity(PackageManager)} do.
3682 * </p>
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003683 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003684 * @param intent An intent containing all of the desired specification
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003685 * (action, data, type, category, and/or component).
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003686 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003687 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3688 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3689 * {@link #MATCH_DISABLED_COMPONENTS},
3690 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3691 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3692 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3693 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3694 * returned. The most important is {@link #MATCH_DEFAULT_ONLY},
3695 * to limit the resolution to only those activities that support
3696 * the {@link android.content.Intent#CATEGORY_DEFAULT}.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003697 * @return Returns a ResolveInfo object containing the final activity intent
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003698 * that was determined to be the best action. Returns null if no
Mike LeBeaubd3f5272010-02-18 19:27:17 -08003699 * matching activity was found. If multiple matching activities are
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003700 * found and there is no default set, returns a ResolveInfo object
Mike LeBeaubd3f5272010-02-18 19:27:17 -08003701 * containing something else, such as the activity resolver.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003702 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003703 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003704 * @see #GET_SHARED_LIBRARY_FILES
3705 * @see #MATCH_ALL
3706 * @see #MATCH_DISABLED_COMPONENTS
3707 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3708 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003709 * @see #MATCH_DIRECT_BOOT_AWARE
3710 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003711 * @see #MATCH_SYSTEM_ONLY
3712 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003713 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003714 public abstract ResolveInfo resolveActivity(Intent intent, @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003715
3716 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003717 * Determine the best action to perform for a given Intent for a given user.
3718 * This is how {@link Intent#resolveActivity} finds an activity if a class
3719 * has not been explicitly specified.
3720 * <p>
3721 * <em>Note:</em> if using an implicit Intent (without an explicit
3722 * ComponentName specified), be sure to consider whether to set the
3723 * {@link #MATCH_DEFAULT_ONLY} only flag. You need to do so to resolve the
3724 * activity in the same way that
3725 * {@link android.content.Context#startActivity(Intent)} and
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003726 * {@link android.content.Intent#resolveActivity(PackageManager)
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003727 * Intent.resolveActivity(PackageManager)} do.
3728 * </p>
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003729 *
3730 * @param intent An intent containing all of the desired specification
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003731 * (action, data, type, category, and/or component).
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003732 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003733 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3734 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3735 * {@link #MATCH_DISABLED_COMPONENTS},
3736 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3737 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3738 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3739 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3740 * returned. The most important is {@link #MATCH_DEFAULT_ONLY},
3741 * to limit the resolution to only those activities that support
3742 * the {@link android.content.Intent#CATEGORY_DEFAULT}.
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003743 * @param userId The user id.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003744 * @return Returns a ResolveInfo object containing the final activity intent
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003745 * that was determined to be the best action. Returns null if no
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003746 * matching activity was found. If multiple matching activities are
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003747 * found and there is no default set, returns a ResolveInfo object
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003748 * containing something else, such as the activity resolver.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003749 * @see #GET_META_DATA
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003750 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003751 * @see #GET_SHARED_LIBRARY_FILES
3752 * @see #MATCH_ALL
3753 * @see #MATCH_DISABLED_COMPONENTS
3754 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3755 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003756 * @see #MATCH_DIRECT_BOOT_AWARE
3757 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003758 * @see #MATCH_SYSTEM_ONLY
3759 * @see #MATCH_UNINSTALLED_PACKAGES
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003760 * @hide
3761 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003762 public abstract ResolveInfo resolveActivityAsUser(Intent intent, @ResolveInfoFlags int flags,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003763 @UserIdInt int userId);
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003764
3765 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003766 * Retrieve all activities that can be performed for the given intent.
3767 *
3768 * @param intent The desired intent as per resolveActivity().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003769 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003770 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3771 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3772 * {@link #MATCH_DISABLED_COMPONENTS},
3773 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3774 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3775 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3776 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3777 * returned. The most important is {@link #MATCH_DEFAULT_ONLY},
3778 * to limit the resolution to only those activities that support
3779 * the {@link android.content.Intent#CATEGORY_DEFAULT}. Or, set
3780 * {@link #MATCH_ALL} to prevent any filtering of the results.
3781 * @return Returns a List of ResolveInfo objects containing one entry for
3782 * each matching activity, ordered from best to worst. In other
3783 * words, the first item is what would be returned by
3784 * {@link #resolveActivity}. If there are no matching activities, an
3785 * empty list is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003786 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003787 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003788 * @see #GET_SHARED_LIBRARY_FILES
3789 * @see #MATCH_ALL
3790 * @see #MATCH_DISABLED_COMPONENTS
3791 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3792 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003793 * @see #MATCH_DIRECT_BOOT_AWARE
3794 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003795 * @see #MATCH_SYSTEM_ONLY
3796 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003797 */
3798 public abstract List<ResolveInfo> queryIntentActivities(Intent intent,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003799 @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003800
3801 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003802 * Retrieve all activities that can be performed for the given intent, for a
3803 * specific user.
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003804 *
3805 * @param intent The desired intent as per resolveActivity().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003806 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003807 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3808 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3809 * {@link #MATCH_DISABLED_COMPONENTS},
3810 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3811 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3812 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3813 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3814 * returned. The most important is {@link #MATCH_DEFAULT_ONLY},
3815 * to limit the resolution to only those activities that support
3816 * the {@link android.content.Intent#CATEGORY_DEFAULT}. Or, set
3817 * {@link #MATCH_ALL} to prevent any filtering of the results.
3818 * @return Returns a List of ResolveInfo objects containing one entry for
3819 * each matching activity, ordered from best to worst. In other
3820 * words, the first item is what would be returned by
3821 * {@link #resolveActivity}. If there are no matching activities, an
3822 * empty list is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003823 * @see #GET_META_DATA
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003824 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003825 * @see #GET_SHARED_LIBRARY_FILES
3826 * @see #MATCH_ALL
3827 * @see #MATCH_DISABLED_COMPONENTS
3828 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3829 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003830 * @see #MATCH_DIRECT_BOOT_AWARE
3831 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003832 * @see #MATCH_SYSTEM_ONLY
3833 * @see #MATCH_UNINSTALLED_PACKAGES
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003834 * @hide
3835 */
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003836 public abstract List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003837 @ResolveInfoFlags int flags, @UserIdInt int userId);
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003838
3839 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003840 * Retrieve a set of activities that should be presented to the user as
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003841 * similar options. This is like {@link #queryIntentActivities}, except it
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003842 * also allows you to supply a list of more explicit Intents that you would
3843 * like to resolve to particular options, and takes care of returning the
3844 * final ResolveInfo list in a reasonable order, with no duplicates, based
3845 * on those inputs.
3846 *
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003847 * @param caller The class name of the activity that is making the request.
3848 * This activity will never appear in the output list. Can be
3849 * null.
3850 * @param specifics An array of Intents that should be resolved to the first
3851 * specific results. Can be null.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003852 * @param intent The desired intent as per resolveActivity().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003853 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003854 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3855 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3856 * {@link #MATCH_DISABLED_COMPONENTS},
3857 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3858 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3859 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3860 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3861 * returned. The most important is {@link #MATCH_DEFAULT_ONLY},
3862 * to limit the resolution to only those activities that support
3863 * the {@link android.content.Intent#CATEGORY_DEFAULT}.
3864 * @return Returns a List of ResolveInfo objects containing one entry for
3865 * each matching activity. The list is ordered first by all of the
3866 * intents resolved in <var>specifics</var> and then any additional
3867 * activities that can handle <var>intent</var> but did not get
3868 * included by one of the <var>specifics</var> intents. If there are
3869 * no matching activities, an empty list is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003870 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003871 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003872 * @see #GET_SHARED_LIBRARY_FILES
3873 * @see #MATCH_ALL
3874 * @see #MATCH_DISABLED_COMPONENTS
3875 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3876 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003877 * @see #MATCH_DIRECT_BOOT_AWARE
3878 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003879 * @see #MATCH_SYSTEM_ONLY
3880 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003881 */
3882 public abstract List<ResolveInfo> queryIntentActivityOptions(
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003883 ComponentName caller, Intent[] specifics, Intent intent, @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003884
3885 /**
3886 * Retrieve all receivers that can handle a broadcast of the given intent.
3887 *
3888 * @param intent The desired intent as per resolveActivity().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003889 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003890 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3891 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3892 * {@link #MATCH_DISABLED_COMPONENTS},
3893 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3894 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3895 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3896 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3897 * returned.
3898 * @return Returns a List of ResolveInfo objects containing one entry for
3899 * each matching receiver, ordered from best to worst. If there are
3900 * no matching receivers, an empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003901 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003902 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003903 * @see #GET_SHARED_LIBRARY_FILES
3904 * @see #MATCH_ALL
3905 * @see #MATCH_DISABLED_COMPONENTS
3906 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3907 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003908 * @see #MATCH_DIRECT_BOOT_AWARE
3909 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003910 * @see #MATCH_SYSTEM_ONLY
3911 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003912 */
3913 public abstract List<ResolveInfo> queryBroadcastReceivers(Intent intent,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003914 @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003915
3916 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003917 * Retrieve all receivers that can handle a broadcast of the given intent,
3918 * for a specific user.
Amith Yamasanif203aee2012-08-29 18:41:53 -07003919 *
3920 * @param intent The desired intent as per resolveActivity().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003921 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003922 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3923 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3924 * {@link #MATCH_DISABLED_COMPONENTS},
3925 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3926 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3927 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3928 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3929 * returned.
Fyodor Kupolov940e8572016-01-26 12:03:51 -08003930 * @param userHandle UserHandle of the user being queried.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003931 * @return Returns a List of ResolveInfo objects containing one entry for
3932 * each matching receiver, ordered from best to worst. If there are
3933 * no matching receivers, an empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003934 * @see #GET_META_DATA
Amith Yamasanif203aee2012-08-29 18:41:53 -07003935 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003936 * @see #GET_SHARED_LIBRARY_FILES
3937 * @see #MATCH_ALL
3938 * @see #MATCH_DISABLED_COMPONENTS
3939 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3940 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003941 * @see #MATCH_DIRECT_BOOT_AWARE
3942 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003943 * @see #MATCH_SYSTEM_ONLY
3944 * @see #MATCH_UNINSTALLED_PACKAGES
Amith Yamasanif203aee2012-08-29 18:41:53 -07003945 * @hide
3946 */
Fyodor Kupolov940e8572016-01-26 12:03:51 -08003947 @SystemApi
3948 public List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent,
3949 @ResolveInfoFlags int flags, UserHandle userHandle) {
3950 return queryBroadcastReceiversAsUser(intent, flags, userHandle.getIdentifier());
3951 }
3952
3953 /**
3954 * @hide
3955 */
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07003956 public abstract List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003957 @ResolveInfoFlags int flags, @UserIdInt int userId);
Amith Yamasanif203aee2012-08-29 18:41:53 -07003958
Fyodor Kupolov940e8572016-01-26 12:03:51 -08003959
Jeff Sharkeybd940222016-01-08 11:07:13 -07003960 /** {@hide} */
3961 @Deprecated
3962 public List<ResolveInfo> queryBroadcastReceivers(Intent intent,
3963 @ResolveInfoFlags int flags, @UserIdInt int userId) {
3964 Log.w(TAG, "STAHP USING HIDDEN APIS KTHX");
3965 return queryBroadcastReceiversAsUser(intent, flags, userId);
3966 }
3967
Amith Yamasanif203aee2012-08-29 18:41:53 -07003968 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003969 * Determine the best service to handle for a given Intent.
3970 *
3971 * @param intent An intent containing all of the desired specification
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003972 * (action, data, type, category, and/or component).
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003973 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003974 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
3975 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
3976 * {@link #MATCH_DISABLED_COMPONENTS},
3977 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
3978 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
3979 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
3980 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
3981 * returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003982 * @return Returns a ResolveInfo object containing the final service intent
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003983 * that was determined to be the best action. Returns null if no
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003984 * matching service was found.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003985 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003986 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003987 * @see #GET_SHARED_LIBRARY_FILES
3988 * @see #MATCH_ALL
3989 * @see #MATCH_DISABLED_COMPONENTS
3990 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
3991 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003992 * @see #MATCH_DIRECT_BOOT_AWARE
3993 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003994 * @see #MATCH_SYSTEM_ONLY
3995 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003996 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003997 public abstract ResolveInfo resolveService(Intent intent, @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003998
3999 /**
4000 * Retrieve all services that can match the given intent.
4001 *
4002 * @param intent The desired intent as per resolveService().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004003 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004004 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
4005 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
4006 * {@link #MATCH_DISABLED_COMPONENTS},
4007 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4008 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
4009 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4010 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4011 * returned.
4012 * @return Returns a List of ResolveInfo objects containing one entry for
4013 * each matching service, ordered from best to worst. In other
4014 * words, the first item is what would be returned by
4015 * {@link #resolveService}. If there are no matching services, an
4016 * empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004017 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004018 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004019 * @see #GET_SHARED_LIBRARY_FILES
4020 * @see #MATCH_ALL
4021 * @see #MATCH_DISABLED_COMPONENTS
4022 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
4023 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004024 * @see #MATCH_DIRECT_BOOT_AWARE
4025 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004026 * @see #MATCH_SYSTEM_ONLY
4027 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004028 */
4029 public abstract List<ResolveInfo> queryIntentServices(Intent intent,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004030 @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004031
4032 /**
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004033 * Retrieve all services that can match the given intent for a given user.
4034 *
4035 * @param intent The desired intent as per resolveService().
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004036 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004037 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
4038 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
4039 * {@link #MATCH_DISABLED_COMPONENTS},
4040 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4041 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
4042 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4043 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4044 * returned.
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004045 * @param userId The user id.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004046 * @return Returns a List of ResolveInfo objects containing one entry for
4047 * each matching service, ordered from best to worst. In other
4048 * words, the first item is what would be returned by
4049 * {@link #resolveService}. If there are no matching services, an
4050 * empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004051 * @see #GET_META_DATA
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004052 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004053 * @see #GET_SHARED_LIBRARY_FILES
4054 * @see #MATCH_ALL
4055 * @see #MATCH_DISABLED_COMPONENTS
4056 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
4057 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004058 * @see #MATCH_DIRECT_BOOT_AWARE
4059 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004060 * @see #MATCH_SYSTEM_ONLY
4061 * @see #MATCH_UNINSTALLED_PACKAGES
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004062 * @hide
4063 */
4064 public abstract List<ResolveInfo> queryIntentServicesAsUser(Intent intent,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004065 @ResolveInfoFlags int flags, @UserIdInt int userId);
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004066
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004067 /**
4068 * Retrieve all providers that can match the given intent.
4069 *
4070 * @param intent An intent containing all of the desired specification
4071 * (action, data, type, category, and/or component).
4072 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004073 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
4074 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
4075 * {@link #MATCH_DISABLED_COMPONENTS},
4076 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4077 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
4078 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4079 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4080 * returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004081 * @param userId The user id.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004082 * @return Returns a List of ResolveInfo objects containing one entry for
4083 * each matching provider, ordered from best to worst. If there are
4084 * no matching services, an empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004085 * @see #GET_META_DATA
4086 * @see #GET_RESOLVED_FILTER
4087 * @see #GET_SHARED_LIBRARY_FILES
4088 * @see #MATCH_ALL
4089 * @see #MATCH_DISABLED_COMPONENTS
4090 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
4091 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004092 * @see #MATCH_DIRECT_BOOT_AWARE
4093 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004094 * @see #MATCH_SYSTEM_ONLY
4095 * @see #MATCH_UNINSTALLED_PACKAGES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004096 * @hide
4097 */
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004098 public abstract List<ResolveInfo> queryIntentContentProvidersAsUser(
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004099 Intent intent, @ResolveInfoFlags int flags, @UserIdInt int userId);
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004100
4101 /**
4102 * Retrieve all providers that can match the given intent.
4103 *
4104 * @param intent An intent containing all of the desired specification
4105 * (action, data, type, category, and/or component).
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004106 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004107 * {@link #GET_META_DATA}, {@link #GET_RESOLVED_FILTER},
4108 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #MATCH_ALL},
4109 * {@link #MATCH_DISABLED_COMPONENTS},
4110 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4111 * {@link #MATCH_DEFAULT_ONLY}, {@link #MATCH_DIRECT_BOOT_AWARE},
4112 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4113 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4114 * returned.
4115 * @return Returns a List of ResolveInfo objects containing one entry for
4116 * each matching provider, ordered from best to worst. If there are
4117 * no matching services, an empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004118 * @see #GET_META_DATA
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004119 * @see #GET_RESOLVED_FILTER
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004120 * @see #GET_SHARED_LIBRARY_FILES
4121 * @see #MATCH_ALL
4122 * @see #MATCH_DISABLED_COMPONENTS
4123 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
4124 * @see #MATCH_DEFAULT_ONLY
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004125 * @see #MATCH_DIRECT_BOOT_AWARE
4126 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004127 * @see #MATCH_SYSTEM_ONLY
4128 * @see #MATCH_UNINSTALLED_PACKAGES
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004129 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004130 public abstract List<ResolveInfo> queryIntentContentProviders(Intent intent,
4131 @ResolveInfoFlags int flags);
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004132
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004133 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004134 * Find a single content provider by its base path name.
4135 *
4136 * @param name The name of the provider to find.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004137 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004138 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
4139 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
4140 * {@link #MATCH_DISABLED_COMPONENTS},
4141 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4142 * {@link #MATCH_DIRECT_BOOT_AWARE},
4143 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4144 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4145 * returned.
4146 * @return A {@link ProviderInfo} object containing information about the
4147 * provider. If a provider was not found, returns null.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004148 * @see #GET_META_DATA
4149 * @see #GET_SHARED_LIBRARY_FILES
4150 * @see #MATCH_ALL
4151 * @see #MATCH_DEBUG_TRIAGED_MISSING
4152 * @see #MATCH_DEFAULT_ONLY
4153 * @see #MATCH_DISABLED_COMPONENTS
4154 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004155 * @see #MATCH_DIRECT_BOOT_AWARE
4156 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004157 * @see #MATCH_SYSTEM_ONLY
4158 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004159 */
4160 public abstract ProviderInfo resolveContentProvider(String name,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004161 @ComponentInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004162
4163 /**
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004164 * Find a single content provider by its base path name.
4165 *
4166 * @param name The name of the provider to find.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004167 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004168 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
4169 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
4170 * {@link #MATCH_DISABLED_COMPONENTS},
4171 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4172 * {@link #MATCH_DIRECT_BOOT_AWARE},
4173 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4174 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4175 * returned.
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004176 * @param userId The user id.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004177 * @return A {@link ProviderInfo} object containing information about the
4178 * provider. If a provider was not found, returns null.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004179 * @see #GET_META_DATA
4180 * @see #GET_SHARED_LIBRARY_FILES
4181 * @see #MATCH_ALL
4182 * @see #MATCH_DEBUG_TRIAGED_MISSING
4183 * @see #MATCH_DEFAULT_ONLY
4184 * @see #MATCH_DISABLED_COMPONENTS
4185 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004186 * @see #MATCH_DIRECT_BOOT_AWARE
4187 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004188 * @see #MATCH_SYSTEM_ONLY
4189 * @see #MATCH_UNINSTALLED_PACKAGES
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004190 * @hide
4191 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004192 public abstract ProviderInfo resolveContentProviderAsUser(String name,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004193 @ComponentInfoFlags int flags, @UserIdInt int userId);
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004194
4195 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004196 * Retrieve content provider information.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004197 * <p>
4198 * <em>Note: unlike most other methods, an empty result set is indicated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004199 * by a null return instead of an empty list.</em>
4200 *
4201 * @param processName If non-null, limits the returned providers to only
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004202 * those that are hosted by the given process. If null, all
4203 * content providers are returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004204 * @param uid If <var>processName</var> is non-null, this is the required
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004205 * uid owning the requested content providers.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004206 * @param flags Additional option flags. Use any combination of
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004207 * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
4208 * {@link #MATCH_ALL}, {@link #MATCH_DEFAULT_ONLY},
4209 * {@link #MATCH_DISABLED_COMPONENTS},
4210 * {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4211 * {@link #MATCH_DIRECT_BOOT_AWARE},
4212 * {@link #MATCH_DIRECT_BOOT_UNAWARE}, {@link #MATCH_SYSTEM_ONLY}
4213 * or {@link #MATCH_UNINSTALLED_PACKAGES} to modify the data
4214 * returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004215 * @return A list of {@link ProviderInfo} objects containing one entry for
4216 * each provider either matching <var>processName</var> or, if
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004217 * <var>processName</var> is null, all known content providers.
4218 * <em>If there are no matching providers, null is returned.</em>
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004219 * @see #GET_META_DATA
4220 * @see #GET_SHARED_LIBRARY_FILES
4221 * @see #MATCH_ALL
4222 * @see #MATCH_DEBUG_TRIAGED_MISSING
4223 * @see #MATCH_DEFAULT_ONLY
4224 * @see #MATCH_DISABLED_COMPONENTS
4225 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004226 * @see #MATCH_DIRECT_BOOT_AWARE
4227 * @see #MATCH_DIRECT_BOOT_UNAWARE
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004228 * @see #MATCH_SYSTEM_ONLY
4229 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004230 */
4231 public abstract List<ProviderInfo> queryContentProviders(
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004232 String processName, int uid, @ComponentInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004233
4234 /**
4235 * Retrieve all of the information we know about a particular
4236 * instrumentation class.
4237 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004238 * @param className The full name (i.e.
4239 * com.google.apps.contacts.InstrumentList) of an
4240 * Instrumentation class.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004241 * @param flags Additional option flags. Use any combination of
4242 * {@link #GET_META_DATA}
4243 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004244 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004245 * @return An {@link InstrumentationInfo} object containing information about the
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004246 * instrumentation.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004247 * @throws NameNotFoundException if a package with the given name cannot be
4248 * found on the system.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004249 *
4250 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004251 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004252 public abstract InstrumentationInfo getInstrumentationInfo(ComponentName className,
4253 @InstrumentationInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004254
4255 /**
4256 * Retrieve information about available instrumentation code. May be used
4257 * to retrieve either all instrumentation code, or only the code targeting
4258 * a particular package.
4259 *
4260 * @param targetPackage If null, all instrumentation is returned; only the
4261 * instrumentation targeting this package name is
4262 * returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004263 * @param flags Additional option flags. Use any combination of
4264 * {@link #GET_META_DATA}
4265 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004266 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004267 * @return A list of {@link InstrumentationInfo} objects containing one
4268 * entry for each matching instrumentation. If there are no
Jesse Hallf77a34f2016-02-04 18:41:33 -08004269 * instrumentation available, returns an empty list.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004270 *
4271 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004272 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004273 public abstract List<InstrumentationInfo> queryInstrumentation(String targetPackage,
4274 @InstrumentationInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004275
4276 /**
4277 * Retrieve an image from a package. This is a low-level API used by
4278 * the various package manager info structures (such as
4279 * {@link ComponentInfo} to implement retrieval of their associated
4280 * icon.
4281 *
4282 * @param packageName The name of the package that this icon is coming from.
kmccormick30498b42013-03-27 17:39:17 -07004283 * Cannot be null.
4284 * @param resid The resource identifier of the desired image. Cannot be 0.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004285 * @param appInfo Overall information about <var>packageName</var>. This
4286 * may be null, in which case the application information will be retrieved
4287 * for you if needed; if you already have this information around, it can
4288 * be much more efficient to supply it here.
4289 *
4290 * @return Returns a Drawable holding the requested image. Returns null if
4291 * an image could not be found for any reason.
4292 */
Tor Norbye7b9c9122013-05-30 16:48:33 -07004293 public abstract Drawable getDrawable(String packageName, @DrawableRes int resid,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004294 ApplicationInfo appInfo);
4295
4296 /**
4297 * Retrieve the icon associated with an activity. Given the full name of
4298 * an activity, retrieves the information about it and calls
4299 * {@link ComponentInfo#loadIcon ComponentInfo.loadIcon()} to return its icon.
kmccormick30498b42013-03-27 17:39:17 -07004300 * If the activity cannot be found, NameNotFoundException is thrown.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004301 *
4302 * @param activityName Name of the activity whose icon is to be retrieved.
4303 *
4304 * @return Returns the image of the icon, or the default activity icon if
4305 * it could not be found. Does not return null.
4306 * @throws NameNotFoundException Thrown if the resources for the given
4307 * activity could not be loaded.
4308 *
4309 * @see #getActivityIcon(Intent)
4310 */
4311 public abstract Drawable getActivityIcon(ComponentName activityName)
4312 throws NameNotFoundException;
4313
4314 /**
4315 * Retrieve the icon associated with an Intent. If intent.getClassName() is
4316 * set, this simply returns the result of
4317 * getActivityIcon(intent.getClassName()). Otherwise it resolves the intent's
4318 * component and returns the icon associated with the resolved component.
kmccormick30498b42013-03-27 17:39:17 -07004319 * If intent.getClassName() cannot be found or the Intent cannot be resolved
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004320 * to a component, NameNotFoundException is thrown.
4321 *
4322 * @param intent The intent for which you would like to retrieve an icon.
4323 *
4324 * @return Returns the image of the icon, or the default activity icon if
4325 * it could not be found. Does not return null.
4326 * @throws NameNotFoundException Thrown if the resources for application
4327 * matching the given intent could not be loaded.
4328 *
4329 * @see #getActivityIcon(ComponentName)
4330 */
4331 public abstract Drawable getActivityIcon(Intent intent)
4332 throws NameNotFoundException;
4333
4334 /**
Jose Limaf78e3122014-03-06 12:13:15 -08004335 * Retrieve the banner associated with an activity. Given the full name of
4336 * an activity, retrieves the information about it and calls
4337 * {@link ComponentInfo#loadIcon ComponentInfo.loadIcon()} to return its
4338 * banner. If the activity cannot be found, NameNotFoundException is thrown.
4339 *
4340 * @param activityName Name of the activity whose banner is to be retrieved.
4341 * @return Returns the image of the banner, or null if the activity has no
4342 * banner specified.
4343 * @throws NameNotFoundException Thrown if the resources for the given
4344 * activity could not be loaded.
4345 * @see #getActivityBanner(Intent)
4346 */
4347 public abstract Drawable getActivityBanner(ComponentName activityName)
4348 throws NameNotFoundException;
4349
4350 /**
4351 * Retrieve the banner associated with an Intent. If intent.getClassName()
4352 * is set, this simply returns the result of
4353 * getActivityBanner(intent.getClassName()). Otherwise it resolves the
4354 * intent's component and returns the banner associated with the resolved
4355 * component. If intent.getClassName() cannot be found or the Intent cannot
4356 * be resolved to a component, NameNotFoundException is thrown.
4357 *
4358 * @param intent The intent for which you would like to retrieve a banner.
4359 * @return Returns the image of the banner, or null if the activity has no
4360 * banner specified.
4361 * @throws NameNotFoundException Thrown if the resources for application
4362 * matching the given intent could not be loaded.
4363 * @see #getActivityBanner(ComponentName)
4364 */
4365 public abstract Drawable getActivityBanner(Intent intent)
4366 throws NameNotFoundException;
4367
4368 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004369 * Return the generic icon for an activity that is used when no specific
4370 * icon is defined.
Adam Connors23cc04e2014-04-01 12:12:20 +01004371 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004372 * @return Drawable Image of the icon.
4373 */
4374 public abstract Drawable getDefaultActivityIcon();
4375
4376 /**
4377 * Retrieve the icon associated with an application. If it has not defined
4378 * an icon, the default app icon is returned. Does not return null.
4379 *
4380 * @param info Information about application being queried.
4381 *
4382 * @return Returns the image of the icon, or the default application icon
4383 * if it could not be found.
4384 *
4385 * @see #getApplicationIcon(String)
4386 */
4387 public abstract Drawable getApplicationIcon(ApplicationInfo info);
4388
4389 /**
4390 * Retrieve the icon associated with an application. Given the name of the
4391 * application's package, retrieves the information about it and calls
kmccormick30498b42013-03-27 17:39:17 -07004392 * getApplicationIcon() to return its icon. If the application cannot be
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004393 * found, NameNotFoundException is thrown.
4394 *
4395 * @param packageName Name of the package whose application icon is to be
4396 * retrieved.
4397 *
4398 * @return Returns the image of the icon, or the default application icon
4399 * if it could not be found. Does not return null.
4400 * @throws NameNotFoundException Thrown if the resources for the given
4401 * application could not be loaded.
4402 *
4403 * @see #getApplicationIcon(ApplicationInfo)
4404 */
4405 public abstract Drawable getApplicationIcon(String packageName)
4406 throws NameNotFoundException;
4407
4408 /**
Jose Limaf78e3122014-03-06 12:13:15 -08004409 * Retrieve the banner associated with an application.
4410 *
4411 * @param info Information about application being queried.
4412 * @return Returns the image of the banner or null if the application has no
4413 * banner specified.
4414 * @see #getApplicationBanner(String)
4415 */
4416 public abstract Drawable getApplicationBanner(ApplicationInfo info);
4417
4418 /**
4419 * Retrieve the banner associated with an application. Given the name of the
4420 * application's package, retrieves the information about it and calls
4421 * getApplicationIcon() to return its banner. If the application cannot be
4422 * found, NameNotFoundException is thrown.
4423 *
4424 * @param packageName Name of the package whose application banner is to be
4425 * retrieved.
4426 * @return Returns the image of the banner or null if the application has no
4427 * banner specified.
4428 * @throws NameNotFoundException Thrown if the resources for the given
4429 * application could not be loaded.
4430 * @see #getApplicationBanner(ApplicationInfo)
4431 */
4432 public abstract Drawable getApplicationBanner(String packageName)
4433 throws NameNotFoundException;
4434
4435 /**
4436 * Retrieve the logo associated with an activity. Given the full name of an
4437 * activity, retrieves the information about it and calls
4438 * {@link ComponentInfo#loadLogo ComponentInfo.loadLogo()} to return its
4439 * logo. If the activity cannot be found, NameNotFoundException is thrown.
Adam Powell81cd2e92010-04-21 16:35:18 -07004440 *
4441 * @param activityName Name of the activity whose logo is to be retrieved.
Jose Limaf78e3122014-03-06 12:13:15 -08004442 * @return Returns the image of the logo or null if the activity has no logo
4443 * specified.
Adam Powell81cd2e92010-04-21 16:35:18 -07004444 * @throws NameNotFoundException Thrown if the resources for the given
Jose Limaf78e3122014-03-06 12:13:15 -08004445 * activity could not be loaded.
Adam Powell81cd2e92010-04-21 16:35:18 -07004446 * @see #getActivityLogo(Intent)
4447 */
4448 public abstract Drawable getActivityLogo(ComponentName activityName)
4449 throws NameNotFoundException;
4450
4451 /**
4452 * Retrieve the logo associated with an Intent. If intent.getClassName() is
4453 * set, this simply returns the result of
4454 * getActivityLogo(intent.getClassName()). Otherwise it resolves the intent's
4455 * component and returns the logo associated with the resolved component.
kmccormick30498b42013-03-27 17:39:17 -07004456 * If intent.getClassName() cannot be found or the Intent cannot be resolved
Adam Powell81cd2e92010-04-21 16:35:18 -07004457 * to a component, NameNotFoundException is thrown.
4458 *
4459 * @param intent The intent for which you would like to retrieve a logo.
4460 *
4461 * @return Returns the image of the logo, or null if the activity has no
4462 * logo specified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07004463 *
Adam Powell81cd2e92010-04-21 16:35:18 -07004464 * @throws NameNotFoundException Thrown if the resources for application
4465 * matching the given intent could not be loaded.
4466 *
4467 * @see #getActivityLogo(ComponentName)
4468 */
4469 public abstract Drawable getActivityLogo(Intent intent)
4470 throws NameNotFoundException;
4471
4472 /**
4473 * Retrieve the logo associated with an application. If it has not specified
4474 * a logo, this method returns null.
4475 *
4476 * @param info Information about application being queried.
4477 *
4478 * @return Returns the image of the logo, or null if no logo is specified
4479 * by the application.
4480 *
4481 * @see #getApplicationLogo(String)
4482 */
4483 public abstract Drawable getApplicationLogo(ApplicationInfo info);
4484
4485 /**
4486 * Retrieve the logo associated with an application. Given the name of the
4487 * application's package, retrieves the information about it and calls
kmccormick30498b42013-03-27 17:39:17 -07004488 * getApplicationLogo() to return its logo. If the application cannot be
Adam Powell81cd2e92010-04-21 16:35:18 -07004489 * found, NameNotFoundException is thrown.
4490 *
4491 * @param packageName Name of the package whose application logo is to be
4492 * retrieved.
4493 *
4494 * @return Returns the image of the logo, or null if no application logo
4495 * has been specified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07004496 *
Adam Powell81cd2e92010-04-21 16:35:18 -07004497 * @throws NameNotFoundException Thrown if the resources for the given
4498 * application could not be loaded.
4499 *
4500 * @see #getApplicationLogo(ApplicationInfo)
4501 */
4502 public abstract Drawable getApplicationLogo(String packageName)
4503 throws NameNotFoundException;
4504
4505 /**
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004506 * Returns a managed-user-style badged copy of the given drawable allowing the user to
4507 * distinguish it from the original drawable.
4508 * The caller can specify the location in the bounds of the drawable to be
4509 * badged where the badge should be applied as well as the density of the
4510 * badge to be used.
4511 * <p>
4512 * If the original drawable is a BitmapDrawable and the backing bitmap is
4513 * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging
4514 * is performed in place and the original drawable is returned.
4515 * </p>
4516 *
4517 * @param drawable The drawable to badge.
4518 * @param badgeLocation Where in the bounds of the badged drawable to place
4519 * the badge. If it's {@code null}, the badge is applied on top of the entire
4520 * drawable being badged.
4521 * @param badgeDensity The optional desired density for the badge as per
4522 * {@link android.util.DisplayMetrics#densityDpi}. If it's not positive,
4523 * the density of the display is used.
4524 * @return A drawable that combines the original drawable and a badge as
4525 * determined by the system.
4526 * @hide
4527 */
4528 public abstract Drawable getManagedUserBadgedDrawable(Drawable drawable, Rect badgeLocation,
4529 int badgeDensity);
4530
4531 /**
Tony Mak4dc008c2016-03-16 10:46:49 +00004532 * If the target user is a managed profile, then this returns a badged copy of the given icon
4533 * to be able to distinguish it from the original icon. For badging an arbitrary drawable use
Kenny Guydf77d712015-05-29 17:02:22 +01004534 * {@link #getUserBadgedDrawableForDensity(
Svetoslavc7d62f02014-09-04 15:39:54 -07004535 * android.graphics.drawable.Drawable, UserHandle, android.graphics.Rect, int)}.
4536 * <p>
4537 * If the original drawable is a BitmapDrawable and the backing bitmap is
4538 * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging
4539 * is performed in place and the original drawable is returned.
4540 * </p>
4541 *
4542 * @param icon The icon to badge.
4543 * @param user The target user.
4544 * @return A drawable that combines the original icon and a badge as
4545 * determined by the system.
4546 */
4547 public abstract Drawable getUserBadgedIcon(Drawable icon, UserHandle user);
4548
4549 /**
4550 * If the target user is a managed profile of the calling user or the caller
4551 * is itself a managed profile, then this returns a badged copy of the given
4552 * drawable allowing the user to distinguish it from the original drawable.
4553 * The caller can specify the location in the bounds of the drawable to be
4554 * badged where the badge should be applied as well as the density of the
4555 * badge to be used.
4556 * <p>
4557 * If the original drawable is a BitmapDrawable and the backing bitmap is
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004558 * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging
Svetoslavc7d62f02014-09-04 15:39:54 -07004559 * is performed in place and the original drawable is returned.
4560 * </p>
4561 *
4562 * @param drawable The drawable to badge.
4563 * @param user The target user.
4564 * @param badgeLocation Where in the bounds of the badged drawable to place
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004565 * the badge. If it's {@code null}, the badge is applied on top of the entire
Svetoslavc7d62f02014-09-04 15:39:54 -07004566 * drawable being badged.
4567 * @param badgeDensity The optional desired density for the badge as per
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004568 * {@link android.util.DisplayMetrics#densityDpi}. If it's not positive,
Svetoslavc7d62f02014-09-04 15:39:54 -07004569 * the density of the display is used.
4570 * @return A drawable that combines the original drawable and a badge as
4571 * determined by the system.
4572 */
4573 public abstract Drawable getUserBadgedDrawableForDensity(Drawable drawable,
4574 UserHandle user, Rect badgeLocation, int badgeDensity);
4575
4576 /**
4577 * If the target user is a managed profile of the calling user or the caller
4578 * is itself a managed profile, then this returns a drawable to use as a small
4579 * icon to include in a view to distinguish it from the original icon.
4580 *
4581 * @param user The target user.
4582 * @param density The optional desired density for the badge as per
4583 * {@link android.util.DisplayMetrics#densityDpi}. If not provided
4584 * the density of the current display is used.
4585 * @return the drawable or null if no drawable is required.
4586 * @hide
4587 */
4588 public abstract Drawable getUserBadgeForDensity(UserHandle user, int density);
4589
4590 /**
4591 * If the target user is a managed profile of the calling user or the caller
Selim Cineke6ff9462016-01-15 15:07:06 -08004592 * is itself a managed profile, then this returns a drawable to use as a small
4593 * icon to include in a view to distinguish it from the original icon. This version
4594 * doesn't have background protection and should be used over a light background instead of
4595 * a badge.
4596 *
4597 * @param user The target user.
4598 * @param density The optional desired density for the badge as per
4599 * {@link android.util.DisplayMetrics#densityDpi}. If not provided
4600 * the density of the current display is used.
4601 * @return the drawable or null if no drawable is required.
4602 * @hide
4603 */
4604 public abstract Drawable getUserBadgeForDensityNoBackground(UserHandle user, int density);
4605
4606 /**
4607 * If the target user is a managed profile of the calling user or the caller
Svetoslavc7d62f02014-09-04 15:39:54 -07004608 * is itself a managed profile, then this returns a copy of the label with
4609 * badging for accessibility services like talkback. E.g. passing in "Email"
4610 * and it might return "Work Email" for Email in the work profile.
4611 *
4612 * @param label The label to change.
4613 * @param user The target user.
4614 * @return A label that combines the original label and a badge as
4615 * determined by the system.
4616 */
4617 public abstract CharSequence getUserBadgedLabel(CharSequence label, UserHandle user);
4618
4619 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004620 * Retrieve text from a package. This is a low-level API used by
4621 * the various package manager info structures (such as
4622 * {@link ComponentInfo} to implement retrieval of their associated
4623 * labels and other text.
4624 *
4625 * @param packageName The name of the package that this text is coming from.
kmccormick30498b42013-03-27 17:39:17 -07004626 * Cannot be null.
4627 * @param resid The resource identifier of the desired text. Cannot be 0.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004628 * @param appInfo Overall information about <var>packageName</var>. This
4629 * may be null, in which case the application information will be retrieved
4630 * for you if needed; if you already have this information around, it can
4631 * be much more efficient to supply it here.
4632 *
4633 * @return Returns a CharSequence holding the requested text. Returns null
4634 * if the text could not be found for any reason.
4635 */
Tor Norbye7b9c9122013-05-30 16:48:33 -07004636 public abstract CharSequence getText(String packageName, @StringRes int resid,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004637 ApplicationInfo appInfo);
4638
4639 /**
4640 * Retrieve an XML file from a package. This is a low-level API used to
4641 * retrieve XML meta data.
4642 *
4643 * @param packageName The name of the package that this xml is coming from.
kmccormick30498b42013-03-27 17:39:17 -07004644 * Cannot be null.
4645 * @param resid The resource identifier of the desired xml. Cannot be 0.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004646 * @param appInfo Overall information about <var>packageName</var>. This
4647 * may be null, in which case the application information will be retrieved
4648 * for you if needed; if you already have this information around, it can
4649 * be much more efficient to supply it here.
4650 *
4651 * @return Returns an XmlPullParser allowing you to parse out the XML
4652 * data. Returns null if the xml resource could not be found for any
4653 * reason.
4654 */
Tor Norbye7b9c9122013-05-30 16:48:33 -07004655 public abstract XmlResourceParser getXml(String packageName, @XmlRes int resid,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004656 ApplicationInfo appInfo);
4657
4658 /**
4659 * Return the label to use for this application.
4660 *
4661 * @return Returns the label associated with this application, or null if
4662 * it could not be found for any reason.
kmccormick30498b42013-03-27 17:39:17 -07004663 * @param info The application to get the label of.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004664 */
4665 public abstract CharSequence getApplicationLabel(ApplicationInfo info);
4666
4667 /**
4668 * Retrieve the resources associated with an activity. Given the full
4669 * name of an activity, retrieves the information about it and calls
4670 * getResources() to return its application's resources. If the activity
kmccormick30498b42013-03-27 17:39:17 -07004671 * cannot be found, NameNotFoundException is thrown.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004672 *
4673 * @param activityName Name of the activity whose resources are to be
4674 * retrieved.
4675 *
4676 * @return Returns the application's Resources.
4677 * @throws NameNotFoundException Thrown if the resources for the given
4678 * application could not be loaded.
4679 *
4680 * @see #getResourcesForApplication(ApplicationInfo)
4681 */
4682 public abstract Resources getResourcesForActivity(ComponentName activityName)
4683 throws NameNotFoundException;
4684
4685 /**
4686 * Retrieve the resources for an application. Throws NameNotFoundException
4687 * if the package is no longer installed.
4688 *
4689 * @param app Information about the desired application.
4690 *
4691 * @return Returns the application's Resources.
4692 * @throws NameNotFoundException Thrown if the resources for the given
4693 * application could not be loaded (most likely because it was uninstalled).
4694 */
4695 public abstract Resources getResourcesForApplication(ApplicationInfo app)
4696 throws NameNotFoundException;
4697
4698 /**
4699 * Retrieve the resources associated with an application. Given the full
4700 * package name of an application, retrieves the information about it and
4701 * calls getResources() to return its application's resources. If the
kmccormick30498b42013-03-27 17:39:17 -07004702 * appPackageName cannot be found, NameNotFoundException is thrown.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004703 *
4704 * @param appPackageName Package name of the application whose resources
4705 * are to be retrieved.
4706 *
4707 * @return Returns the application's Resources.
4708 * @throws NameNotFoundException Thrown if the resources for the given
4709 * application could not be loaded.
4710 *
4711 * @see #getResourcesForApplication(ApplicationInfo)
4712 */
4713 public abstract Resources getResourcesForApplication(String appPackageName)
4714 throws NameNotFoundException;
4715
Amith Yamasani98edc952012-09-25 14:09:27 -07004716 /** @hide */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004717 public abstract Resources getResourcesForApplicationAsUser(String appPackageName,
4718 @UserIdInt int userId) throws NameNotFoundException;
Amith Yamasani98edc952012-09-25 14:09:27 -07004719
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004720 /**
4721 * Retrieve overall information about an application package defined
4722 * in a package archive file
4723 *
4724 * @param archiveFilePath The path to the archive file
4725 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004726 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
4727 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
4728 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
4729 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
4730 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
4731 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
4732 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
4733 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
4734 * {@link #MATCH_UNINSTALLED_PACKAGES}
4735 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004736 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004737 * @return A PackageInfo object containing information about the
4738 * package archive. If the package could not be parsed,
4739 * returns null.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004740 *
4741 * @see #GET_ACTIVITIES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004742 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004743 * @see #GET_GIDS
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004744 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004745 * @see #GET_INTENT_FILTERS
4746 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004747 * @see #GET_PERMISSIONS
4748 * @see #GET_PROVIDERS
4749 * @see #GET_RECEIVERS
4750 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004751 * @see #GET_SHARED_LIBRARY_FILES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004752 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004753 * @see #GET_URI_PERMISSION_PATTERNS
4754 * @see #MATCH_DISABLED_COMPONENTS
4755 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
4756 * @see #MATCH_UNINSTALLED_PACKAGES
Amith Yamasani4b2e9342011-03-31 12:38:53 -07004757 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004758 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004759 public PackageInfo getPackageArchiveInfo(String archiveFilePath, @PackageInfoFlags int flags) {
Jeff Sharkey275e0852014-06-17 18:18:49 -07004760 final PackageParser parser = new PackageParser();
4761 final File apkFile = new File(archiveFilePath);
Jeff Sharkeyc4858a22014-06-16 10:51:20 -07004762 try {
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004763 if ((flags & (MATCH_DIRECT_BOOT_UNAWARE | MATCH_DIRECT_BOOT_AWARE)) != 0) {
Jeff Sharkeyc3132512016-01-12 14:06:58 -07004764 // Caller expressed an explicit opinion about what encryption
4765 // aware/unaware components they want to see, so fall through and
4766 // give them what they want
4767 } else {
4768 // Caller expressed no opinion, so match everything
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004769 flags |= MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE;
Jeff Sharkeyc3132512016-01-12 14:06:58 -07004770 }
4771
Jeff Sharkey275e0852014-06-17 18:18:49 -07004772 PackageParser.Package pkg = parser.parseMonolithicPackage(apkFile, 0);
Jeff Sharkeyc4858a22014-06-16 10:51:20 -07004773 if ((flags & GET_SIGNATURES) != 0) {
Svet Ganov354cd3c2015-12-17 11:35:04 -08004774 PackageParser.collectCertificates(pkg, 0);
Jeff Sharkeyc4858a22014-06-16 10:51:20 -07004775 }
4776 PackageUserState state = new PackageUserState();
4777 return PackageParser.generatePackageInfo(pkg, null, flags, 0, 0, null, state);
4778 } catch (PackageParserException e) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004779 return null;
4780 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004781 }
4782
4783 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004784 * @deprecated replaced by {@link PackageInstaller}
4785 * @hide
Jacek Surazski65e13172009-04-28 15:26:38 +02004786 */
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004787 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004788 public abstract void installPackage(
Todd Kennedya6793232016-02-24 22:46:00 +00004789 Uri packageURI,
4790 IPackageInstallObserver observer,
4791 @InstallFlags int flags,
Jacek Surazski65e13172009-04-28 15:26:38 +02004792 String installerPackageName);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004793 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004794 * @deprecated replaced by {@link PackageInstaller}
Christopher Tateab8a5012014-03-24 16:25:51 -07004795 * @hide
Christopher Tateab8a5012014-03-24 16:25:51 -07004796 */
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004797 @Deprecated
Todd Kennedya6793232016-02-24 22:46:00 +00004798 public abstract void installPackage(
4799 Uri packageURI,
4800 PackageInstallObserver observer,
4801 @InstallFlags int flags,
4802 String installerPackageName);
Christopher Tateab8a5012014-03-24 16:25:51 -07004803
rich cannings706e8ba2012-08-20 13:20:14 -07004804 /**
Dianne Hackborn7767eac2012-08-23 18:25:40 -07004805 * If there is already an application with the given package name installed
4806 * on the system for other users, also install it for the calling user.
4807 * @hide
4808 */
Nicolas Prevot9a80e532015-09-23 15:49:28 +01004809 public abstract int installExistingPackage(String packageName) throws NameNotFoundException;
4810
4811 /**
4812 * If there is already an application with the given package name installed
4813 * on the system for other users, also install it for the specified user.
4814 * @hide
4815 */
4816 @RequiresPermission(anyOf = {
4817 Manifest.permission.INSTALL_PACKAGES,
4818 Manifest.permission.INTERACT_ACROSS_USERS_FULL})
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004819 public abstract int installExistingPackageAsUser(String packageName, @UserIdInt int userId)
Dianne Hackborn7767eac2012-08-23 18:25:40 -07004820 throws NameNotFoundException;
4821
4822 /**
Kenny Root5ab21572011-07-27 11:11:19 -07004823 * Allows a package listening to the
4824 * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification
Kenny Root3a9b5fb2011-09-20 14:15:38 -07004825 * broadcast} to respond to the package manager. The response must include
4826 * the {@code verificationCode} which is one of
4827 * {@link PackageManager#VERIFICATION_ALLOW} or
4828 * {@link PackageManager#VERIFICATION_REJECT}.
Kenny Root5ab21572011-07-27 11:11:19 -07004829 *
4830 * @param id pending package identifier as passed via the
kmccormick30498b42013-03-27 17:39:17 -07004831 * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra.
Kenny Root3a9b5fb2011-09-20 14:15:38 -07004832 * @param verificationCode either {@link PackageManager#VERIFICATION_ALLOW}
4833 * or {@link PackageManager#VERIFICATION_REJECT}.
rich cannings7e671512012-08-27 14:44:16 -07004834 * @throws SecurityException if the caller does not have the
Dianne Hackborn8832c182012-09-17 17:20:24 -07004835 * PACKAGE_VERIFICATION_AGENT permission.
Kenny Root5ab21572011-07-27 11:11:19 -07004836 */
Kenny Root3a9b5fb2011-09-20 14:15:38 -07004837 public abstract void verifyPendingInstall(int id, int verificationCode);
Kenny Root5ab21572011-07-27 11:11:19 -07004838
4839 /**
rich canningsd9ef3e52012-08-22 14:28:05 -07004840 * Allows a package listening to the
4841 * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification
4842 * broadcast} to extend the default timeout for a response and declare what
4843 * action to perform after the timeout occurs. The response must include
4844 * the {@code verificationCodeAtTimeout} which is one of
4845 * {@link PackageManager#VERIFICATION_ALLOW} or
4846 * {@link PackageManager#VERIFICATION_REJECT}.
4847 *
4848 * This method may only be called once per package id. Additional calls
4849 * will have no effect.
4850 *
4851 * @param id pending package identifier as passed via the
kmccormick30498b42013-03-27 17:39:17 -07004852 * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra.
rich canningsd9ef3e52012-08-22 14:28:05 -07004853 * @param verificationCodeAtTimeout either
4854 * {@link PackageManager#VERIFICATION_ALLOW} or
rich canningsd1b5cfc2012-08-29 14:49:51 -07004855 * {@link PackageManager#VERIFICATION_REJECT}. If
4856 * {@code verificationCodeAtTimeout} is neither
4857 * {@link PackageManager#VERIFICATION_ALLOW} or
4858 * {@link PackageManager#VERIFICATION_REJECT}, then
4859 * {@code verificationCodeAtTimeout} will default to
rich canningsd9ef3e52012-08-22 14:28:05 -07004860 * {@link PackageManager#VERIFICATION_REJECT}.
4861 * @param millisecondsToDelay the amount of time requested for the timeout.
4862 * Must be positive and less than
rich canningsd1b5cfc2012-08-29 14:49:51 -07004863 * {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}. If
4864 * {@code millisecondsToDelay} is out of bounds,
4865 * {@code millisecondsToDelay} will be set to the closest in
4866 * bounds value; namely, 0 or
rich canningsd9ef3e52012-08-22 14:28:05 -07004867 * {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}.
rich cannings7e671512012-08-27 14:44:16 -07004868 * @throws SecurityException if the caller does not have the
Dianne Hackborn8832c182012-09-17 17:20:24 -07004869 * PACKAGE_VERIFICATION_AGENT permission.
rich canningsd9ef3e52012-08-22 14:28:05 -07004870 */
4871 public abstract void extendVerificationTimeout(int id,
4872 int verificationCodeAtTimeout, long millisecondsToDelay);
4873
4874 /**
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004875 * Allows a package listening to the
Todd Kennedydfa93ab2016-03-03 15:24:33 -08004876 * {@link Intent#ACTION_INTENT_FILTER_NEEDS_VERIFICATION} intent filter verification
4877 * broadcast to respond to the package manager. The response must include
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004878 * the {@code verificationCode} which is one of
4879 * {@link PackageManager#INTENT_FILTER_VERIFICATION_SUCCESS} or
4880 * {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}.
4881 *
4882 * @param verificationId pending package identifier as passed via the
4883 * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra.
4884 * @param verificationCode either {@link PackageManager#INTENT_FILTER_VERIFICATION_SUCCESS}
4885 * or {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}.
Todd Kennedydfa93ab2016-03-03 15:24:33 -08004886 * @param failedDomains a list of failed domains if the verificationCode is
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004887 * {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}, otherwise null;
4888 * @throws SecurityException if the caller does not have the
4889 * INTENT_FILTER_VERIFICATION_AGENT permission.
4890 *
4891 * @hide
4892 */
Fabrice Di Meglioef741da2015-05-12 16:31:38 -07004893 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004894 public abstract void verifyIntentFilter(int verificationId, int verificationCode,
Todd Kennedydfa93ab2016-03-03 15:24:33 -08004895 List<String> failedDomains);
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004896
4897 /**
4898 * Get the status of a Domain Verification Result for an IntentFilter. This is
4899 * related to the {@link android.content.IntentFilter#setAutoVerify(boolean)} and
4900 * {@link android.content.IntentFilter#getAutoVerify()}
4901 *
4902 * This is used by the ResolverActivity to change the status depending on what the User select
4903 * in the Disambiguation Dialog and also used by the Settings App for changing the default App
4904 * for a domain.
4905 *
4906 * @param packageName The package name of the Activity associated with the IntentFilter.
4907 * @param userId The user id.
4908 *
4909 * @return The status to set to. This can be
4910 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK} or
4911 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS} or
4912 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER} or
4913 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED}
4914 *
4915 * @hide
4916 */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004917 public abstract int getIntentVerificationStatusAsUser(String packageName, @UserIdInt int userId);
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004918
4919 /**
4920 * Allow to change the status of a Intent Verification status for all IntentFilter of an App.
4921 * This is related to the {@link android.content.IntentFilter#setAutoVerify(boolean)} and
4922 * {@link android.content.IntentFilter#getAutoVerify()}
4923 *
4924 * This is used by the ResolverActivity to change the status depending on what the User select
4925 * in the Disambiguation Dialog and also used by the Settings App for changing the default App
4926 * for a domain.
4927 *
4928 * @param packageName The package name of the Activity associated with the IntentFilter.
4929 * @param status The status to set to. This can be
4930 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK} or
4931 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS} or
4932 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER}
4933 * @param userId The user id.
4934 *
4935 * @return true if the status has been set. False otherwise.
4936 *
4937 * @hide
4938 */
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07004939 public abstract boolean updateIntentVerificationStatusAsUser(String packageName, int status,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004940 @UserIdInt int userId);
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004941
4942 /**
4943 * Get the list of IntentFilterVerificationInfo for a specific package and User.
4944 *
4945 * @param packageName the package name. When this parameter is set to a non null value,
4946 * the results will be filtered by the package name provided.
4947 * Otherwise, there will be no filtering and it will return a list
Fabrice Di Meglio07885952015-04-06 19:41:28 -07004948 * corresponding for all packages
4949 *
4950 * @return a list of IntentFilterVerificationInfo for a specific package.
4951 *
4952 * @hide
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004953 */
4954 public abstract List<IntentFilterVerificationInfo> getIntentFilterVerifications(
4955 String packageName);
4956
4957 /**
Fabrice Di Meglio07885952015-04-06 19:41:28 -07004958 * Get the list of IntentFilter for a specific package.
4959 *
4960 * @param packageName the package name. This parameter is set to a non null value,
4961 * the list will contain all the IntentFilter for that package.
4962 * Otherwise, the list will be empty.
4963 *
4964 * @return a list of IntentFilter for a specific package.
4965 *
4966 * @hide
4967 */
4968 public abstract List<IntentFilter> getAllIntentFilters(String packageName);
4969
4970 /**
Fabrice Di Meglio62271722015-04-10 17:24:02 -07004971 * Get the default Browser package name for a specific user.
4972 *
4973 * @param userId The user id.
4974 *
4975 * @return the package name of the default Browser for the specified user. If the user id passed
4976 * is -1 (all users) it will return a null value.
4977 *
4978 * @hide
4979 */
Jeff Sharkeya73b8fd2016-01-06 17:02:08 -07004980 @TestApi
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004981 public abstract String getDefaultBrowserPackageNameAsUser(@UserIdInt int userId);
Fabrice Di Meglio62271722015-04-10 17:24:02 -07004982
4983 /**
4984 * Set the default Browser package name for a specific user.
4985 *
4986 * @param packageName The package name of the default Browser.
4987 * @param userId The user id.
4988 *
4989 * @return true if the default Browser for the specified user has been set,
4990 * otherwise return false. If the user id passed is -1 (all users) this call will not
4991 * do anything and just return false.
4992 *
4993 * @hide
4994 */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004995 public abstract boolean setDefaultBrowserPackageNameAsUser(String packageName,
4996 @UserIdInt int userId);
Fabrice Di Meglio62271722015-04-10 17:24:02 -07004997
4998 /**
Dianne Hackborn880119b2010-11-18 22:26:40 -08004999 * Change the installer associated with a given package. There are limitations
5000 * on how the installer package can be changed; in particular:
5001 * <ul>
5002 * <li> A SecurityException will be thrown if <var>installerPackageName</var>
5003 * is not signed with the same certificate as the calling application.
5004 * <li> A SecurityException will be thrown if <var>targetPackage</var> already
5005 * has an installer package, and that installer package is not signed with
5006 * the same certificate as the calling application.
5007 * </ul>
5008 *
5009 * @param targetPackage The installed package whose installer will be changed.
5010 * @param installerPackageName The package name of the new installer. May be
5011 * null to clear the association.
5012 */
5013 public abstract void setInstallerPackageName(String targetPackage,
5014 String installerPackageName);
5015
5016 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005017 * Attempts to delete a package. Since this may take a little while, the
5018 * result will be posted back to the given observer. A deletion will fail if
5019 * the calling context lacks the
5020 * {@link android.Manifest.permission#DELETE_PACKAGES} permission, if the
5021 * named package cannot be found, or if the named package is a system
5022 * package.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005023 *
5024 * @param packageName The name of the package to delete
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005025 * @param observer An observer callback to get notified when the package
5026 * deletion is complete.
5027 * {@link android.content.pm.IPackageDeleteObserver#packageDeleted}
5028 * will be called when that happens. observer may be null to
5029 * indicate that no callback is desired.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005030 * @hide
5031 */
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005032 public abstract void deletePackage(String packageName, IPackageDeleteObserver observer,
5033 @DeleteFlags int flags);
Jacek Surazski65e13172009-04-28 15:26:38 +02005034
5035 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005036 * Attempts to delete a package. Since this may take a little while, the
5037 * result will be posted back to the given observer. A deletion will fail if
5038 * the named package cannot be found, or if the named package is a system
5039 * package.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01005040 *
5041 * @param packageName The name of the package to delete
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005042 * @param observer An observer callback to get notified when the package
5043 * deletion is complete.
5044 * {@link android.content.pm.IPackageDeleteObserver#packageDeleted}
5045 * will be called when that happens. observer may be null to
5046 * indicate that no callback is desired.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01005047 * @param userId The user Id
Nicolas Prevot9a80e532015-09-23 15:49:28 +01005048 * @hide
5049 */
5050 @RequiresPermission(anyOf = {
5051 Manifest.permission.DELETE_PACKAGES,
5052 Manifest.permission.INTERACT_ACROSS_USERS_FULL})
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005053 public abstract void deletePackageAsUser(String packageName, IPackageDeleteObserver observer,
5054 @DeleteFlags int flags, @UserIdInt int userId);
Nicolas Prevot9a80e532015-09-23 15:49:28 +01005055
5056 /**
Jacek Surazski65e13172009-04-28 15:26:38 +02005057 * Retrieve the package name of the application that installed a package. This identifies
5058 * which market the package came from.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005059 *
Jacek Surazski65e13172009-04-28 15:26:38 +02005060 * @param packageName The name of the package to query
5061 */
5062 public abstract String getInstallerPackageName(String packageName);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005063
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005064 /**
5065 * Attempts to clear the user data directory of an application.
5066 * Since this may take a little while, the result will
5067 * be posted back to the given observer. A deletion will fail if the
5068 * named package cannot be found, or if the named package is a "system package".
5069 *
5070 * @param packageName The name of the package
5071 * @param observer An observer callback to get notified when the operation is finished
5072 * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
5073 * will be called when that happens. observer may be null to indicate that
5074 * no callback is desired.
5075 *
5076 * @hide
5077 */
5078 public abstract void clearApplicationUserData(String packageName,
5079 IPackageDataObserver observer);
5080 /**
5081 * Attempts to delete the cache files associated with an application.
5082 * Since this may take a little while, the result will
5083 * be posted back to the given observer. A deletion will fail if the calling context
5084 * lacks the {@link android.Manifest.permission#DELETE_CACHE_FILES} permission, if the
5085 * named package cannot be found, or if the named package is a "system package".
5086 *
5087 * @param packageName The name of the package to delete
5088 * @param observer An observer callback to get notified when the cache file deletion
5089 * is complete.
5090 * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
5091 * will be called when that happens. observer may be null to indicate that
5092 * no callback is desired.
5093 *
5094 * @hide
5095 */
5096 public abstract void deleteApplicationCacheFiles(String packageName,
5097 IPackageDataObserver observer);
5098
5099 /**
Suprabh Shukla78c9eb82016-04-12 15:51:35 -07005100 * Attempts to delete the cache files associated with an application for a given user. Since
5101 * this may take a little while, the result will be posted back to the given observer. A
5102 * deletion will fail if the calling context lacks the
5103 * {@link android.Manifest.permission#DELETE_CACHE_FILES} permission, if the named package
5104 * cannot be found, or if the named package is a "system package". If {@code userId} does not
5105 * belong to the calling user, the caller must have
5106 * {@link android.Manifest.permission#INTERACT_ACROSS_USERS} permission.
5107 *
5108 * @param packageName The name of the package to delete
5109 * @param userId the user for which the cache files needs to be deleted
5110 * @param observer An observer callback to get notified when the cache file deletion is
5111 * complete.
5112 * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
5113 * will be called when that happens. observer may be null to indicate that no
5114 * callback is desired.
5115 * @hide
5116 */
5117 public abstract void deleteApplicationCacheFilesAsUser(String packageName, int userId,
5118 IPackageDataObserver observer);
5119
5120 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005121 * Free storage by deleting LRU sorted list of cache files across
5122 * all applications. If the currently available free storage
5123 * on the device is greater than or equal to the requested
5124 * free storage, no cache files are cleared. If the currently
5125 * available storage on the device is less than the requested
5126 * free storage, some or all of the cache files across
5127 * all applications are deleted (based on last accessed time)
5128 * to increase the free storage space on the device to
5129 * the requested value. There is no guarantee that clearing all
5130 * the cache files from all applications will clear up
5131 * enough storage to achieve the desired value.
5132 * @param freeStorageSize The number of bytes of storage to be
5133 * freed by the system. Say if freeStorageSize is XX,
5134 * and the current free storage is YY,
5135 * if XX is less than YY, just return. if not free XX-YY number
5136 * of bytes if possible.
5137 * @param observer call back used to notify when
5138 * the operation is completed
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005139 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005140 * @hide
5141 */
Jeff Sharkey529f91f2015-04-18 20:23:13 -07005142 public void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer) {
5143 freeStorageAndNotify(null, freeStorageSize, observer);
5144 }
5145
5146 /** {@hide} */
5147 public abstract void freeStorageAndNotify(String volumeUuid, long freeStorageSize,
5148 IPackageDataObserver observer);
Suchi Amalapurapu1ccac752009-06-12 10:09:58 -07005149
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005150 /**
5151 * Free storage by deleting LRU sorted list of cache files across
5152 * all applications. If the currently available free storage
5153 * on the device is greater than or equal to the requested
5154 * free storage, no cache files are cleared. If the currently
5155 * available storage on the device is less than the requested
5156 * free storage, some or all of the cache files across
5157 * all applications are deleted (based on last accessed time)
5158 * to increase the free storage space on the device to
5159 * the requested value. There is no guarantee that clearing all
5160 * the cache files from all applications will clear up
5161 * enough storage to achieve the desired value.
5162 * @param freeStorageSize The number of bytes of storage to be
5163 * freed by the system. Say if freeStorageSize is XX,
5164 * and the current free storage is YY,
5165 * if XX is less than YY, just return. if not free XX-YY number
5166 * of bytes if possible.
Suchi Amalapurapu1ccac752009-06-12 10:09:58 -07005167 * @param pi IntentSender call back used to
5168 * notify when the operation is completed.May be null
5169 * to indicate that no call back is desired.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005170 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005171 * @hide
5172 */
Jeff Sharkey529f91f2015-04-18 20:23:13 -07005173 public void freeStorage(long freeStorageSize, IntentSender pi) {
5174 freeStorage(null, freeStorageSize, pi);
5175 }
5176
5177 /** {@hide} */
5178 public abstract void freeStorage(String volumeUuid, long freeStorageSize, IntentSender pi);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005179
5180 /**
5181 * Retrieve the size information for a package.
5182 * Since this may take a little while, the result will
5183 * be posted back to the given observer. The calling context
5184 * should have the {@link android.Manifest.permission#GET_PACKAGE_SIZE} permission.
5185 *
5186 * @param packageName The name of the package whose size information is to be retrieved
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005187 * @param userId The user whose size information should be retrieved.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005188 * @param observer An observer callback to get notified when the operation
5189 * is complete.
5190 * {@link android.content.pm.IPackageStatsObserver#onGetStatsCompleted(PackageStats, boolean)}
5191 * The observer's callback is invoked with a PackageStats object(containing the
5192 * code, data and cache sizes of the package) and a boolean value representing
5193 * the status of the operation. observer may be null to indicate that
5194 * no callback is desired.
5195 *
5196 * @hide
5197 */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07005198 public abstract void getPackageSizeInfoAsUser(String packageName, @UserIdInt int userId,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005199 IPackageStatsObserver observer);
5200
5201 /**
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005202 * Like {@link #getPackageSizeInfoAsUser(String, int, IPackageStatsObserver)}, but
Dianne Hackborn0c380492012-08-20 17:23:30 -07005203 * returns the size for the calling user.
5204 *
5205 * @hide
5206 */
5207 public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) {
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005208 getPackageSizeInfoAsUser(packageName, UserHandle.myUserId(), observer);
Dianne Hackborn0c380492012-08-20 17:23:30 -07005209 }
5210
5211 /**
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005212 * @deprecated This function no longer does anything; it was an old
kmccormickac66b852013-03-28 15:17:15 -07005213 * approach to managing preferred activities, which has been superseded
5214 * by (and conflicts with) the modern activity-based preferences.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005215 */
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005216 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005217 public abstract void addPackageToPreferred(String packageName);
5218
5219 /**
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005220 * @deprecated This function no longer does anything; it was an old
kmccormickac66b852013-03-28 15:17:15 -07005221 * approach to managing preferred activities, which has been superseded
5222 * by (and conflicts with) the modern activity-based preferences.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005223 */
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005224 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005225 public abstract void removePackageFromPreferred(String packageName);
5226
5227 /**
Jeff Sharkey629f9842016-01-08 16:36:54 -07005228 * Retrieve the list of all currently configured preferred packages. The
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005229 * first package on the list is the most preferred, the last is the
5230 * least preferred.
5231 *
5232 * @param flags Additional option flags. Use any combination of
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005233 * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
5234 * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
5235 * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
5236 * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
5237 * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
5238 * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
5239 * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
5240 * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
5241 * {@link #MATCH_UNINSTALLED_PACKAGES}
5242 * to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005243 *
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005244 * @return A List of PackageInfo objects, one for each preferred application,
5245 * in order of preference.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005246 *
5247 * @see #GET_ACTIVITIES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005248 * @see #GET_CONFIGURATIONS
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005249 * @see #GET_GIDS
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005250 * @see #GET_INSTRUMENTATION
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005251 * @see #GET_INTENT_FILTERS
5252 * @see #GET_META_DATA
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005253 * @see #GET_PERMISSIONS
5254 * @see #GET_PROVIDERS
5255 * @see #GET_RECEIVERS
5256 * @see #GET_SERVICES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005257 * @see #GET_SHARED_LIBRARY_FILES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005258 * @see #GET_SIGNATURES
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08005259 * @see #GET_URI_PERMISSION_PATTERNS
5260 * @see #MATCH_DISABLED_COMPONENTS
5261 * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
5262 * @see #MATCH_UNINSTALLED_PACKAGES
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005263 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07005264 public abstract List<PackageInfo> getPreferredPackages(@PackageInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005265
5266 /**
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005267 * @deprecated This is a protected API that should not have been available
5268 * to third party applications. It is the platform's responsibility for
kmccormick30498b42013-03-27 17:39:17 -07005269 * assigning preferred activities and this cannot be directly modified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005270 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005271 * Add a new preferred activity mapping to the system. This will be used
5272 * to automatically select the given activity component when
5273 * {@link Context#startActivity(Intent) Context.startActivity()} finds
5274 * multiple matching activities and also matches the given filter.
5275 *
5276 * @param filter The set of intents under which this activity will be
5277 * made preferred.
5278 * @param match The IntentFilter match category that this preference
5279 * applies to.
5280 * @param set The set of activities that the user was picking from when
5281 * this preference was made.
5282 * @param activity The component name of the activity that is to be
5283 * preferred.
5284 */
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005285 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005286 public abstract void addPreferredActivity(IntentFilter filter, int match,
5287 ComponentName[] set, ComponentName activity);
5288
5289 /**
Amith Yamasania3f133a2012-08-09 17:11:28 -07005290 * Same as {@link #addPreferredActivity(IntentFilter, int,
5291 ComponentName[], ComponentName)}, but with a specific userId to apply the preference
5292 to.
5293 * @hide
5294 */
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005295 public void addPreferredActivityAsUser(IntentFilter filter, int match,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07005296 ComponentName[] set, ComponentName activity, @UserIdInt int userId) {
Amith Yamasania3f133a2012-08-09 17:11:28 -07005297 throw new RuntimeException("Not implemented. Must override in a subclass.");
5298 }
5299
5300 /**
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005301 * @deprecated This is a protected API that should not have been available
5302 * to third party applications. It is the platform's responsibility for
kmccormick30498b42013-03-27 17:39:17 -07005303 * assigning preferred activities and this cannot be directly modified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005304 *
Satish Sampath8dbe6122009-06-02 23:35:54 +01005305 * Replaces an existing preferred activity mapping to the system, and if that were not present
5306 * adds a new preferred activity. This will be used
5307 * to automatically select the given activity component when
5308 * {@link Context#startActivity(Intent) Context.startActivity()} finds
5309 * multiple matching activities and also matches the given filter.
5310 *
5311 * @param filter The set of intents under which this activity will be
5312 * made preferred.
5313 * @param match The IntentFilter match category that this preference
5314 * applies to.
5315 * @param set The set of activities that the user was picking from when
5316 * this preference was made.
5317 * @param activity The component name of the activity that is to be
5318 * preferred.
5319 * @hide
5320 */
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005321 @Deprecated
Satish Sampath8dbe6122009-06-02 23:35:54 +01005322 public abstract void replacePreferredActivity(IntentFilter filter, int match,
5323 ComponentName[] set, ComponentName activity);
5324
5325 /**
Amith Yamasani41c1ded2014-08-05 11:15:05 -07005326 * @hide
5327 */
5328 @Deprecated
5329 public void replacePreferredActivityAsUser(IntentFilter filter, int match,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07005330 ComponentName[] set, ComponentName activity, @UserIdInt int userId) {
Amith Yamasani41c1ded2014-08-05 11:15:05 -07005331 throw new RuntimeException("Not implemented. Must override in a subclass.");
5332 }
5333
5334 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005335 * Remove all preferred activity mappings, previously added with
5336 * {@link #addPreferredActivity}, from the
5337 * system whose activities are implemented in the given package name.
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005338 * An application can only clear its own package(s).
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005339 *
5340 * @param packageName The name of the package whose preferred activity
5341 * mappings are to be removed.
5342 */
5343 public abstract void clearPackagePreferredActivities(String packageName);
5344
5345 /**
5346 * Retrieve all preferred activities, previously added with
5347 * {@link #addPreferredActivity}, that are
5348 * currently registered with the system.
5349 *
John Spurlock38e64252015-03-18 12:09:32 -04005350 * @param outFilters A required list in which to place the filters of all of the
5351 * preferred activities.
5352 * @param outActivities A required list in which to place the component names of
5353 * all of the preferred activities.
5354 * @param packageName An optional package in which you would like to limit
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005355 * the list. If null, all activities will be returned; if non-null, only
5356 * those activities in the given package are returned.
5357 *
5358 * @return Returns the total number of registered preferred activities
5359 * (the number of distinct IntentFilter records, not the number of unique
5360 * activity components) that were found.
5361 */
John Spurlock38e64252015-03-18 12:09:32 -04005362 public abstract int getPreferredActivities(@NonNull List<IntentFilter> outFilters,
5363 @NonNull List<ComponentName> outActivities, String packageName);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005364
5365 /**
Christopher Tatea2a0850d2013-09-05 16:38:58 -07005366 * Ask for the set of available 'home' activities and the current explicit
5367 * default, if any.
5368 * @hide
5369 */
5370 public abstract ComponentName getHomeActivities(List<ResolveInfo> outActivities);
5371
5372 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005373 * Set the enabled setting for a package component (activity, receiver, service, provider).
5374 * This setting will override any enabled state which may have been set by the component in its
5375 * manifest.
5376 *
5377 * @param componentName The component to enable
5378 * @param newState The new enabled state for the component. The legal values for this state
5379 * are:
5380 * {@link #COMPONENT_ENABLED_STATE_ENABLED},
5381 * {@link #COMPONENT_ENABLED_STATE_DISABLED}
5382 * and
5383 * {@link #COMPONENT_ENABLED_STATE_DEFAULT}
5384 * The last one removes the setting, thereby restoring the component's state to
5385 * whatever was set in it's manifest (or enabled, by default).
5386 * @param flags Optional behavior flags: {@link #DONT_KILL_APP} or 0.
5387 */
5388 public abstract void setComponentEnabledSetting(ComponentName componentName,
5389 int newState, int flags);
5390
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005391 /**
Amaury Medeirosdde24262014-06-03 20:06:41 -03005392 * Return the enabled setting for a package component (activity,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005393 * receiver, service, provider). This returns the last value set by
5394 * {@link #setComponentEnabledSetting(ComponentName, int, int)}; in most
5395 * cases this value will be {@link #COMPONENT_ENABLED_STATE_DEFAULT} since
5396 * the value originally specified in the manifest has not been modified.
5397 *
5398 * @param componentName The component to retrieve.
5399 * @return Returns the current enabled state for the component. May
5400 * be one of {@link #COMPONENT_ENABLED_STATE_ENABLED},
5401 * {@link #COMPONENT_ENABLED_STATE_DISABLED}, or
5402 * {@link #COMPONENT_ENABLED_STATE_DEFAULT}. The last one means the
5403 * component's enabled state is based on the original information in
5404 * the manifest as found in {@link ComponentInfo}.
5405 */
5406 public abstract int getComponentEnabledSetting(ComponentName componentName);
5407
5408 /**
5409 * Set the enabled setting for an application
5410 * This setting will override any enabled state which may have been set by the application in
5411 * its manifest. It also overrides the enabled state set in the manifest for any of the
5412 * application's components. It does not override any enabled state set by
5413 * {@link #setComponentEnabledSetting} for any of the application's components.
5414 *
5415 * @param packageName The package name of the application to enable
5416 * @param newState The new enabled state for the component. The legal values for this state
5417 * are:
5418 * {@link #COMPONENT_ENABLED_STATE_ENABLED},
5419 * {@link #COMPONENT_ENABLED_STATE_DISABLED}
5420 * and
5421 * {@link #COMPONENT_ENABLED_STATE_DEFAULT}
5422 * The last one removes the setting, thereby restoring the applications's state to
5423 * whatever was set in its manifest (or enabled, by default).
5424 * @param flags Optional behavior flags: {@link #DONT_KILL_APP} or 0.
5425 */
5426 public abstract void setApplicationEnabledSetting(String packageName,
5427 int newState, int flags);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005428
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005429 /**
Amaury Medeirosdde24262014-06-03 20:06:41 -03005430 * Return the enabled setting for an application. This returns
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005431 * the last value set by
5432 * {@link #setApplicationEnabledSetting(String, int, int)}; in most
5433 * cases this value will be {@link #COMPONENT_ENABLED_STATE_DEFAULT} since
5434 * the value originally specified in the manifest has not been modified.
5435 *
Amaury Medeirosdde24262014-06-03 20:06:41 -03005436 * @param packageName The package name of the application to retrieve.
5437 * @return Returns the current enabled state for the application. May
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005438 * be one of {@link #COMPONENT_ENABLED_STATE_ENABLED},
5439 * {@link #COMPONENT_ENABLED_STATE_DISABLED}, or
5440 * {@link #COMPONENT_ENABLED_STATE_DEFAULT}. The last one means the
5441 * application's enabled state is based on the original information in
Kevin Hufnagle5add7692016-08-29 16:50:17 -07005442 * the manifest as found in {@link ApplicationInfo}.
Mathew Inwood1b9f8d92011-09-26 13:23:56 +01005443 * @throws IllegalArgumentException if the named package does not exist.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005444 */
5445 public abstract int getApplicationEnabledSetting(String packageName);
5446
5447 /**
Sudheer Shankabbb3ff22015-07-09 15:39:23 +01005448 * Flush the package restrictions for a given user to disk. This forces the package restrictions
5449 * like component and package enabled settings to be written to disk and avoids the delay that
5450 * is otherwise present when changing those settings.
5451 *
5452 * @param userId Ther userId of the user whose restrictions are to be flushed.
5453 * @hide
5454 */
5455 public abstract void flushPackageRestrictionsAsUser(int userId);
5456
5457 /**
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005458 * Puts the package in a hidden state, which is almost like an uninstalled state,
Amith Yamasani655d0e22013-06-12 14:19:10 -07005459 * making the package unavailable, but it doesn't remove the data or the actual
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005460 * package file. Application can be unhidden by either resetting the hidden state
5461 * or by installing it, such as with {@link #installExistingPackage(String)}
Amith Yamasani655d0e22013-06-12 14:19:10 -07005462 * @hide
5463 */
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005464 public abstract boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden,
Amith Yamasani655d0e22013-06-12 14:19:10 -07005465 UserHandle userHandle);
5466
5467 /**
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005468 * Returns the hidden state of a package.
5469 * @see #setApplicationHiddenSettingAsUser(String, boolean, UserHandle)
Amith Yamasani655d0e22013-06-12 14:19:10 -07005470 * @hide
5471 */
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005472 public abstract boolean getApplicationHiddenSettingAsUser(String packageName,
Amith Yamasani655d0e22013-06-12 14:19:10 -07005473 UserHandle userHandle);
5474
5475 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005476 * Return whether the device has been booted into safe mode.
5477 */
5478 public abstract boolean isSafeMode();
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08005479
5480 /**
Svetoslavf7c06eb2015-06-10 18:43:22 -07005481 * Adds a listener for permission changes for installed packages.
5482 *
5483 * @param listener The listener to add.
5484 *
5485 * @hide
5486 */
5487 @SystemApi
5488 @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS)
5489 public abstract void addOnPermissionsChangeListener(OnPermissionsChangedListener listener);
5490
5491 /**
5492 * Remvoes a listener for permission changes for installed packages.
5493 *
5494 * @param listener The listener to remove.
5495 *
5496 * @hide
5497 */
5498 @SystemApi
5499 public abstract void removeOnPermissionsChangeListener(OnPermissionsChangedListener listener);
5500
5501 /**
dcashman9d2f4412014-06-09 09:27:54 -07005502 * Return the {@link KeySet} associated with the String alias for this
5503 * application.
5504 *
5505 * @param alias The alias for a given {@link KeySet} as defined in the
5506 * application's AndroidManifest.xml.
dcashmanc6f22492014-08-14 09:54:51 -07005507 * @hide
dcashman9d2f4412014-06-09 09:27:54 -07005508 */
5509 public abstract KeySet getKeySetByAlias(String packageName, String alias);
5510
Ihab Awad1ec68882014-09-12 11:09:01 -07005511 /** Return the signing {@link KeySet} for this application.
dcashmanc6f22492014-08-14 09:54:51 -07005512 * @hide
5513 */
dcashman9d2f4412014-06-09 09:27:54 -07005514 public abstract KeySet getSigningKeySet(String packageName);
5515
5516 /**
5517 * Return whether the package denoted by packageName has been signed by all
5518 * of the keys specified by the {@link KeySet} ks. This will return true if
5519 * the package has been signed by additional keys (a superset) as well.
5520 * Compare to {@link #isSignedByExactly(String packageName, KeySet ks)}.
dcashmanc6f22492014-08-14 09:54:51 -07005521 * @hide
dcashman9d2f4412014-06-09 09:27:54 -07005522 */
5523 public abstract boolean isSignedBy(String packageName, KeySet ks);
5524
5525 /**
5526 * Return whether the package denoted by packageName has been signed by all
5527 * of, and only, the keys specified by the {@link KeySet} ks. Compare to
5528 * {@link #isSignedBy(String packageName, KeySet ks)}.
dcashmanc6f22492014-08-14 09:54:51 -07005529 * @hide
dcashman9d2f4412014-06-09 09:27:54 -07005530 */
5531 public abstract boolean isSignedByExactly(String packageName, KeySet ks);
5532
5533 /**
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005534 * Puts the package in a suspended state, where attempts at starting activities are denied.
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005535 *
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005536 * <p>It doesn't remove the data or the actual package file. The application notifications
5537 * will be hidden, the application will not show up in recents, will not be able to show
5538 * toasts or dialogs or ring the device.
5539 *
Kenny Guy871f3eb2016-03-09 20:06:16 +00005540 * <p>The package must already be installed. If the package is uninstalled while suspended
5541 * the package will no longer be suspended.
5542 *
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005543 * @param packageNames The names of the packages to set the suspended status.
5544 * @param suspended If set to {@code true} than the packages will be suspended, if set to
5545 * {@code false} the packages will be unsuspended.
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005546 * @param userId The user id.
5547 *
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005548 * @return an array of package names for which the suspended status is not set as requested in
5549 * this method.
5550 *
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005551 * @hide
5552 */
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005553 public abstract String[] setPackagesSuspendedAsUser(
5554 String[] packageNames, boolean suspended, @UserIdInt int userId);
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005555
Andrei Stingaceanu355b2322016-02-12 16:43:51 +00005556 /**
5557 * @see #setPackageSuspendedAsUser(String, boolean, int)
5558 * @param packageName The name of the package to get the suspended status of.
5559 * @param userId The user id.
5560 * @return {@code true} if the package is suspended or {@code false} if the package is not
5561 * suspended or could not be found.
5562 * @hide
5563 */
5564 public abstract boolean isPackageSuspendedForUser(String packageName, int userId);
5565
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -07005566 /** {@hide} */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005567 public static boolean isMoveStatusFinished(int status) {
5568 return (status < 0 || status > 100);
5569 }
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005570
Jeff Sharkeye2d45be2015-04-15 17:14:12 -07005571 /** {@hide} */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005572 public static abstract class MoveCallback {
Jeff Sharkey50a05452015-04-29 11:24:52 -07005573 public void onCreated(int moveId, Bundle extras) {}
5574 public abstract void onStatusChanged(int moveId, int status, long estMillis);
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005575 }
Jeff Sharkeye2d45be2015-04-15 17:14:12 -07005576
5577 /** {@hide} */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005578 public abstract int getMoveStatus(int moveId);
5579
5580 /** {@hide} */
5581 public abstract void registerMoveCallback(MoveCallback callback, Handler handler);
5582 /** {@hide} */
5583 public abstract void unregisterMoveCallback(MoveCallback callback);
5584
5585 /** {@hide} */
5586 public abstract int movePackage(String packageName, VolumeInfo vol);
5587 /** {@hide} */
5588 public abstract @Nullable VolumeInfo getPackageCurrentVolume(ApplicationInfo app);
5589 /** {@hide} */
5590 public abstract @NonNull List<VolumeInfo> getPackageCandidateVolumes(ApplicationInfo app);
5591
5592 /** {@hide} */
5593 public abstract int movePrimaryStorage(VolumeInfo vol);
5594 /** {@hide} */
5595 public abstract @Nullable VolumeInfo getPrimaryStorageCurrentVolume();
5596 /** {@hide} */
5597 public abstract @NonNull List<VolumeInfo> getPrimaryStorageCandidateVolumes();
Jeff Sharkeye2d45be2015-04-15 17:14:12 -07005598
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005599 /**
Amith Yamasani13593602012-03-22 16:16:17 -07005600 * Returns the device identity that verifiers can use to associate their scheme to a particular
5601 * device. This should not be used by anything other than a package verifier.
Aravind Akella068b0c02013-10-12 17:39:15 -07005602 *
Kenny Root0aaa0d92011-09-12 16:42:55 -07005603 * @return identity that uniquely identifies current device
5604 * @hide
5605 */
5606 public abstract VerifierDeviceIdentity getVerifierDeviceIdentity();
Amith Yamasani742a6712011-05-04 14:49:28 -07005607
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005608 /**
Jeff Hao9f60c082014-10-28 18:51:07 -07005609 * Returns true if the device is upgrading, such as first boot after OTA.
5610 *
5611 * @hide
5612 */
5613 public abstract boolean isUpgrade();
5614
5615 /**
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005616 * Return interface that offers the ability to install, upgrade, and remove
5617 * applications on the device.
5618 */
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005619 public abstract @NonNull PackageInstaller getPackageInstaller();
Jeff Sharkey3a44f3f2014-04-28 17:36:31 -07005620
Amith Yamasani742a6712011-05-04 14:49:28 -07005621 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005622 * Adds a {@code CrossProfileIntentFilter}. After calling this method all
5623 * intents sent from the user with id sourceUserId can also be be resolved
5624 * by activities in the user with id targetUserId if they match the
5625 * specified intent filter.
5626 *
Nicolas Prevot3f7777f2014-07-24 15:58:39 +01005627 * @param filter The {@link IntentFilter} the intent has to match
5628 * @param sourceUserId The source user id.
5629 * @param targetUserId The target user id.
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005630 * @param flags The possible values are {@link #SKIP_CURRENT_PROFILE} and
5631 * {@link #ONLY_IF_NO_MATCH_FOUND}.
Nicolas Prevotc79586e2014-05-06 12:47:57 +01005632 * @hide
5633 */
Nicolas Prevot63798c52014-05-27 13:22:38 +01005634 public abstract void addCrossProfileIntentFilter(IntentFilter filter, int sourceUserId,
5635 int targetUserId, int flags);
Nicolas Prevotc79586e2014-05-06 12:47:57 +01005636
5637 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005638 * Clearing {@code CrossProfileIntentFilter}s which have the specified user
5639 * as their source, and have been set by the app calling this method.
5640 *
Nicolas Prevot3f7777f2014-07-24 15:58:39 +01005641 * @param sourceUserId The source user id.
Nicolas Prevotc79586e2014-05-06 12:47:57 +01005642 * @hide
5643 */
Nicolas Prevot81948992014-05-16 18:25:26 +01005644 public abstract void clearCrossProfileIntentFilters(int sourceUserId);
Alexandra Gherghina6e2ae252014-06-12 16:03:58 +01005645
5646 /**
Nicolas Prevot88cc3462014-05-14 14:51:48 +01005647 * @hide
5648 */
Nicolas Prevot7f7b0c72014-06-23 15:59:38 +01005649 public abstract Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo);
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005650
Benjamin Franzec2d48b2014-10-01 15:38:43 +01005651 /**
5652 * @hide
5653 */
5654 public abstract Drawable loadUnbadgedItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo);
5655
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005656 /** {@hide} */
5657 public abstract boolean isPackageAvailable(String packageName);
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005658
5659 /** {@hide} */
Jeff Sharkeya0907432014-08-15 10:23:11 -07005660 public static String installStatusToString(int status, String msg) {
5661 final String str = installStatusToString(status);
5662 if (msg != null) {
5663 return str + ": " + msg;
5664 } else {
5665 return str;
5666 }
5667 }
5668
5669 /** {@hide} */
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005670 public static String installStatusToString(int status) {
5671 switch (status) {
5672 case INSTALL_SUCCEEDED: return "INSTALL_SUCCEEDED";
5673 case INSTALL_FAILED_ALREADY_EXISTS: return "INSTALL_FAILED_ALREADY_EXISTS";
5674 case INSTALL_FAILED_INVALID_APK: return "INSTALL_FAILED_INVALID_APK";
5675 case INSTALL_FAILED_INVALID_URI: return "INSTALL_FAILED_INVALID_URI";
5676 case INSTALL_FAILED_INSUFFICIENT_STORAGE: return "INSTALL_FAILED_INSUFFICIENT_STORAGE";
5677 case INSTALL_FAILED_DUPLICATE_PACKAGE: return "INSTALL_FAILED_DUPLICATE_PACKAGE";
5678 case INSTALL_FAILED_NO_SHARED_USER: return "INSTALL_FAILED_NO_SHARED_USER";
5679 case INSTALL_FAILED_UPDATE_INCOMPATIBLE: return "INSTALL_FAILED_UPDATE_INCOMPATIBLE";
5680 case INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: return "INSTALL_FAILED_SHARED_USER_INCOMPATIBLE";
5681 case INSTALL_FAILED_MISSING_SHARED_LIBRARY: return "INSTALL_FAILED_MISSING_SHARED_LIBRARY";
5682 case INSTALL_FAILED_REPLACE_COULDNT_DELETE: return "INSTALL_FAILED_REPLACE_COULDNT_DELETE";
5683 case INSTALL_FAILED_DEXOPT: return "INSTALL_FAILED_DEXOPT";
5684 case INSTALL_FAILED_OLDER_SDK: return "INSTALL_FAILED_OLDER_SDK";
5685 case INSTALL_FAILED_CONFLICTING_PROVIDER: return "INSTALL_FAILED_CONFLICTING_PROVIDER";
5686 case INSTALL_FAILED_NEWER_SDK: return "INSTALL_FAILED_NEWER_SDK";
5687 case INSTALL_FAILED_TEST_ONLY: return "INSTALL_FAILED_TEST_ONLY";
5688 case INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: return "INSTALL_FAILED_CPU_ABI_INCOMPATIBLE";
5689 case INSTALL_FAILED_MISSING_FEATURE: return "INSTALL_FAILED_MISSING_FEATURE";
5690 case INSTALL_FAILED_CONTAINER_ERROR: return "INSTALL_FAILED_CONTAINER_ERROR";
5691 case INSTALL_FAILED_INVALID_INSTALL_LOCATION: return "INSTALL_FAILED_INVALID_INSTALL_LOCATION";
5692 case INSTALL_FAILED_MEDIA_UNAVAILABLE: return "INSTALL_FAILED_MEDIA_UNAVAILABLE";
5693 case INSTALL_FAILED_VERIFICATION_TIMEOUT: return "INSTALL_FAILED_VERIFICATION_TIMEOUT";
5694 case INSTALL_FAILED_VERIFICATION_FAILURE: return "INSTALL_FAILED_VERIFICATION_FAILURE";
5695 case INSTALL_FAILED_PACKAGE_CHANGED: return "INSTALL_FAILED_PACKAGE_CHANGED";
5696 case INSTALL_FAILED_UID_CHANGED: return "INSTALL_FAILED_UID_CHANGED";
5697 case INSTALL_FAILED_VERSION_DOWNGRADE: return "INSTALL_FAILED_VERSION_DOWNGRADE";
5698 case INSTALL_PARSE_FAILED_NOT_APK: return "INSTALL_PARSE_FAILED_NOT_APK";
5699 case INSTALL_PARSE_FAILED_BAD_MANIFEST: return "INSTALL_PARSE_FAILED_BAD_MANIFEST";
5700 case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return "INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION";
5701 case INSTALL_PARSE_FAILED_NO_CERTIFICATES: return "INSTALL_PARSE_FAILED_NO_CERTIFICATES";
5702 case INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES: return "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES";
5703 case INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING: return "INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING";
5704 case INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME: return "INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME";
5705 case INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: return "INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID";
5706 case INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: return "INSTALL_PARSE_FAILED_MANIFEST_MALFORMED";
5707 case INSTALL_PARSE_FAILED_MANIFEST_EMPTY: return "INSTALL_PARSE_FAILED_MANIFEST_EMPTY";
5708 case INSTALL_FAILED_INTERNAL_ERROR: return "INSTALL_FAILED_INTERNAL_ERROR";
5709 case INSTALL_FAILED_USER_RESTRICTED: return "INSTALL_FAILED_USER_RESTRICTED";
5710 case INSTALL_FAILED_DUPLICATE_PERMISSION: return "INSTALL_FAILED_DUPLICATE_PERMISSION";
5711 case INSTALL_FAILED_NO_MATCHING_ABIS: return "INSTALL_FAILED_NO_MATCHING_ABIS";
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005712 case INSTALL_FAILED_ABORTED: return "INSTALL_FAILED_ABORTED";
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005713 default: return Integer.toString(status);
5714 }
5715 }
5716
5717 /** {@hide} */
Jeff Sharkeya0907432014-08-15 10:23:11 -07005718 public static int installStatusToPublicStatus(int status) {
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005719 switch (status) {
Jeff Sharkeya0907432014-08-15 10:23:11 -07005720 case INSTALL_SUCCEEDED: return PackageInstaller.STATUS_SUCCESS;
5721 case INSTALL_FAILED_ALREADY_EXISTS: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5722 case INSTALL_FAILED_INVALID_APK: return PackageInstaller.STATUS_FAILURE_INVALID;
5723 case INSTALL_FAILED_INVALID_URI: return PackageInstaller.STATUS_FAILURE_INVALID;
5724 case INSTALL_FAILED_INSUFFICIENT_STORAGE: return PackageInstaller.STATUS_FAILURE_STORAGE;
5725 case INSTALL_FAILED_DUPLICATE_PACKAGE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5726 case INSTALL_FAILED_NO_SHARED_USER: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5727 case INSTALL_FAILED_UPDATE_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5728 case INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5729 case INSTALL_FAILED_MISSING_SHARED_LIBRARY: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5730 case INSTALL_FAILED_REPLACE_COULDNT_DELETE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5731 case INSTALL_FAILED_DEXOPT: return PackageInstaller.STATUS_FAILURE_INVALID;
5732 case INSTALL_FAILED_OLDER_SDK: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5733 case INSTALL_FAILED_CONFLICTING_PROVIDER: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5734 case INSTALL_FAILED_NEWER_SDK: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5735 case INSTALL_FAILED_TEST_ONLY: return PackageInstaller.STATUS_FAILURE_INVALID;
5736 case INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5737 case INSTALL_FAILED_MISSING_FEATURE: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5738 case INSTALL_FAILED_CONTAINER_ERROR: return PackageInstaller.STATUS_FAILURE_STORAGE;
5739 case INSTALL_FAILED_INVALID_INSTALL_LOCATION: return PackageInstaller.STATUS_FAILURE_STORAGE;
5740 case INSTALL_FAILED_MEDIA_UNAVAILABLE: return PackageInstaller.STATUS_FAILURE_STORAGE;
5741 case INSTALL_FAILED_VERIFICATION_TIMEOUT: return PackageInstaller.STATUS_FAILURE_ABORTED;
5742 case INSTALL_FAILED_VERIFICATION_FAILURE: return PackageInstaller.STATUS_FAILURE_ABORTED;
5743 case INSTALL_FAILED_PACKAGE_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID;
5744 case INSTALL_FAILED_UID_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID;
5745 case INSTALL_FAILED_VERSION_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID;
Svetoslavd9653702015-05-13 18:02:46 -07005746 case INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID;
Jeff Sharkeya0907432014-08-15 10:23:11 -07005747 case INSTALL_PARSE_FAILED_NOT_APK: return PackageInstaller.STATUS_FAILURE_INVALID;
5748 case INSTALL_PARSE_FAILED_BAD_MANIFEST: return PackageInstaller.STATUS_FAILURE_INVALID;
5749 case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return PackageInstaller.STATUS_FAILURE_INVALID;
5750 case INSTALL_PARSE_FAILED_NO_CERTIFICATES: return PackageInstaller.STATUS_FAILURE_INVALID;
5751 case INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES: return PackageInstaller.STATUS_FAILURE_INVALID;
5752 case INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING: return PackageInstaller.STATUS_FAILURE_INVALID;
5753 case INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME: return PackageInstaller.STATUS_FAILURE_INVALID;
5754 case INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: return PackageInstaller.STATUS_FAILURE_INVALID;
5755 case INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: return PackageInstaller.STATUS_FAILURE_INVALID;
5756 case INSTALL_PARSE_FAILED_MANIFEST_EMPTY: return PackageInstaller.STATUS_FAILURE_INVALID;
5757 case INSTALL_FAILED_INTERNAL_ERROR: return PackageInstaller.STATUS_FAILURE;
5758 case INSTALL_FAILED_USER_RESTRICTED: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5759 case INSTALL_FAILED_DUPLICATE_PERMISSION: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5760 case INSTALL_FAILED_NO_MATCHING_ABIS: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5761 case INSTALL_FAILED_ABORTED: return PackageInstaller.STATUS_FAILURE_ABORTED;
5762 default: return PackageInstaller.STATUS_FAILURE;
5763 }
5764 }
5765
5766 /** {@hide} */
5767 public static String deleteStatusToString(int status, String msg) {
5768 final String str = deleteStatusToString(status);
5769 if (msg != null) {
5770 return str + ": " + msg;
5771 } else {
5772 return str;
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005773 }
5774 }
5775
5776 /** {@hide} */
5777 public static String deleteStatusToString(int status) {
5778 switch (status) {
5779 case DELETE_SUCCEEDED: return "DELETE_SUCCEEDED";
5780 case DELETE_FAILED_INTERNAL_ERROR: return "DELETE_FAILED_INTERNAL_ERROR";
5781 case DELETE_FAILED_DEVICE_POLICY_MANAGER: return "DELETE_FAILED_DEVICE_POLICY_MANAGER";
5782 case DELETE_FAILED_USER_RESTRICTED: return "DELETE_FAILED_USER_RESTRICTED";
5783 case DELETE_FAILED_OWNER_BLOCKED: return "DELETE_FAILED_OWNER_BLOCKED";
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005784 case DELETE_FAILED_ABORTED: return "DELETE_FAILED_ABORTED";
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005785 default: return Integer.toString(status);
5786 }
5787 }
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005788
5789 /** {@hide} */
Jeff Sharkeya0907432014-08-15 10:23:11 -07005790 public static int deleteStatusToPublicStatus(int status) {
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005791 switch (status) {
Jeff Sharkeya0907432014-08-15 10:23:11 -07005792 case DELETE_SUCCEEDED: return PackageInstaller.STATUS_SUCCESS;
5793 case DELETE_FAILED_INTERNAL_ERROR: return PackageInstaller.STATUS_FAILURE;
5794 case DELETE_FAILED_DEVICE_POLICY_MANAGER: return PackageInstaller.STATUS_FAILURE_BLOCKED;
5795 case DELETE_FAILED_USER_RESTRICTED: return PackageInstaller.STATUS_FAILURE_BLOCKED;
5796 case DELETE_FAILED_OWNER_BLOCKED: return PackageInstaller.STATUS_FAILURE_BLOCKED;
5797 case DELETE_FAILED_ABORTED: return PackageInstaller.STATUS_FAILURE_ABORTED;
5798 default: return PackageInstaller.STATUS_FAILURE;
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005799 }
5800 }
Jeff Sharkey6c0b9da2014-08-07 22:07:11 -07005801
5802 /** {@hide} */
Svet Ganov77ab6a82015-07-03 12:03:02 -07005803 public static String permissionFlagToString(int flag) {
5804 switch (flag) {
Svetoslav4a5f4a22015-07-07 18:18:15 -07005805 case FLAG_PERMISSION_GRANTED_BY_DEFAULT: return "GRANTED_BY_DEFAULT";
5806 case FLAG_PERMISSION_POLICY_FIXED: return "POLICY_FIXED";
5807 case FLAG_PERMISSION_SYSTEM_FIXED: return "SYSTEM_FIXED";
5808 case FLAG_PERMISSION_USER_SET: return "USER_SET";
5809 case FLAG_PERMISSION_REVOKE_ON_UPGRADE: return "REVOKE_ON_UPGRADE";
5810 case FLAG_PERMISSION_USER_FIXED: return "USER_FIXED";
Svet Ganov9c165d72015-12-01 19:52:26 -08005811 case FLAG_PERMISSION_REVIEW_REQUIRED: return "REVIEW_REQUIRED";
Svet Ganov77ab6a82015-07-03 12:03:02 -07005812 default: return Integer.toString(flag);
5813 }
5814 }
5815
5816 /** {@hide} */
Jeff Sharkey6c0b9da2014-08-07 22:07:11 -07005817 public static class LegacyPackageInstallObserver extends PackageInstallObserver {
5818 private final IPackageInstallObserver mLegacy;
5819
5820 public LegacyPackageInstallObserver(IPackageInstallObserver legacy) {
5821 mLegacy = legacy;
5822 }
5823
5824 @Override
5825 public void onPackageInstalled(String basePackageName, int returnCode, String msg,
5826 Bundle extras) {
5827 if (mLegacy == null) return;
5828 try {
5829 mLegacy.packageInstalled(basePackageName, returnCode);
5830 } catch (RemoteException ignored) {
5831 }
5832 }
5833 }
5834
5835 /** {@hide} */
5836 public static class LegacyPackageDeleteObserver extends PackageDeleteObserver {
5837 private final IPackageDeleteObserver mLegacy;
5838
5839 public LegacyPackageDeleteObserver(IPackageDeleteObserver legacy) {
5840 mLegacy = legacy;
5841 }
5842
5843 @Override
5844 public void onPackageDeleted(String basePackageName, int returnCode, String msg) {
5845 if (mLegacy == null) return;
5846 try {
5847 mLegacy.packageDeleted(basePackageName, returnCode);
5848 } catch (RemoteException ignored) {
5849 }
5850 }
5851 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005852}