blob: 06dbc0b37f92cede745eaa9eae2c0f9ac5efa1d5 [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;
Todd Kennedy9106c642017-02-08 14:16:53 -080023import android.annotation.IntRange;
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -070024import android.annotation.NonNull;
Jeff Sharkeye2d45be2015-04-15 17:14:12 -070025import android.annotation.Nullable;
Svetoslavf7c06eb2015-06-10 18:43:22 -070026import android.annotation.RequiresPermission;
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -080027import android.annotation.SdkConstant;
28import android.annotation.SdkConstant.SdkConstantType;
Tor Norbye7b9c9122013-05-30 16:48:33 -070029import android.annotation.StringRes;
Jeff Sharkeybb580672014-07-10 12:10:25 -070030import android.annotation.SystemApi;
Jeff Sharkeya73b8fd2016-01-06 17:02:08 -070031import android.annotation.TestApi;
Jeff Sharkeybd940222016-01-08 11:07:13 -070032import android.annotation.UserIdInt;
Tor Norbye7b9c9122013-05-30 16:48:33 -070033import android.annotation.XmlRes;
Jeff Sharkey6c0b9da2014-08-07 22:07:11 -070034import android.app.PackageDeleteObserver;
Christopher Tatef1977b42014-03-24 16:25:51 -070035import android.app.PackageInstallObserver;
Amith Yamasani1d653272014-09-11 17:56:05 -070036import android.app.admin.DevicePolicyManager;
Jeff Sharkey60f95aa2017-03-08 13:57:15 -070037import android.app.usage.StorageStatsManager;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080038import android.content.ComponentName;
39import android.content.Context;
40import android.content.Intent;
41import android.content.IntentFilter;
Suchi Amalapurapu1ccac752009-06-12 10:09:58 -070042import android.content.IntentSender;
Jeff Sharkeyc4858a22014-06-16 10:51:20 -070043import android.content.pm.PackageParser.PackageParserException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080044import android.content.res.Resources;
45import android.content.res.XmlResourceParser;
Svetoslavc7d62f02014-09-04 15:39:54 -070046import android.graphics.Rect;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080047import android.graphics.drawable.Drawable;
48import android.net.Uri;
Jeff Sharkey6f4b2a32017-03-21 14:13:41 -060049import android.os.Build;
Jeff Sharkeybb580672014-07-10 12:10:25 -070050import android.os.Bundle;
Jeff Sharkey620b32b2015-04-23 19:36:02 -070051import android.os.Handler;
Jeff Sharkey6c0b9da2014-08-07 22:07:11 -070052import android.os.RemoteException;
Dianne Hackborn0c380492012-08-20 17:23:30 -070053import android.os.UserHandle;
Jeff Sharkey8a372a02016-03-16 16:25:45 -060054import android.os.UserManager;
Jeff Sharkey683bcd32017-03-18 17:54:51 -060055import android.os.storage.StorageManager;
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -070056import android.os.storage.VolumeInfo;
Todd Kennedy8fddf9d2017-04-17 15:16:12 -070057import android.provider.Settings;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080058import android.util.AndroidException;
Jeff Sharkeybd940222016-01-08 11:07:13 -070059import android.util.Log;
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -070060
Svetoslavc6d1c342015-02-26 14:44:43 -080061import com.android.internal.util.ArrayUtils;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080062
Jeff Sharkey6f4b2a32017-03-21 14:13:41 -060063import dalvik.system.VMRuntime;
64
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080065import java.io.File;
Tor Norbyed9273d62013-05-30 15:59:53 -070066import java.lang.annotation.Retention;
67import java.lang.annotation.RetentionPolicy;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080068import java.util.List;
69
70/**
71 * Class for retrieving various kinds of information related to the application
72 * packages that are currently installed on the device.
73 *
74 * You can find this class through {@link Context#getPackageManager}.
75 */
76public abstract class PackageManager {
Jeff Sharkeybd940222016-01-08 11:07:13 -070077 private static final String TAG = "PackageManager";
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080078
Jeff Sharkeye4697132016-02-06 19:46:15 -070079 /** {@hide} */
Jeff Sharkey8a372a02016-03-16 16:25:45 -060080 public static final boolean APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE = true;
Jeff Sharkeye4697132016-02-06 19:46:15 -070081
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080082 /**
83 * This exception is thrown when a given package, application, or component
kmccormick30498b42013-03-27 17:39:17 -070084 * name cannot be found.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080085 */
86 public static class NameNotFoundException extends AndroidException {
87 public NameNotFoundException() {
88 }
89
90 public NameNotFoundException(String name) {
91 super(name);
92 }
93 }
94
95 /**
Svetoslavf7c06eb2015-06-10 18:43:22 -070096 * Listener for changes in permissions granted to a UID.
97 *
98 * @hide
99 */
100 @SystemApi
101 public interface OnPermissionsChangedListener {
102
103 /**
104 * Called when the permissions for a UID change.
105 * @param uid The UID with a change.
106 */
107 public void onPermissionsChanged(int uid);
108 }
109
110 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700111 * As a guiding principle:
112 * <p>
113 * {@code GET_} flags are used to request additional data that may have been
114 * elided to save wire space.
115 * <p>
116 * {@code MATCH_} flags are used to include components or packages that
117 * would have otherwise been omitted from a result set by current system
118 * state.
119 */
120
121 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -0600122 @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700123 GET_ACTIVITIES,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800124 GET_CONFIGURATIONS,
125 GET_GIDS,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700126 GET_INSTRUMENTATION,
127 GET_INTENT_FILTERS,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700128 GET_META_DATA,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700129 GET_PERMISSIONS,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800130 GET_PROVIDERS,
131 GET_RECEIVERS,
132 GET_SERVICES,
133 GET_SHARED_LIBRARY_FILES,
134 GET_SIGNATURES,
135 GET_URI_PERMISSION_PATTERNS,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700136 MATCH_UNINSTALLED_PACKAGES,
137 MATCH_DISABLED_COMPONENTS,
138 MATCH_DISABLED_UNTIL_USED_COMPONENTS,
Jeff Sharkeyc5967e92016-01-07 18:50:29 -0700139 MATCH_SYSTEM_ONLY,
Todd Kennedyd6ee0ba2016-03-31 15:11:11 -0700140 MATCH_FACTORY_ONLY,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700141 MATCH_DEBUG_TRIAGED_MISSING,
Todd Kennedy9c9fdf22017-03-06 10:58:27 -0800142 MATCH_INSTANT,
Todd Kennedy1f397f42016-06-28 12:14:11 -0700143 GET_DISABLED_COMPONENTS,
144 GET_DISABLED_UNTIL_USED_COMPONENTS,
145 GET_UNINSTALLED_PACKAGES,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700146 })
147 @Retention(RetentionPolicy.SOURCE)
148 public @interface PackageInfoFlags {}
149
150 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -0600151 @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700152 GET_META_DATA,
153 GET_SHARED_LIBRARY_FILES,
154 MATCH_UNINSTALLED_PACKAGES,
155 MATCH_SYSTEM_ONLY,
156 MATCH_DEBUG_TRIAGED_MISSING,
Todd Kennedy24522022017-03-27 16:32:20 -0700157 MATCH_DISABLED_COMPONENTS,
Todd Kennedy5a32c6c2016-07-07 14:29:06 -0700158 MATCH_DISABLED_UNTIL_USED_COMPONENTS,
Todd Kennedy9c9fdf22017-03-06 10:58:27 -0800159 MATCH_INSTANT,
Svet Ganov9e779772017-05-11 14:36:50 -0700160 MATCH_STATIC_SHARED_LIBRARIES,
Todd Kennedy5a32c6c2016-07-07 14:29:06 -0700161 GET_DISABLED_UNTIL_USED_COMPONENTS,
Todd Kennedy1f397f42016-06-28 12:14:11 -0700162 GET_UNINSTALLED_PACKAGES,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700163 })
164 @Retention(RetentionPolicy.SOURCE)
165 public @interface ApplicationInfoFlags {}
166
167 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -0600168 @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700169 GET_META_DATA,
170 GET_SHARED_LIBRARY_FILES,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800171 MATCH_ALL,
172 MATCH_DEBUG_TRIAGED_MISSING,
173 MATCH_DEFAULT_ONLY,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700174 MATCH_DISABLED_COMPONENTS,
175 MATCH_DISABLED_UNTIL_USED_COMPONENTS,
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600176 MATCH_DIRECT_BOOT_AWARE,
177 MATCH_DIRECT_BOOT_UNAWARE,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700178 MATCH_SYSTEM_ONLY,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800179 MATCH_UNINSTALLED_PACKAGES,
Todd Kennedy9c9fdf22017-03-06 10:58:27 -0800180 MATCH_INSTANT,
Svet Ganov9e779772017-05-11 14:36:50 -0700181 MATCH_STATIC_SHARED_LIBRARIES,
Todd Kennedy1f397f42016-06-28 12:14:11 -0700182 GET_DISABLED_COMPONENTS,
183 GET_DISABLED_UNTIL_USED_COMPONENTS,
184 GET_UNINSTALLED_PACKAGES,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700185 })
186 @Retention(RetentionPolicy.SOURCE)
187 public @interface ComponentInfoFlags {}
188
189 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -0600190 @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700191 GET_META_DATA,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700192 GET_RESOLVED_FILTER,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800193 GET_SHARED_LIBRARY_FILES,
194 MATCH_ALL,
195 MATCH_DEBUG_TRIAGED_MISSING,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700196 MATCH_DISABLED_COMPONENTS,
197 MATCH_DISABLED_UNTIL_USED_COMPONENTS,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700198 MATCH_DEFAULT_ONLY,
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600199 MATCH_DIRECT_BOOT_AWARE,
200 MATCH_DIRECT_BOOT_UNAWARE,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700201 MATCH_SYSTEM_ONLY,
Todd Kennedy6b9bfa12016-01-08 13:44:51 -0800202 MATCH_UNINSTALLED_PACKAGES,
Todd Kennedy9c9fdf22017-03-06 10:58:27 -0800203 MATCH_INSTANT,
Todd Kennedy1f397f42016-06-28 12:14:11 -0700204 GET_DISABLED_COMPONENTS,
205 GET_DISABLED_UNTIL_USED_COMPONENTS,
206 GET_UNINSTALLED_PACKAGES,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700207 })
208 @Retention(RetentionPolicy.SOURCE)
209 public @interface ResolveInfoFlags {}
210
211 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -0600212 @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700213 GET_META_DATA,
214 })
215 @Retention(RetentionPolicy.SOURCE)
216 public @interface PermissionInfoFlags {}
217
218 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -0600219 @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700220 GET_META_DATA,
221 })
222 @Retention(RetentionPolicy.SOURCE)
223 public @interface PermissionGroupInfoFlags {}
224
225 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -0600226 @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700227 GET_META_DATA,
228 })
229 @Retention(RetentionPolicy.SOURCE)
230 public @interface InstrumentationInfoFlags {}
231
232 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800233 * {@link PackageInfo} flag: return information about
234 * activities in the package in {@link PackageInfo#activities}.
235 */
236 public static final int GET_ACTIVITIES = 0x00000001;
237
238 /**
239 * {@link PackageInfo} flag: return information about
240 * intent receivers in the package in
241 * {@link PackageInfo#receivers}.
242 */
243 public static final int GET_RECEIVERS = 0x00000002;
244
245 /**
246 * {@link PackageInfo} flag: return information about
247 * services in the package in {@link PackageInfo#services}.
248 */
249 public static final int GET_SERVICES = 0x00000004;
250
251 /**
252 * {@link PackageInfo} flag: return information about
253 * content providers in the package in
254 * {@link PackageInfo#providers}.
255 */
256 public static final int GET_PROVIDERS = 0x00000008;
257
258 /**
259 * {@link PackageInfo} flag: return information about
260 * instrumentation in the package in
261 * {@link PackageInfo#instrumentation}.
262 */
263 public static final int GET_INSTRUMENTATION = 0x00000010;
264
265 /**
266 * {@link PackageInfo} flag: return information about the
267 * intent filters supported by the activity.
268 */
269 public static final int GET_INTENT_FILTERS = 0x00000020;
270
271 /**
272 * {@link PackageInfo} flag: return information about the
273 * signatures included in the package.
274 */
275 public static final int GET_SIGNATURES = 0x00000040;
276
277 /**
278 * {@link ResolveInfo} flag: return the IntentFilter that
279 * was matched for a particular ResolveInfo in
280 * {@link ResolveInfo#filter}.
281 */
282 public static final int GET_RESOLVED_FILTER = 0x00000040;
283
284 /**
285 * {@link ComponentInfo} flag: return the {@link ComponentInfo#metaData}
286 * data {@link android.os.Bundle}s that are associated with a component.
287 * This applies for any API returning a ComponentInfo subclass.
288 */
289 public static final int GET_META_DATA = 0x00000080;
290
291 /**
292 * {@link PackageInfo} flag: return the
293 * {@link PackageInfo#gids group ids} that are associated with an
294 * application.
Ken Wakasaf76a50c2012-03-09 19:56:35 +0900295 * This applies for any API returning a PackageInfo class, either
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800296 * directly or nested inside of another.
297 */
298 public static final int GET_GIDS = 0x00000100;
299
300 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700301 * @deprecated replaced with {@link #MATCH_DISABLED_COMPONENTS}
302 */
303 @Deprecated
304 public static final int GET_DISABLED_COMPONENTS = 0x00000200;
305
306 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800307 * {@link PackageInfo} flag: include disabled components in the returned info.
308 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700309 public static final int MATCH_DISABLED_COMPONENTS = 0x00000200;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800310
311 /**
312 * {@link ApplicationInfo} flag: return the
313 * {@link ApplicationInfo#sharedLibraryFiles paths to the shared libraries}
314 * that are associated with an application.
315 * This applies for any API returning an ApplicationInfo class, either
316 * directly or nested inside of another.
317 */
318 public static final int GET_SHARED_LIBRARY_FILES = 0x00000400;
319
320 /**
321 * {@link ProviderInfo} flag: return the
322 * {@link ProviderInfo#uriPermissionPatterns URI permission patterns}
323 * that are associated with a content provider.
Ken Wakasaf76a50c2012-03-09 19:56:35 +0900324 * This applies for any API returning a ProviderInfo class, either
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800325 * directly or nested inside of another.
326 */
327 public static final int GET_URI_PERMISSION_PATTERNS = 0x00000800;
328 /**
329 * {@link PackageInfo} flag: return information about
330 * permissions in the package in
331 * {@link PackageInfo#permissions}.
332 */
333 public static final int GET_PERMISSIONS = 0x00001000;
Amith Yamasani4b2e9342011-03-31 12:38:53 -0700334
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800335 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700336 * @deprecated replaced with {@link #MATCH_UNINSTALLED_PACKAGES}
337 */
338 @Deprecated
339 public static final int GET_UNINSTALLED_PACKAGES = 0x00002000;
340
341 /**
Kenny Root685f4902011-11-03 10:13:29 -0700342 * Flag parameter to retrieve some information about all applications (even
343 * uninstalled ones) which have data directories. This state could have
344 * resulted if applications have been deleted with flag
345 * {@code DONT_DELETE_DATA} with a possibility of being replaced or
346 * reinstalled in future.
347 * <p>
348 * Note: this flag may cause less information about currently installed
349 * applications to be returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800350 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700351 public static final int MATCH_UNINSTALLED_PACKAGES = 0x00002000;
Amith Yamasani4b2e9342011-03-31 12:38:53 -0700352
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800353 /**
354 * {@link PackageInfo} flag: return information about
Dianne Hackborn49237342009-08-27 20:08:01 -0700355 * hardware preferences in
Adam Lesinskid3edfde2014-08-08 17:32:44 -0700356 * {@link PackageInfo#configPreferences PackageInfo.configPreferences},
357 * and requested features in {@link PackageInfo#reqFeatures} and
358 * {@link PackageInfo#featureGroups}.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800359 */
360 public static final int GET_CONFIGURATIONS = 0x00004000;
361
362 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700363 * @deprecated replaced with {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS}.
364 */
365 @Deprecated
366 public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 0x00008000;
367
368 /**
Dianne Hackbornfd7aded2013-01-22 17:10:23 -0800369 * {@link PackageInfo} flag: include disabled components which are in
370 * that state only because of {@link #COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED}
371 * in the returned info. Note that if you set this flag, applications
372 * that are in this disabled state will be reported as enabled.
373 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700374 public static final int MATCH_DISABLED_UNTIL_USED_COMPONENTS = 0x00008000;
Dianne Hackbornfd7aded2013-01-22 17:10:23 -0800375
376 /**
Dianne Hackborn1655be42009-05-08 14:29:01 -0700377 * Resolution and querying flag: if set, only filters that support the
378 * {@link android.content.Intent#CATEGORY_DEFAULT} will be considered for
379 * matching. This is a synonym for including the CATEGORY_DEFAULT in your
380 * supplied Intent.
381 */
Fabrice Di Meglio9f7e39f2015-04-10 20:40:16 -0700382 public static final int MATCH_DEFAULT_ONLY = 0x00010000;
383
384 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700385 * Querying flag: if set and if the platform is doing any filtering of the
386 * results, then the filtering will not happen. This is a synonym for saying
387 * that all results should be returned.
388 * <p>
389 * <em>This flag should be used with extreme care.</em>
Fabrice Di Meglio9f7e39f2015-04-10 20:40:16 -0700390 */
391 public static final int MATCH_ALL = 0x00020000;
Dianne Hackborn1655be42009-05-08 14:29:01 -0700392
Nicolas Prevot63798c52014-05-27 13:22:38 +0100393 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600394 * Querying flag: match components which are direct boot <em>unaware</em> in
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700395 * the returned info, regardless of the current user state.
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600396 * <p>
397 * When neither {@link #MATCH_DIRECT_BOOT_AWARE} nor
398 * {@link #MATCH_DIRECT_BOOT_UNAWARE} are specified, the default behavior is
399 * to match only runnable components based on the user state. For example,
400 * when a user is started but credentials have not been presented yet, the
401 * user is running "locked" and only {@link #MATCH_DIRECT_BOOT_AWARE}
402 * components are returned. Once the user credentials have been presented,
403 * the user is running "unlocked" and both {@link #MATCH_DIRECT_BOOT_AWARE}
404 * and {@link #MATCH_DIRECT_BOOT_UNAWARE} components are returned.
405 *
406 * @see UserManager#isUserUnlocked()
Jeff Sharkeye17ac152015-11-06 22:40:29 -0800407 */
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600408 public static final int MATCH_DIRECT_BOOT_UNAWARE = 0x00040000;
409
410 /**
411 * Querying flag: match components which are direct boot <em>aware</em> in
412 * the returned info, regardless of the current user state.
413 * <p>
414 * When neither {@link #MATCH_DIRECT_BOOT_AWARE} nor
415 * {@link #MATCH_DIRECT_BOOT_UNAWARE} are specified, the default behavior is
416 * to match only runnable components based on the user state. For example,
417 * when a user is started but credentials have not been presented yet, the
418 * user is running "locked" and only {@link #MATCH_DIRECT_BOOT_AWARE}
419 * components are returned. Once the user credentials have been presented,
420 * the user is running "unlocked" and both {@link #MATCH_DIRECT_BOOT_AWARE}
421 * and {@link #MATCH_DIRECT_BOOT_UNAWARE} components are returned.
422 *
423 * @see UserManager#isUserUnlocked()
424 */
425 public static final int MATCH_DIRECT_BOOT_AWARE = 0x00080000;
426
Jeff Sharkey2a9e3f82015-12-18 10:57:58 -0700427 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700428 * Querying flag: include only components from applications that are marked
429 * with {@link ApplicationInfo#FLAG_SYSTEM}.
Jeff Sharkey5217cac2015-12-20 15:34:01 -0700430 */
431 public static final int MATCH_SYSTEM_ONLY = 0x00100000;
432
433 /**
Todd Kennedyd6ee0ba2016-03-31 15:11:11 -0700434 * Internal {@link PackageInfo} flag: include only components on the system image.
435 * This will not return information on any unbundled update to system components.
436 * @hide
437 */
Todd Kennedy49084962017-03-27 16:20:37 -0700438 @SystemApi
Todd Kennedyd6ee0ba2016-03-31 15:11:11 -0700439 public static final int MATCH_FACTORY_ONLY = 0x00200000;
440
441 /**
Amith Yamasani0d1fd8d2016-10-12 14:21:51 -0700442 * Allows querying of packages installed for any user, not just the specific one. This flag
Amith Yamasani475f9a32016-12-08 09:46:15 -0800443 * is only meant for use by apps that have INTERACT_ACROSS_USERS permission.
Amith Yamasani0d1fd8d2016-10-12 14:21:51 -0700444 * @hide
445 */
Amith Yamasani475f9a32016-12-08 09:46:15 -0800446 @SystemApi
Amith Yamasani0d1fd8d2016-10-12 14:21:51 -0700447 public static final int MATCH_ANY_USER = 0x00400000;
448
449 /**
450 * Combination of MATCH_ANY_USER and MATCH_UNINSTALLED_PACKAGES to mean any known
451 * package.
452 * @hide
453 */
454 public static final int MATCH_KNOWN_PACKAGES = MATCH_UNINSTALLED_PACKAGES | MATCH_ANY_USER;
455
456 /**
Todd Kennedy7bc3a702016-12-08 14:54:48 -0800457 * Internal {@link PackageInfo} flag: include components that are part of an
Todd Kennedybe0b8892017-02-15 14:13:52 -0800458 * instant app. By default, instant app components are not matched.
Todd Kennedy7bc3a702016-12-08 14:54:48 -0800459 * @hide
460 */
Todd Kennedy9c9fdf22017-03-06 10:58:27 -0800461 @SystemApi
Todd Kennedybe0b8892017-02-15 14:13:52 -0800462 public static final int MATCH_INSTANT = 0x00800000;
Todd Kennedy7bc3a702016-12-08 14:54:48 -0800463
464 /**
465 * Internal {@link PackageInfo} flag: include only components that are exposed to
Todd Kennedyc05f5d12017-04-25 11:11:40 -0700466 * instant apps. Matched components may have been either explicitly or implicitly
467 * exposed.
Todd Kennedy7bc3a702016-12-08 14:54:48 -0800468 * @hide
469 */
Todd Kennedybe0b8892017-02-15 14:13:52 -0800470 public static final int MATCH_VISIBLE_TO_INSTANT_APP_ONLY = 0x01000000;
Todd Kennedy7bc3a702016-12-08 14:54:48 -0800471
472 /**
Todd Kennedyc05f5d12017-04-25 11:11:40 -0700473 * Internal {@link PackageInfo} flag: include only components that have been
474 * explicitly exposed to instant apps.
475 * @hide
476 */
477 public static final int MATCH_EXPLICITLY_VISIBLE_ONLY = 0x02000000;
478
479 /**
Svet Ganov9e779772017-05-11 14:36:50 -0700480 * Internal {@link PackageInfo} flag: include static shared libraries.
481 * Apps that depend on static shared libs can always access the version
482 * of the lib they depend on. System/shell/root can access all shared
483 * libs regardless of dependency but need to explicitly ask for them
484 * via this flag.
485 * @hide
486 */
487 public static final int MATCH_STATIC_SHARED_LIBRARIES = 0x04000000;
488
489 /**
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700490 * Internal flag used to indicate that a system component has done their
491 * homework and verified that they correctly handle packages and components
492 * that come and go over time. In particular:
493 * <ul>
494 * <li>Apps installed on external storage, which will appear to be
495 * uninstalled while the the device is ejected.
496 * <li>Apps with encryption unaware components, which will appear to not
497 * exist while the device is locked.
498 * </ul>
Jeff Sharkeye17ac152015-11-06 22:40:29 -0800499 *
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700500 * @see #MATCH_UNINSTALLED_PACKAGES
Jeff Sharkey8a372a02016-03-16 16:25:45 -0600501 * @see #MATCH_DIRECT_BOOT_AWARE
502 * @see #MATCH_DIRECT_BOOT_UNAWARE
Jeff Sharkeye17ac152015-11-06 22:40:29 -0800503 * @hide
504 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700505 public static final int MATCH_DEBUG_TRIAGED_MISSING = 0x10000000;
Jeff Sharkeye17ac152015-11-06 22:40:29 -0800506
507 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700508 * Flag for {@link #addCrossProfileIntentFilter}: if this flag is set: when
509 * resolving an intent that matches the {@code CrossProfileIntentFilter},
510 * the current profile will be skipped. Only activities in the target user
511 * can respond to the intent.
512 *
Nicolas Prevot63798c52014-05-27 13:22:38 +0100513 * @hide
514 */
515 public static final int SKIP_CURRENT_PROFILE = 0x00000002;
516
Tony Mak807e01c2015-12-01 20:19:03 +0000517 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700518 * Flag for {@link #addCrossProfileIntentFilter}: if this flag is set:
Tony Mak807e01c2015-12-01 20:19:03 +0000519 * activities in the other profiles can respond to the intent only if no activity with
520 * non-negative priority in current profile can respond to the intent.
521 * @hide
522 */
523 public static final int ONLY_IF_NO_MATCH_FOUND = 0x00000004;
524
Tor Norbyed9273d62013-05-30 15:59:53 -0700525 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -0600526 @IntDef(prefix = { "PERMISSION_" }, value = {
527 PERMISSION_GRANTED,
528 PERMISSION_DENIED
529 })
Tor Norbyed9273d62013-05-30 15:59:53 -0700530 @Retention(RetentionPolicy.SOURCE)
531 public @interface PermissionResult {}
532
Dianne Hackborn1655be42009-05-08 14:29:01 -0700533 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800534 * Permission check result: this is returned by {@link #checkPermission}
535 * if the permission has been granted to the given package.
536 */
537 public static final int PERMISSION_GRANTED = 0;
538
539 /**
540 * Permission check result: this is returned by {@link #checkPermission}
541 * if the permission has not been granted to the given package.
542 */
543 public static final int PERMISSION_DENIED = -1;
544
Jeff Sharkey30e06bb2017-04-24 11:18:03 -0600545 /** @hide */
546 @IntDef(prefix = { "SIGNATURE_" }, value = {
547 SIGNATURE_MATCH,
548 SIGNATURE_NEITHER_SIGNED,
549 SIGNATURE_FIRST_NOT_SIGNED,
550 SIGNATURE_SECOND_NOT_SIGNED,
551 SIGNATURE_NO_MATCH,
552 SIGNATURE_UNKNOWN_PACKAGE,
553 })
554 @Retention(RetentionPolicy.SOURCE)
555 public @interface SignatureResult {}
556
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800557 /**
558 * Signature check result: this is returned by {@link #checkSignatures}
Chris Palmer09f33602010-09-13 14:27:18 -0700559 * if all signatures on the two packages match.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800560 */
561 public static final int SIGNATURE_MATCH = 0;
562
563 /**
564 * Signature check result: this is returned by {@link #checkSignatures}
565 * if neither of the two packages is signed.
566 */
567 public static final int SIGNATURE_NEITHER_SIGNED = 1;
568
569 /**
570 * Signature check result: this is returned by {@link #checkSignatures}
Chris Palmer09f33602010-09-13 14:27:18 -0700571 * if the first package is not signed but the second is.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800572 */
573 public static final int SIGNATURE_FIRST_NOT_SIGNED = -1;
574
575 /**
576 * Signature check result: this is returned by {@link #checkSignatures}
Chris Palmer09f33602010-09-13 14:27:18 -0700577 * if the second package is not signed but the first is.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800578 */
579 public static final int SIGNATURE_SECOND_NOT_SIGNED = -2;
580
581 /**
582 * Signature check result: this is returned by {@link #checkSignatures}
Chris Palmer09f33602010-09-13 14:27:18 -0700583 * if not all signatures on both packages match.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800584 */
585 public static final int SIGNATURE_NO_MATCH = -3;
586
587 /**
588 * Signature check result: this is returned by {@link #checkSignatures}
Chris Palmer09f33602010-09-13 14:27:18 -0700589 * if either of the packages are not valid.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800590 */
591 public static final int SIGNATURE_UNKNOWN_PACKAGE = -4;
592
Jeff Sharkey30e06bb2017-04-24 11:18:03 -0600593 /** @hide */
594 @IntDef(prefix = { "COMPONENT_ENABLED_STATE_" }, value = {
595 COMPONENT_ENABLED_STATE_DEFAULT,
596 COMPONENT_ENABLED_STATE_ENABLED,
597 COMPONENT_ENABLED_STATE_DISABLED,
598 COMPONENT_ENABLED_STATE_DISABLED_USER,
599 COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED,
600 })
601 @Retention(RetentionPolicy.SOURCE)
602 public @interface EnabledState {}
603
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700604 /**
Jeff Sharkey30e06bb2017-04-24 11:18:03 -0600605 * Flag for {@link #setApplicationEnabledSetting(String, int, int)} and
606 * {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
607 * component or application is in its default enabled state (as specified in
608 * its manifest).
609 * <p>
610 * Explicitly setting the component state to this value restores it's
611 * enabled state to whatever is set in the manifest.
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700612 */
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800613 public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0;
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700614
615 /**
616 * Flag for {@link #setApplicationEnabledSetting(String, int, int)}
617 * and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
618 * component or application has been explictily enabled, regardless of
619 * what it has specified in its manifest.
620 */
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800621 public static final int COMPONENT_ENABLED_STATE_ENABLED = 1;
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700622
623 /**
624 * Flag for {@link #setApplicationEnabledSetting(String, int, int)}
625 * and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
626 * component or application has been explicitly disabled, regardless of
627 * what it has specified in its manifest.
628 */
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800629 public static final int COMPONENT_ENABLED_STATE_DISABLED = 2;
630
631 /**
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700632 * Flag for {@link #setApplicationEnabledSetting(String, int, int)} only: The
633 * user has explicitly disabled the application, regardless of what it has
634 * specified in its manifest. Because this is due to the user's request,
635 * they may re-enable it if desired through the appropriate system UI. This
kmccormick30498b42013-03-27 17:39:17 -0700636 * option currently <strong>cannot</strong> be used with
Dianne Hackborn0ac30312011-06-17 14:49:23 -0700637 * {@link #setComponentEnabledSetting(ComponentName, int, int)}.
638 */
639 public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3;
640
641 /**
Dianne Hackbornfd7aded2013-01-22 17:10:23 -0800642 * Flag for {@link #setApplicationEnabledSetting(String, int, int)} only: This
643 * application should be considered, until the point where the user actually
644 * wants to use it. This means that it will not normally show up to the user
645 * (such as in the launcher), but various parts of the user interface can
646 * use {@link #GET_DISABLED_UNTIL_USED_COMPONENTS} to still see it and allow
647 * the user to select it (as for example an IME, device admin, etc). Such code,
648 * once the user has selected the app, should at that point also make it enabled.
649 * This option currently <strong>can not</strong> be used with
650 * {@link #setComponentEnabledSetting(ComponentName, int, int)}.
651 */
652 public static final int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4;
653
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700654 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -0600655 @IntDef(flag = true, prefix = { "INSTALL_" }, value = {
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700656 INSTALL_FORWARD_LOCK,
657 INSTALL_REPLACE_EXISTING,
658 INSTALL_ALLOW_TEST,
659 INSTALL_EXTERNAL,
660 INSTALL_INTERNAL,
661 INSTALL_FROM_ADB,
662 INSTALL_ALL_USERS,
663 INSTALL_ALLOW_DOWNGRADE,
664 INSTALL_GRANT_RUNTIME_PERMISSIONS,
665 INSTALL_FORCE_VOLUME_UUID,
666 INSTALL_FORCE_PERMISSION_PROMPT,
Todd Kennedybe0b8892017-02-15 14:13:52 -0800667 INSTALL_INSTANT_APP,
Todd Kennedy39bfee52016-02-24 10:28:21 -0800668 INSTALL_DONT_KILL_APP,
Jeff Sharkey683bcd32017-03-18 17:54:51 -0600669 INSTALL_FORCE_SDK,
670 INSTALL_FULL_APP,
671 INSTALL_ALLOCATE_AGGRESSIVE,
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700672 })
673 @Retention(RetentionPolicy.SOURCE)
674 public @interface InstallFlags {}
675
Dianne Hackbornfd7aded2013-01-22 17:10:23 -0800676 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700677 * Flag parameter for {@link #installPackage} to indicate that this package
678 * should be installed as forward locked, i.e. only the app itself should
679 * have access to its code and non-resource assets.
680 *
Jeff Sharkey8c61e392017-02-24 09:22:48 -0700681 * @deprecated new installs into ASEC containers are no longer supported.
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700682 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800683 */
Jeff Sharkey8c61e392017-02-24 09:22:48 -0700684 @Deprecated
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700685 public static final int INSTALL_FORWARD_LOCK = 0x00000001;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800686
687 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700688 * Flag parameter for {@link #installPackage} to indicate that you want to
689 * replace an already installed package, if one exists.
690 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700691 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800692 */
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700693 public static final int INSTALL_REPLACE_EXISTING = 0x00000002;
694
695 /**
Amith Yamasani4b2e9342011-03-31 12:38:53 -0700696 * Flag parameter for {@link #installPackage} to indicate that you want to
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700697 * allow test packages (those that have set android:testOnly in their
698 * manifest) to be installed.
699 * @hide
700 */
701 public static final int INSTALL_ALLOW_TEST = 0x00000004;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800702
703 /**
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -0700704 * Flag parameter for {@link #installPackage} to indicate that this package
705 * must be installed to an ASEC on a {@link VolumeInfo#TYPE_PUBLIC}.
706 *
Jeff Sharkey8c61e392017-02-24 09:22:48 -0700707 * @deprecated new installs into ASEC containers are no longer supported;
708 * use adoptable storage instead.
Suchi Amalapurapuaf8e9f42010-01-12 10:17:28 -0800709 * @hide
710 */
Jeff Sharkey8c61e392017-02-24 09:22:48 -0700711 @Deprecated
Suchi Amalapurapu5b993ce2010-02-12 09:43:29 -0800712 public static final int INSTALL_EXTERNAL = 0x00000008;
Oscar Montemayor539d3c42010-01-29 15:27:00 -0800713
714 /**
Kenny Root5ab21572011-07-27 11:11:19 -0700715 * Flag parameter for {@link #installPackage} to indicate that this package
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -0700716 * must be installed to internal storage.
717 *
Kenny Root5ab21572011-07-27 11:11:19 -0700718 * @hide
719 */
720 public static final int INSTALL_INTERNAL = 0x00000010;
721
722 /**
723 * Flag parameter for {@link #installPackage} to indicate that this install
724 * was initiated via ADB.
725 *
726 * @hide
727 */
728 public static final int INSTALL_FROM_ADB = 0x00000020;
Suchi Amalapurapu14b6abd2010-03-17 08:37:04 -0700729
730 /**
Dianne Hackborn7767eac2012-08-23 18:25:40 -0700731 * Flag parameter for {@link #installPackage} to indicate that this install
732 * should immediately be visible to all users.
733 *
734 * @hide
735 */
736 public static final int INSTALL_ALL_USERS = 0x00000040;
737
738 /**
739 * Flag parameter for {@link #installPackage} to indicate that it is okay
740 * to install an update to an app where the newly installed app has a lower
Alex Klyubin921dd752016-02-24 13:21:41 -0800741 * version code than the currently installed app. This is permitted only if
742 * the currently installed app is marked debuggable.
Dianne Hackborn7767eac2012-08-23 18:25:40 -0700743 *
744 * @hide
745 */
746 public static final int INSTALL_ALLOW_DOWNGRADE = 0x00000080;
747
748 /**
Svet Ganov95c1ade2015-03-19 09:38:52 -0700749 * Flag parameter for {@link #installPackage} to indicate that all runtime
750 * permissions should be granted to the package. If {@link #INSTALL_ALL_USERS}
751 * is set the runtime permissions will be granted to all users, otherwise
752 * only to the owner.
753 *
754 * @hide
755 */
756 public static final int INSTALL_GRANT_RUNTIME_PERMISSIONS = 0x00000100;
757
Jeff Sharkeyab234092015-06-09 21:42:22 -0700758 /** {@hide} */
759 public static final int INSTALL_FORCE_VOLUME_UUID = 0x00000200;
760
Svet Ganov95c1ade2015-03-19 09:38:52 -0700761 /**
Todd Kennedya1d12cf2015-09-29 15:43:00 -0700762 * Flag parameter for {@link #installPackage} to indicate that we always want to force
763 * the prompt for permission approval. This overrides any special behaviour for internal
764 * components.
765 *
766 * @hide
767 */
768 public static final int INSTALL_FORCE_PERMISSION_PROMPT = 0x00000400;
769
770 /**
Todd Kennedy27c24fb2015-09-17 16:49:25 -0700771 * Flag parameter for {@link #installPackage} to indicate that this package is
Todd Kennedy2699f062015-11-20 13:07:17 -0800772 * to be installed as a lightweight "ephemeral" app.
773 *
774 * @hide
775 */
Todd Kennedybe0b8892017-02-15 14:13:52 -0800776 public static final int INSTALL_INSTANT_APP = 0x00000800;
777
778 /**
Todd Kennedy39bfee52016-02-24 10:28:21 -0800779 * Flag parameter for {@link #installPackage} to indicate that this package contains
780 * a feature split to an existing application and the existing application should not
781 * be killed during the installation process.
782 *
783 * @hide
784 */
785 public static final int INSTALL_DONT_KILL_APP = 0x00001000;
786
787 /**
Todd Kennedyb1072712016-04-26 15:41:20 -0700788 * Flag parameter for {@link #installPackage} to indicate that this package is an
789 * upgrade to a package that refers to the SDK via release letter.
790 *
791 * @hide
792 */
793 public static final int INSTALL_FORCE_SDK = 0x00002000;
794
795 /**
Jeff Sharkey683bcd32017-03-18 17:54:51 -0600796 * Flag parameter for {@link #installPackage} to indicate that this package is
797 * to be installed as a heavy weight app. This is fundamentally the opposite of
798 * {@link #INSTALL_INSTANT_APP}.
799 *
800 * @hide
801 */
802 public static final int INSTALL_FULL_APP = 0x00004000;
803
804 /**
805 * Flag parameter for {@link #installPackage} to indicate that this package
806 * is critical to system health or security, meaning the system should use
807 * {@link StorageManager#FLAG_ALLOCATE_AGGRESSIVE} internally.
808 *
809 * @hide
810 */
811 public static final int INSTALL_ALLOCATE_AGGRESSIVE = 0x00008000;
812
Jeff Sharkey30e06bb2017-04-24 11:18:03 -0600813 /** @hide */
814 @IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = {
815 DONT_KILL_APP
816 })
817 @Retention(RetentionPolicy.SOURCE)
818 public @interface EnabledFlags {}
819
Jeff Sharkey683bcd32017-03-18 17:54:51 -0600820 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800821 * Flag parameter for
822 * {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
823 * that you don't want to kill the app containing the component. Be careful when you set this
824 * since changing component states can make the containing application's behavior unpredictable.
825 */
826 public static final int DONT_KILL_APP = 0x00000001;
827
Bartosz Fabianowskia34f53f2017-01-11 18:08:47 +0100828 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -0600829 @IntDef(prefix = { "INSTALL_REASON_" }, value = {
830 INSTALL_REASON_UNKNOWN,
831 INSTALL_REASON_POLICY,
832 INSTALL_REASON_DEVICE_RESTORE,
833 INSTALL_REASON_DEVICE_SETUP,
834 INSTALL_REASON_USER
835 })
Bartosz Fabianowskia34f53f2017-01-11 18:08:47 +0100836 @Retention(RetentionPolicy.SOURCE)
837 public @interface InstallReason {}
838
839 /**
840 * Code indicating that the reason for installing this package is unknown.
841 */
842 public static final int INSTALL_REASON_UNKNOWN = 0;
843
844 /**
845 * Code indicating that this package was installed due to enterprise policy.
846 */
847 public static final int INSTALL_REASON_POLICY = 1;
848
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800849 /**
Sunny Goyal80af6a22017-03-02 08:32:33 -0800850 * Code indicating that this package was installed as part of restoring from another device.
851 */
852 public static final int INSTALL_REASON_DEVICE_RESTORE = 2;
853
854 /**
855 * Code indicating that this package was installed as part of device setup.
856 */
857 public static final int INSTALL_REASON_DEVICE_SETUP = 3;
858
859 /**
860 * Code indicating that the package installation was initiated by the user.
861 */
862 public static final int INSTALL_REASON_USER = 4;
863
864 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700865 * Installation return code: this is passed to the
866 * {@link IPackageInstallObserver} on success.
867 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700868 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800869 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700870 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800871 public static final int INSTALL_SUCCEEDED = 1;
872
873 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700874 * Installation return code: this is passed to the
875 * {@link IPackageInstallObserver} if the package is already installed.
876 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700877 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800878 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700879 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800880 public static final int INSTALL_FAILED_ALREADY_EXISTS = -1;
881
882 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700883 * Installation return code: this is passed to the
884 * {@link IPackageInstallObserver} if the package archive file is invalid.
885 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700886 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800887 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700888 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800889 public static final int INSTALL_FAILED_INVALID_APK = -2;
890
891 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700892 * Installation return code: this is passed to the
893 * {@link IPackageInstallObserver} if the URI passed in is invalid.
894 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700895 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800896 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700897 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800898 public static final int INSTALL_FAILED_INVALID_URI = -3;
899
900 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700901 * Installation return code: this is passed to the
902 * {@link IPackageInstallObserver} if the package manager service found that
903 * the device didn't have enough storage space to install the app.
904 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700905 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800906 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700907 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800908 public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4;
909
910 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700911 * Installation return code: this is passed to the
912 * {@link IPackageInstallObserver} if a package is already installed with
913 * the same name.
914 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700915 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800916 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700917 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800918 public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5;
919
920 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700921 * Installation return code: this is passed to the
922 * {@link IPackageInstallObserver} if the requested shared user does not
923 * exist.
924 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700925 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800926 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700927 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800928 public static final int INSTALL_FAILED_NO_SHARED_USER = -6;
929
930 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700931 * Installation return code: this is passed to the
932 * {@link IPackageInstallObserver} if a previously installed package of the
933 * same name has a different signature than the new package (and the old
934 * package's data was not removed).
935 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700936 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800937 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700938 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800939 public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7;
940
941 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700942 * Installation return code: this is passed to the
943 * {@link IPackageInstallObserver} if the new package is requested a shared
944 * user which is already installed on the device and does not have matching
945 * signature.
946 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700947 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800948 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700949 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800950 public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8;
951
952 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700953 * Installation return code: this is passed to the
954 * {@link IPackageInstallObserver} if the new package uses a shared library
955 * that is not available.
956 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700957 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800958 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700959 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800960 public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9;
961
962 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700963 * Installation return code: this is passed to the
964 * {@link IPackageInstallObserver} if the new package uses a shared library
965 * that is not available.
966 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700967 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800968 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700969 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800970 public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10;
971
972 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700973 * Installation return code: this is passed to the
974 * {@link IPackageInstallObserver} if the new package failed while
975 * optimizing and validating its dex files, either because there was not
976 * enough storage or the validation failed.
977 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700978 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800979 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700980 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800981 public static final int INSTALL_FAILED_DEXOPT = -11;
982
983 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700984 * Installation return code: this is passed to the
985 * {@link IPackageInstallObserver} if the new package failed because the
986 * current SDK version is older than that required by the package.
987 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700988 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800989 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700990 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800991 public static final int INSTALL_FAILED_OLDER_SDK = -12;
992
993 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -0700994 * Installation return code: this is passed to the
995 * {@link IPackageInstallObserver} if the new package failed because it
996 * contains a content provider with the same authority as a provider already
997 * installed in the system.
998 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -0700999 * @hide
The Android Open Source Project10592532009-03-18 17:39:46 -07001000 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001001 @SystemApi
The Android Open Source Project10592532009-03-18 17:39:46 -07001002 public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13;
1003
1004 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001005 * Installation return code: this is passed to the
1006 * {@link IPackageInstallObserver} if the new package failed because the
1007 * current SDK version is newer than that required by the package.
1008 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001009 * @hide
Dianne Hackborn851a5412009-05-08 12:06:44 -07001010 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001011 @SystemApi
Dianne Hackborn851a5412009-05-08 12:06:44 -07001012 public static final int INSTALL_FAILED_NEWER_SDK = -14;
1013
1014 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001015 * Installation return code: this is passed to the
1016 * {@link IPackageInstallObserver} if the new package failed because it has
1017 * specified that it is a test-only package and the caller has not supplied
1018 * the {@link #INSTALL_ALLOW_TEST} flag.
1019 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001020 * @hide
1021 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001022 @SystemApi
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001023 public static final int INSTALL_FAILED_TEST_ONLY = -15;
1024
1025 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001026 * Installation return code: this is passed to the
1027 * {@link IPackageInstallObserver} if the package being installed contains
1028 * native code, but none that is compatible with the device's CPU_ABI.
1029 *
Dianne Hackbornb1811182009-05-21 15:45:42 -07001030 * @hide
1031 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001032 @SystemApi
Dianne Hackbornb1811182009-05-21 15:45:42 -07001033 public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16;
1034
1035 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001036 * Installation return code: this is passed to the
1037 * {@link IPackageInstallObserver} if the new package uses a feature that is
1038 * not available.
1039 *
Dianne Hackborn49237342009-08-27 20:08:01 -07001040 * @hide
1041 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001042 @SystemApi
Dianne Hackborn49237342009-08-27 20:08:01 -07001043 public static final int INSTALL_FAILED_MISSING_FEATURE = -17;
1044
Suchi Amalapurapuaf8e9f42010-01-12 10:17:28 -08001045 // ------ Errors related to sdcard
1046 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001047 * Installation return code: this is passed to the
1048 * {@link IPackageInstallObserver} if a secure container mount point
1049 * couldn't be accessed on external media.
1050 *
Suchi Amalapurapuaf8e9f42010-01-12 10:17:28 -08001051 * @hide
1052 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001053 @SystemApi
Suchi Amalapurapuaf8e9f42010-01-12 10:17:28 -08001054 public static final int INSTALL_FAILED_CONTAINER_ERROR = -18;
1055
Dianne Hackborn49237342009-08-27 20:08:01 -07001056 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001057 * Installation return code: this is passed to the
1058 * {@link IPackageInstallObserver} if the new package couldn't be installed
1059 * in the specified install location.
1060 *
Suchi Amalapurapub56ae202010-02-04 22:51:07 -08001061 * @hide
1062 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001063 @SystemApi
Suchi Amalapurapub56ae202010-02-04 22:51:07 -08001064 public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19;
1065
1066 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001067 * Installation return code: this is passed to the
1068 * {@link IPackageInstallObserver} if the new package couldn't be installed
1069 * in the specified install location because the media is not available.
1070 *
Suchi Amalapurapu8a9ab242010-03-11 16:49:16 -08001071 * @hide
1072 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001073 @SystemApi
Suchi Amalapurapu8a9ab242010-03-11 16:49:16 -08001074 public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20;
1075
1076 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001077 * Installation return code: this is passed to the
1078 * {@link IPackageInstallObserver} if the new package couldn't be installed
1079 * because the verification timed out.
1080 *
Kenny Root5ab21572011-07-27 11:11:19 -07001081 * @hide
1082 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001083 @SystemApi
Kenny Root5ab21572011-07-27 11:11:19 -07001084 public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21;
1085
1086 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001087 * Installation return code: this is passed to the
1088 * {@link IPackageInstallObserver} if the new package couldn't be installed
1089 * because the verification did not succeed.
1090 *
Kenny Root5ab21572011-07-27 11:11:19 -07001091 * @hide
1092 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001093 @SystemApi
Kenny Root5ab21572011-07-27 11:11:19 -07001094 public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22;
1095
1096 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001097 * Installation return code: this is passed to the
1098 * {@link IPackageInstallObserver} if the package changed from what the
1099 * calling program expected.
1100 *
Kenny Root5ab21572011-07-27 11:11:19 -07001101 * @hide
1102 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001103 @SystemApi
Kenny Root5ab21572011-07-27 11:11:19 -07001104 public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23;
1105
1106 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001107 * Installation return code: this is passed to the
1108 * {@link IPackageInstallObserver} if the new package is assigned a
1109 * different UID than it previously held.
1110 *
Dianne Hackbornd0c5f512012-06-07 16:53:59 -07001111 * @hide
1112 */
1113 public static final int INSTALL_FAILED_UID_CHANGED = -24;
1114
1115 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001116 * Installation return code: this is passed to the
1117 * {@link IPackageInstallObserver} if the new package has an older version
1118 * code than the currently installed package.
1119 *
Dianne Hackborn7767eac2012-08-23 18:25:40 -07001120 * @hide
1121 */
1122 public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25;
1123
1124 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001125 * Installation return code: this is passed to the
1126 * {@link IPackageInstallObserver} if the old package has target SDK high
1127 * enough to support runtime permission and the new package has target SDK
1128 * low enough to not support runtime permissions.
1129 *
Svetoslavd9653702015-05-13 18:02:46 -07001130 * @hide
1131 */
1132 @SystemApi
1133 public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26;
1134
1135 /**
Chad Brubaker34573b22017-03-07 15:27:35 -08001136 * Installation return code: this is passed to the
1137 * {@link IPackageInstallObserver} if the new package attempts to downgrade the
1138 * target sandbox version of the app.
1139 *
1140 * @hide
1141 */
1142 @SystemApi
1143 public static final int INSTALL_FAILED_SANDBOX_VERSION_DOWNGRADE = -27;
1144
1145 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001146 * Installation parse return code: this is passed to the
1147 * {@link IPackageInstallObserver} if the parser was given a path that is
1148 * not a file, or does not end with the expected '.apk' extension.
1149 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001150 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001151 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001152 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001153 public static final int INSTALL_PARSE_FAILED_NOT_APK = -100;
1154
1155 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001156 * Installation parse return code: this is passed to the
1157 * {@link IPackageInstallObserver} if the parser was unable to retrieve the
1158 * AndroidManifest.xml file.
1159 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001160 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001161 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001162 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001163 public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101;
1164
1165 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001166 * Installation parse return code: this is passed to the
1167 * {@link IPackageInstallObserver} if the parser encountered an unexpected
1168 * exception.
1169 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001170 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001171 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001172 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001173 public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102;
1174
1175 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001176 * Installation parse return code: this is passed to the
1177 * {@link IPackageInstallObserver} if the parser did not find any
1178 * certificates in the .apk.
1179 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001180 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001181 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001182 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001183 public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103;
1184
1185 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001186 * Installation parse return code: this is passed to the
1187 * {@link IPackageInstallObserver} if the parser found inconsistent
1188 * certificates on the files in the .apk.
1189 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001190 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001191 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001192 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001193 public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104;
1194
1195 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001196 * Installation parse return code: this is passed to the
1197 * {@link IPackageInstallObserver} if the parser encountered a
1198 * CertificateEncodingException in one of the files in the .apk.
1199 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001200 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001201 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001202 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001203 public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105;
1204
1205 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001206 * Installation parse return code: this is passed to the
1207 * {@link IPackageInstallObserver} if the parser encountered a bad or
1208 * missing package name in the manifest.
1209 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001210 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001211 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001212 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001213 public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106;
1214
1215 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001216 * Installation parse return code: this is passed to the
1217 * {@link IPackageInstallObserver} if the parser encountered a bad shared
1218 * user id name in the manifest.
1219 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001220 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001221 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001222 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001223 public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107;
1224
1225 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001226 * Installation parse return code: this is passed to the
1227 * {@link IPackageInstallObserver} if the parser encountered some structural
1228 * problem in the manifest.
1229 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001230 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001231 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001232 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001233 public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108;
1234
1235 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001236 * Installation parse return code: this is passed to the
1237 * {@link IPackageInstallObserver} if the parser did not find any actionable
1238 * tags (instrumentation or application) in the manifest.
1239 *
Dianne Hackbornade3eca2009-05-11 18:54:45 -07001240 * @hide
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001241 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001242 @SystemApi
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001243 public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109;
1244
1245 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001246 * Installation failed return code: this is passed to the
1247 * {@link IPackageInstallObserver} if the system failed to install the
1248 * package because of system issues.
1249 *
Suchi Amalapurapu5b993ce2010-02-12 09:43:29 -08001250 * @hide
1251 */
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001252 @SystemApi
Suchi Amalapurapu5b993ce2010-02-12 09:43:29 -08001253 public static final int INSTALL_FAILED_INTERNAL_ERROR = -110;
1254
1255 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001256 * Installation failed return code: this is passed to the
1257 * {@link IPackageInstallObserver} if the system failed to install the
1258 * package because the user is restricted from installing apps.
1259 *
Amith Yamasanie4cf7342012-12-17 11:12:09 -08001260 * @hide
1261 */
1262 public static final int INSTALL_FAILED_USER_RESTRICTED = -111;
1263
1264 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001265 * Installation failed return code: this is passed to the
1266 * {@link IPackageInstallObserver} if the system failed to install the
1267 * package because it is attempting to define a permission that is already
1268 * defined by some existing package.
1269 * <p>
1270 * The package name of the app which has already defined the permission is
1271 * passed to a {@link PackageInstallObserver}, if any, as the
1272 * {@link #EXTRA_FAILURE_EXISTING_PACKAGE} string extra; and the name of the
1273 * permission being redefined is passed in the
1274 * {@link #EXTRA_FAILURE_EXISTING_PERMISSION} string extra.
Christopher Tatef1977b42014-03-24 16:25:51 -07001275 *
Christopher Tatef1977b42014-03-24 16:25:51 -07001276 * @hide
1277 */
1278 public static final int INSTALL_FAILED_DUPLICATE_PERMISSION = -112;
1279
1280 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001281 * Installation failed return code: this is passed to the
1282 * {@link IPackageInstallObserver} if the system failed to install the
1283 * package because its packaged native code did not match any of the ABIs
1284 * supported by the system.
Ramin Zaghi1378aba2014-02-28 15:03:19 +00001285 *
1286 * @hide
1287 */
Narayan Kamathd11f2232014-04-10 10:37:17 +01001288 public static final int INSTALL_FAILED_NO_MATCHING_ABIS = -113;
Ramin Zaghi1378aba2014-02-28 15:03:19 +00001289
1290 /**
1291 * Internal return code for NativeLibraryHelper methods to indicate that the package
1292 * being processed did not contain any native code. This is placed here only so that
1293 * it can belong to the same value space as the other install failure codes.
1294 *
1295 * @hide
1296 */
Narayan Kamathd11f2232014-04-10 10:37:17 +01001297 public static final int NO_NATIVE_LIBRARIES = -114;
Ramin Zaghi1378aba2014-02-28 15:03:19 +00001298
Jeff Sharkey7328a1b2014-08-07 14:01:43 -07001299 /** {@hide} */
Jeff Sharkeyf0600952014-08-07 17:31:53 -07001300 public static final int INSTALL_FAILED_ABORTED = -115;
Jeff Sharkey7328a1b2014-08-07 14:01:43 -07001301
Ramin Zaghi1378aba2014-02-28 15:03:19 +00001302 /**
Todd Kennedybe0b8892017-02-15 14:13:52 -08001303 * Installation failed return code: instant app installs are incompatible with some
Todd Kennedy2699f062015-11-20 13:07:17 -08001304 * other installation flags supplied for the operation; or other circumstances such
Todd Kennedybe0b8892017-02-15 14:13:52 -08001305 * as trying to upgrade a system app via an instant app install.
Todd Kennedy2699f062015-11-20 13:07:17 -08001306 * @hide
1307 */
Todd Kennedybe0b8892017-02-15 14:13:52 -08001308 public static final int INSTALL_FAILED_INSTANT_APP_INVALID = -116;
Todd Kennedy2699f062015-11-20 13:07:17 -08001309
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001310 /** @hide */
Jeff Sharkey4347f812017-04-21 12:08:39 -06001311 @IntDef(flag = true, prefix = { "DELETE_" }, value = {
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001312 DELETE_KEEP_DATA,
1313 DELETE_ALL_USERS,
1314 DELETE_SYSTEM_APP,
Todd Kennedy39bfee52016-02-24 10:28:21 -08001315 DELETE_DONT_KILL_APP,
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001316 })
1317 @Retention(RetentionPolicy.SOURCE)
1318 public @interface DeleteFlags {}
1319
Todd Kennedy2699f062015-11-20 13:07:17 -08001320 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001321 * Flag parameter for {@link #deletePackage} to indicate that you don't want to delete the
1322 * package's data directory.
1323 *
1324 * @hide
1325 */
Dianne Hackborn7767eac2012-08-23 18:25:40 -07001326 public static final int DELETE_KEEP_DATA = 0x00000001;
1327
1328 /**
1329 * Flag parameter for {@link #deletePackage} to indicate that you want the
1330 * package deleted for all users.
1331 *
1332 * @hide
1333 */
1334 public static final int DELETE_ALL_USERS = 0x00000002;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001335
1336 /**
Dianne Hackbornc895be72013-03-11 17:48:43 -07001337 * Flag parameter for {@link #deletePackage} to indicate that, if you are calling
1338 * uninstall on a system that has been updated, then don't do the normal process
1339 * of uninstalling the update and rolling back to the older system version (which
1340 * needs to happen for all users); instead, just mark the app as uninstalled for
1341 * the current user.
1342 *
1343 * @hide
1344 */
1345 public static final int DELETE_SYSTEM_APP = 0x00000004;
1346
1347 /**
Todd Kennedy39bfee52016-02-24 10:28:21 -08001348 * Flag parameter for {@link #deletePackage} to indicate that, if you are calling
1349 * uninstall on a package that is replaced to provide new feature splits, the
1350 * existing application should not be killed during the removal process.
1351 *
1352 * @hide
1353 */
1354 public static final int DELETE_DONT_KILL_APP = 0x00000008;
1355
1356 /**
Kenny Rootc39bb4a2011-02-28 13:27:19 -08001357 * Return code for when package deletion succeeds. This is passed to the
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001358 * {@link IPackageDeleteObserver} if the system succeeded in deleting the
1359 * package.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001360 *
Kenny Rootc39bb4a2011-02-28 13:27:19 -08001361 * @hide
1362 */
1363 public static final int DELETE_SUCCEEDED = 1;
1364
1365 /**
1366 * Deletion failed return code: this is passed to the
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001367 * {@link IPackageDeleteObserver} if the system failed to delete the package
1368 * for an unspecified reason.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001369 *
Kenny Rootc39bb4a2011-02-28 13:27:19 -08001370 * @hide
1371 */
1372 public static final int DELETE_FAILED_INTERNAL_ERROR = -1;
1373
1374 /**
1375 * Deletion failed return code: this is passed to the
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001376 * {@link IPackageDeleteObserver} if the system failed to delete the package
1377 * because it is the active DevicePolicy manager.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001378 *
Kenny Rootc39bb4a2011-02-28 13:27:19 -08001379 * @hide
1380 */
1381 public static final int DELETE_FAILED_DEVICE_POLICY_MANAGER = -2;
1382
1383 /**
Amith Yamasanie4cf7342012-12-17 11:12:09 -08001384 * Deletion failed return code: this is passed to the
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001385 * {@link IPackageDeleteObserver} if the system failed to delete the package
1386 * since the user is restricted.
Amith Yamasanie4cf7342012-12-17 11:12:09 -08001387 *
1388 * @hide
1389 */
1390 public static final int DELETE_FAILED_USER_RESTRICTED = -3;
1391
1392 /**
Kenny Guy1b88da52014-07-10 16:33:49 +01001393 * Deletion failed return code: this is passed to the
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001394 * {@link IPackageDeleteObserver} if the system failed to delete the package
1395 * because a profile or device owner has marked the package as
1396 * uninstallable.
Kenny Guyc13053b2014-05-29 14:17:17 +01001397 *
1398 * @hide
1399 */
Jeff Sharkeyf0600952014-08-07 17:31:53 -07001400 public static final int DELETE_FAILED_OWNER_BLOCKED = -4;
1401
1402 /** {@hide} */
1403 public static final int DELETE_FAILED_ABORTED = -5;
Kenny Guyc13053b2014-05-29 14:17:17 +01001404
1405 /**
Svet Ganov67882122016-12-11 16:36:34 -08001406 * Deletion failed return code: this is passed to the
1407 * {@link IPackageDeleteObserver} if the system failed to delete the package
1408 * because the packge is a shared library used by other installed packages.
1409 * {@hide} */
1410 public static final int DELETE_FAILED_USED_SHARED_LIBRARY = -6;
1411
1412 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001413 * Return code that is passed to the {@link IPackageMoveObserver} when the
Kenny Rootc39bb4a2011-02-28 13:27:19 -08001414 * package has been successfully moved by the system.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001415 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001416 * @hide
1417 */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07001418 public static final int MOVE_SUCCEEDED = -100;
1419
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001420 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001421 * Error code that is passed to the {@link IPackageMoveObserver} when the
1422 * package hasn't been successfully moved by the system because of
1423 * insufficient memory on specified media.
1424 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001425 * @hide
1426 */
1427 public static final int MOVE_FAILED_INSUFFICIENT_STORAGE = -1;
1428
1429 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001430 * Error code that is passed to the {@link IPackageMoveObserver} if the
1431 * specified package doesn't exist.
1432 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001433 * @hide
1434 */
1435 public static final int MOVE_FAILED_DOESNT_EXIST = -2;
1436
1437 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001438 * Error code that is passed to the {@link IPackageMoveObserver} if the
1439 * specified package cannot be moved since its a system package.
1440 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001441 * @hide
1442 */
1443 public static final int MOVE_FAILED_SYSTEM_PACKAGE = -3;
1444
1445 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001446 * Error code that is passed to the {@link IPackageMoveObserver} if the
1447 * specified package cannot be moved since its forward locked.
1448 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001449 * @hide
1450 */
1451 public static final int MOVE_FAILED_FORWARD_LOCKED = -4;
1452
1453 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001454 * Error code that is passed to the {@link IPackageMoveObserver} if the
1455 * specified package cannot be moved to the specified location.
1456 *
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001457 * @hide
1458 */
1459 public static final int MOVE_FAILED_INVALID_LOCATION = -5;
1460
1461 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001462 * Error code that is passed to the {@link IPackageMoveObserver} if the
1463 * specified package cannot be moved to the specified location.
1464 *
Suchi Amalapurapu8a9ab242010-03-11 16:49:16 -08001465 * @hide
1466 */
1467 public static final int MOVE_FAILED_INTERNAL_ERROR = -6;
1468
1469 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001470 * Error code that is passed to the {@link IPackageMoveObserver} if the
1471 * specified package already has an operation pending in the queue.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001472 *
Kenny Rootdeb11262010-08-02 11:36:21 -07001473 * @hide
1474 */
1475 public static final int MOVE_FAILED_OPERATION_PENDING = -7;
1476
1477 /**
Makoto Onukif34db0a2016-02-17 11:17:15 -08001478 * Error code that is passed to the {@link IPackageMoveObserver} if the
1479 * specified package cannot be moved since it contains a device admin.
1480 *
1481 * @hide
1482 */
1483 public static final int MOVE_FAILED_DEVICE_ADMIN = -8;
1484
1485 /**
Yao Chen022b8ea2016-12-16 11:03:28 -08001486 * Error code that is passed to the {@link IPackageMoveObserver} if system does not allow
1487 * non-system apps to be moved to internal storage.
1488 *
1489 * @hide
1490 */
1491 public static final int MOVE_FAILED_3RD_PARTY_NOT_ALLOWED_ON_INTERNAL = -9;
1492
1493 /**
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001494 * Flag parameter for {@link #movePackage} to indicate that
1495 * the package should be moved to internal storage if its
1496 * been installed on external media.
1497 * @hide
1498 */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07001499 @Deprecated
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001500 public static final int MOVE_INTERNAL = 0x00000001;
1501
1502 /**
1503 * Flag parameter for {@link #movePackage} to indicate that
1504 * the package should be moved to external media.
1505 * @hide
1506 */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07001507 @Deprecated
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001508 public static final int MOVE_EXTERNAL_MEDIA = 0x00000002;
1509
Jeff Sharkey620b32b2015-04-23 19:36:02 -07001510 /** {@hide} */
1511 public static final String EXTRA_MOVE_ID = "android.content.pm.extra.MOVE_ID";
1512
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08001513 /**
Kenny Root05ca4c92011-09-15 10:36:25 -07001514 * Usable by the required verifier as the {@code verificationCode} argument
1515 * for {@link PackageManager#verifyPendingInstall} to indicate that it will
1516 * allow the installation to proceed without any of the optional verifiers
1517 * needing to vote.
1518 *
1519 * @hide
1520 */
1521 public static final int VERIFICATION_ALLOW_WITHOUT_SUFFICIENT = 2;
1522
1523 /**
Kenny Root3a9b5fb2011-09-20 14:15:38 -07001524 * Used as the {@code verificationCode} argument for
1525 * {@link PackageManager#verifyPendingInstall} to indicate that the calling
1526 * package verifier allows the installation to proceed.
1527 */
1528 public static final int VERIFICATION_ALLOW = 1;
1529
1530 /**
1531 * Used as the {@code verificationCode} argument for
1532 * {@link PackageManager#verifyPendingInstall} to indicate the calling
1533 * package verifier does not vote to allow the installation to proceed.
1534 */
1535 public static final int VERIFICATION_REJECT = -1;
1536
1537 /**
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001538 * Used as the {@code verificationCode} argument for
1539 * {@link PackageManager#verifyIntentFilter} to indicate that the calling
1540 * IntentFilter Verifier confirms that the IntentFilter is verified.
1541 *
1542 * @hide
1543 */
Todd Kennedydfa93ab2016-03-03 15:24:33 -08001544 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001545 public static final int INTENT_FILTER_VERIFICATION_SUCCESS = 1;
1546
1547 /**
1548 * Used as the {@code verificationCode} argument for
1549 * {@link PackageManager#verifyIntentFilter} to indicate that the calling
1550 * IntentFilter Verifier confirms that the IntentFilter is NOT verified.
1551 *
1552 * @hide
1553 */
Todd Kennedydfa93ab2016-03-03 15:24:33 -08001554 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001555 public static final int INTENT_FILTER_VERIFICATION_FAILURE = -1;
1556
1557 /**
1558 * Internal status code to indicate that an IntentFilter verification result is not specified.
1559 *
1560 * @hide
1561 */
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08001562 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001563 public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED = 0;
1564
1565 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001566 * Used as the {@code status} argument for
1567 * {@link #updateIntentVerificationStatusAsUser} to indicate that the User
1568 * will always be prompted the Intent Disambiguation Dialog if there are two
1569 * or more Intent resolved for the IntentFilter's domain(s).
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001570 *
1571 * @hide
1572 */
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08001573 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001574 public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK = 1;
1575
1576 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001577 * Used as the {@code status} argument for
1578 * {@link #updateIntentVerificationStatusAsUser} to indicate that the User
1579 * will never be prompted the Intent Disambiguation Dialog if there are two
1580 * or more resolution of the Intent. The default App for the domain(s)
1581 * specified in the IntentFilter will also ALWAYS be used.
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001582 *
1583 * @hide
1584 */
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08001585 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001586 public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS = 2;
1587
1588 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001589 * Used as the {@code status} argument for
1590 * {@link #updateIntentVerificationStatusAsUser} to indicate that the User
1591 * may be prompted the Intent Disambiguation Dialog if there are two or more
1592 * Intent resolved. The default App for the domain(s) specified in the
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001593 * IntentFilter will also NEVER be presented to the User.
1594 *
1595 * @hide
1596 */
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08001597 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08001598 public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER = 3;
1599
1600 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07001601 * Used as the {@code status} argument for
1602 * {@link #updateIntentVerificationStatusAsUser} to indicate that this app
1603 * should always be considered as an ambiguous candidate for handling the
1604 * matching Intent even if there are other candidate apps in the "always"
1605 * state. Put another way: if there are any 'always ask' apps in a set of
1606 * more than one candidate app, then a disambiguation is *always* presented
1607 * even if there is another candidate app with the 'always' state.
Christopher Tate56f0ff32015-08-13 16:29:33 -07001608 *
1609 * @hide
1610 */
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08001611 @SystemApi
Christopher Tate56f0ff32015-08-13 16:29:33 -07001612 public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK = 4;
1613
1614 /**
rich canningsd9ef3e52012-08-22 14:28:05 -07001615 * Can be used as the {@code millisecondsToDelay} argument for
1616 * {@link PackageManager#extendVerificationTimeout}. This is the
1617 * maximum time {@code PackageManager} waits for the verification
1618 * agent to return (in milliseconds).
1619 */
1620 public static final long MAXIMUM_VERIFICATION_TIMEOUT = 60*60*1000;
1621
1622 /**
Amith Yamasani0b285492011-04-14 17:35:23 -07001623 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device's
1624 * audio pipeline is low-latency, more suitable for audio applications sensitive to delays or
1625 * lag in sound input or output.
Dan Morrill898e1e82010-09-26 17:28:30 -07001626 */
1627 @SdkConstant(SdkConstantType.FEATURE)
1628 public static final String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
1629
1630 /**
1631 * Feature for {@link #getSystemAvailableFeatures} and
Unsuk Jung50909f62014-09-02 18:25:49 -07001632 * {@link #hasSystemFeature}: The device includes at least one form of audio
1633 * output, such as speakers, audio jack or streaming over bluetooth
1634 */
1635 @SdkConstant(SdkConstantType.FEATURE)
1636 public static final String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output";
1637
1638 /**
Glenn Kastencdcb5772015-05-06 15:54:49 -07001639 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Glenn Kasten7587edc2015-10-30 17:45:52 -07001640 * The device has professional audio level of functionality and performance.
Glenn Kastencdcb5772015-05-06 15:54:49 -07001641 */
1642 @SdkConstant(SdkConstantType.FEATURE)
1643 public static final String FEATURE_AUDIO_PRO = "android.hardware.audio.pro";
1644
1645 /**
Unsuk Jung50909f62014-09-02 18:25:49 -07001646 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08001647 * {@link #hasSystemFeature}: The device is capable of communicating with
1648 * other devices via Bluetooth.
1649 */
1650 @SdkConstant(SdkConstantType.FEATURE)
1651 public static final String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
1652
1653 /**
1654 * Feature for {@link #getSystemAvailableFeatures} and
Matthew Xiea7227722013-04-18 15:25:59 -07001655 * {@link #hasSystemFeature}: The device is capable of communicating with
1656 * other devices via Bluetooth Low Energy radio.
1657 */
1658 @SdkConstant(SdkConstantType.FEATURE)
1659 public static final String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le";
1660
1661 /**
1662 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001663 * {@link #hasSystemFeature}: The device has a camera facing away
1664 * from the screen.
1665 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001666 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001667 public static final String FEATURE_CAMERA = "android.hardware.camera";
Dan Morrill50ab63f2010-03-05 16:16:19 -08001668
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001669 /**
1670 * Feature for {@link #getSystemAvailableFeatures} and
1671 * {@link #hasSystemFeature}: The device's camera supports auto-focus.
1672 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001673 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001674 public static final String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus";
Dan Morrill50ab63f2010-03-05 16:16:19 -08001675
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001676 /**
1677 * Feature for {@link #getSystemAvailableFeatures} and
Eino-Ville Talvala752af832012-09-18 14:45:37 -07001678 * {@link #hasSystemFeature}: The device has at least one camera pointing in
Eino-Ville Talvala9131da22014-05-08 11:39:53 -07001679 * some direction, or can support an external camera being connected to it.
Eino-Ville Talvala752af832012-09-18 14:45:37 -07001680 */
1681 @SdkConstant(SdkConstantType.FEATURE)
1682 public static final String FEATURE_CAMERA_ANY = "android.hardware.camera.any";
1683
1684 /**
1685 * Feature for {@link #getSystemAvailableFeatures} and
Eino-Ville Talvala9131da22014-05-08 11:39:53 -07001686 * {@link #hasSystemFeature}: The device can support having an external camera connected to it.
1687 * The external camera may not always be connected or available to applications to use.
1688 */
1689 @SdkConstant(SdkConstantType.FEATURE)
1690 public static final String FEATURE_CAMERA_EXTERNAL = "android.hardware.camera.external";
1691
1692 /**
1693 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001694 * {@link #hasSystemFeature}: The device's camera supports flash.
1695 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001696 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001697 public static final String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash";
Dan Morrill50ab63f2010-03-05 16:16:19 -08001698
1699 /**
1700 * Feature for {@link #getSystemAvailableFeatures} and
Chih-Chung Changde1057c2010-06-14 19:15:00 +08001701 * {@link #hasSystemFeature}: The device has a front facing camera.
1702 */
1703 @SdkConstant(SdkConstantType.FEATURE)
1704 public static final String FEATURE_CAMERA_FRONT = "android.hardware.camera.front";
1705
1706 /**
Eino-Ville Talvala611fece2014-07-10 17:29:38 -07001707 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
1708 * of the cameras on the device supports the
1709 * {@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL full hardware}
1710 * capability level.
1711 */
1712 @SdkConstant(SdkConstantType.FEATURE)
1713 public static final String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full";
1714
1715 /**
1716 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
1717 * of the cameras on the device supports the
1718 * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR manual sensor}
1719 * capability level.
1720 */
1721 @SdkConstant(SdkConstantType.FEATURE)
1722 public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR =
1723 "android.hardware.camera.capability.manual_sensor";
1724
1725 /**
1726 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
1727 * of the cameras on the device supports the
1728 * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING manual post-processing}
1729 * capability level.
1730 */
1731 @SdkConstant(SdkConstantType.FEATURE)
1732 public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING =
1733 "android.hardware.camera.capability.manual_post_processing";
1734
1735 /**
1736 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
1737 * of the cameras on the device supports the
1738 * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW RAW}
1739 * capability level.
1740 */
1741 @SdkConstant(SdkConstantType.FEATURE)
1742 public static final String FEATURE_CAMERA_CAPABILITY_RAW =
1743 "android.hardware.camera.capability.raw";
1744
1745 /**
Chih-Chung Changde1057c2010-06-14 19:15:00 +08001746 * Feature for {@link #getSystemAvailableFeatures} and
Alex Ray0c9d61f2013-10-03 12:17:54 -07001747 * {@link #hasSystemFeature}: The device is capable of communicating with
1748 * consumer IR devices.
1749 */
1750 @SdkConstant(SdkConstantType.FEATURE)
1751 public static final String FEATURE_CONSUMER_IR = "android.hardware.consumerir";
1752
Sam Lin90e258b2017-04-03 20:57:45 -07001753 /** {@hide} */
1754 @SdkConstant(SdkConstantType.FEATURE)
1755 public static final String FEATURE_CTS = "android.software.cts";
1756
Alex Ray0c9d61f2013-10-03 12:17:54 -07001757 /**
1758 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08001759 * {@link #hasSystemFeature}: The device supports one or more methods of
1760 * reporting current location.
1761 */
1762 @SdkConstant(SdkConstantType.FEATURE)
1763 public static final String FEATURE_LOCATION = "android.hardware.location";
1764
1765 /**
1766 * Feature for {@link #getSystemAvailableFeatures} and
1767 * {@link #hasSystemFeature}: The device has a Global Positioning System
1768 * receiver and can report precise location.
1769 */
1770 @SdkConstant(SdkConstantType.FEATURE)
1771 public static final String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
1772
1773 /**
1774 * Feature for {@link #getSystemAvailableFeatures} and
1775 * {@link #hasSystemFeature}: The device can report location with coarse
1776 * accuracy using a network-based geolocation system.
1777 */
1778 @SdkConstant(SdkConstantType.FEATURE)
1779 public static final String FEATURE_LOCATION_NETWORK = "android.hardware.location.network";
1780
1781 /**
1782 * Feature for {@link #getSystemAvailableFeatures} and
1783 * {@link #hasSystemFeature}: The device can record audio via a
1784 * microphone.
1785 */
1786 @SdkConstant(SdkConstantType.FEATURE)
1787 public static final String FEATURE_MICROPHONE = "android.hardware.microphone";
1788
1789 /**
1790 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill76437d32010-09-01 11:17:20 -07001791 * {@link #hasSystemFeature}: The device can communicate using Near-Field
1792 * Communications (NFC).
1793 */
1794 @SdkConstant(SdkConstantType.FEATURE)
1795 public static final String FEATURE_NFC = "android.hardware.nfc";
1796
1797 /**
1798 * Feature for {@link #getSystemAvailableFeatures} and
Martijn Coenenf4bf1582013-07-22 12:01:19 -07001799 * {@link #hasSystemFeature}: The device supports host-
1800 * based NFC card emulation.
Martijn Coenendf4d1d62013-08-28 11:18:58 -07001801 *
1802 * TODO remove when depending apps have moved to new constant.
1803 * @hide
1804 * @deprecated
Martijn Coenenf4bf1582013-07-22 12:01:19 -07001805 */
Jose Lima970417c2014-04-10 10:42:19 -07001806 @Deprecated
Martijn Coenenf4bf1582013-07-22 12:01:19 -07001807 @SdkConstant(SdkConstantType.FEATURE)
1808 public static final String FEATURE_NFC_HCE = "android.hardware.nfc.hce";
1809
1810 /**
1811 * Feature for {@link #getSystemAvailableFeatures} and
Martijn Coenendf4d1d62013-08-28 11:18:58 -07001812 * {@link #hasSystemFeature}: The device supports host-
1813 * based NFC card emulation.
1814 */
1815 @SdkConstant(SdkConstantType.FEATURE)
1816 public static final String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
1817
1818 /**
1819 * Feature for {@link #getSystemAvailableFeatures} and
Yoshinobu Itoc52adfe2016-01-22 18:14:18 +09001820 * {@link #hasSystemFeature}: The device supports host-
1821 * based NFC-F card emulation.
1822 */
1823 @SdkConstant(SdkConstantType.FEATURE)
1824 public static final String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
1825
1826 /**
1827 * Feature for {@link #getSystemAvailableFeatures} and
Martijn Coenen441d61b2017-04-12 13:52:40 -07001828 * {@link #hasSystemFeature}: The device supports any
1829 * one of the {@link #FEATURE_NFC}, {@link #FEATURE_NFC_HOST_CARD_EMULATION},
1830 * or {@link #FEATURE_NFC_HOST_CARD_EMULATION_NFCF} features.
1831 *
1832 * @hide
1833 */
1834 @SdkConstant(SdkConstantType.FEATURE)
1835 public static final String FEATURE_NFC_ANY = "android.hardware.nfc.any";
1836
1837 /**
1838 * Feature for {@link #getSystemAvailableFeatures} and
Jesse Hall7f517062014-07-18 11:54:41 -07001839 * {@link #hasSystemFeature}: The device supports the OpenGL ES
1840 * <a href="http://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
1841 * Android Extension Pack</a>.
1842 */
1843 @SdkConstant(SdkConstantType.FEATURE)
1844 public static final String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
1845
1846 /**
1847 * Feature for {@link #getSystemAvailableFeatures} and
Jesse Hall39ceeb52016-03-10 09:04:26 -08001848 * {@link #hasSystemFeature(String, int)}: If this feature is supported, the Vulkan native API
1849 * will enumerate at least one {@code VkPhysicalDevice}, and the feature version will indicate
1850 * what level of optional hardware features limits it supports.
Jesse Hallf77a34f2016-02-04 18:41:33 -08001851 * <p>
1852 * Level 0 includes the base Vulkan requirements as well as:
1853 * <ul><li>{@code VkPhysicalDeviceFeatures::textureCompressionETC2}</li></ul>
1854 * <p>
1855 * Level 1 additionally includes:
1856 * <ul>
1857 * <li>{@code VkPhysicalDeviceFeatures::fullDrawIndexUint32}</li>
1858 * <li>{@code VkPhysicalDeviceFeatures::imageCubeArray}</li>
1859 * <li>{@code VkPhysicalDeviceFeatures::independentBlend}</li>
1860 * <li>{@code VkPhysicalDeviceFeatures::geometryShader}</li>
1861 * <li>{@code VkPhysicalDeviceFeatures::tessellationShader}</li>
1862 * <li>{@code VkPhysicalDeviceFeatures::sampleRateShading}</li>
1863 * <li>{@code VkPhysicalDeviceFeatures::textureCompressionASTC_LDR}</li>
1864 * <li>{@code VkPhysicalDeviceFeatures::fragmentStoresAndAtomics}</li>
1865 * <li>{@code VkPhysicalDeviceFeatures::shaderImageGatherExtended}</li>
1866 * <li>{@code VkPhysicalDeviceFeatures::shaderUniformBufferArrayDynamicIndexing}</li>
1867 * <li>{@code VkPhysicalDeviceFeatures::shaderSampledImageArrayDynamicIndexing}</li>
1868 * </ul>
1869 */
1870 @SdkConstant(SdkConstantType.FEATURE)
1871 public static final String FEATURE_VULKAN_HARDWARE_LEVEL = "android.hardware.vulkan.level";
1872
1873 /**
1874 * Feature for {@link #getSystemAvailableFeatures} and
Jesse Hall1cd7e932017-02-05 19:58:15 -08001875 * {@link #hasSystemFeature(String, int)}: If this feature is supported, the Vulkan native API
1876 * will enumerate at least one {@code VkPhysicalDevice}, and the feature version will indicate
1877 * what level of optional compute features are supported beyond the Vulkan 1.0 requirements.
1878 * <p>
Jesse Hall7a1b8af2017-04-14 11:22:24 -07001879 * Compute level 0 indicates support for the {@code VariablePointers} SPIR-V capability defined
1880 * by the SPV_KHR_variable_pointers extension.
Jesse Hall1cd7e932017-02-05 19:58:15 -08001881 */
1882 @SdkConstant(SdkConstantType.FEATURE)
1883 public static final String FEATURE_VULKAN_HARDWARE_COMPUTE = "android.hardware.vulkan.compute";
1884
1885 /**
1886 * Feature for {@link #getSystemAvailableFeatures} and
Jesse Hall39ceeb52016-03-10 09:04:26 -08001887 * {@link #hasSystemFeature(String, int)}: The version of this feature indicates the highest
Jesse Hallf77a34f2016-02-04 18:41:33 -08001888 * {@code VkPhysicalDeviceProperties::apiVersion} supported by the physical devices that support
1889 * the hardware level indicated by {@link #FEATURE_VULKAN_HARDWARE_LEVEL}. The feature version
1890 * uses the same encoding as Vulkan version numbers:
1891 * <ul>
1892 * <li>Major version number in bits 31-22</li>
1893 * <li>Minor version number in bits 21-12</li>
1894 * <li>Patch version number in bits 11-0</li>
1895 * </ul>
1896 */
1897 @SdkConstant(SdkConstantType.FEATURE)
1898 public static final String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version";
1899
1900 /**
Tomasz Wasilczyk347192e2017-04-04 11:13:44 -07001901 * The device includes broadcast radio tuner.
1902 *
1903 * @hide FutureFeature
1904 */
1905 @SdkConstant(SdkConstantType.FEATURE)
1906 public static final String FEATURE_RADIO = "android.hardware.radio";
1907
1908 /**
Jesse Hallf77a34f2016-02-04 18:41:33 -08001909 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill5744bb42010-09-01 19:18:57 -07001910 * {@link #hasSystemFeature}: The device includes an accelerometer.
1911 */
1912 @SdkConstant(SdkConstantType.FEATURE)
1913 public static final String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer";
1914
1915 /**
1916 * Feature for {@link #getSystemAvailableFeatures} and
1917 * {@link #hasSystemFeature}: The device includes a barometer (air
1918 * pressure sensor.)
1919 */
1920 @SdkConstant(SdkConstantType.FEATURE)
1921 public static final String FEATURE_SENSOR_BAROMETER = "android.hardware.sensor.barometer";
1922
1923 /**
1924 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08001925 * {@link #hasSystemFeature}: The device includes a magnetometer (compass).
1926 */
1927 @SdkConstant(SdkConstantType.FEATURE)
1928 public static final String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass";
1929
1930 /**
1931 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill5744bb42010-09-01 19:18:57 -07001932 * {@link #hasSystemFeature}: The device includes a gyroscope.
Dan Morrill50ab63f2010-03-05 16:16:19 -08001933 */
1934 @SdkConstant(SdkConstantType.FEATURE)
Dan Morrill5744bb42010-09-01 19:18:57 -07001935 public static final String FEATURE_SENSOR_GYROSCOPE = "android.hardware.sensor.gyroscope";
Dan Morrill50ab63f2010-03-05 16:16:19 -08001936
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001937 /**
1938 * Feature for {@link #getSystemAvailableFeatures} and
1939 * {@link #hasSystemFeature}: The device includes a light sensor.
1940 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001941 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001942 public static final String FEATURE_SENSOR_LIGHT = "android.hardware.sensor.light";
Dan Morrill50ab63f2010-03-05 16:16:19 -08001943
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001944 /**
1945 * Feature for {@link #getSystemAvailableFeatures} and
1946 * {@link #hasSystemFeature}: The device includes a proximity sensor.
1947 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08001948 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001949 public static final String FEATURE_SENSOR_PROXIMITY = "android.hardware.sensor.proximity";
Amith Yamasani4b2e9342011-03-31 12:38:53 -07001950
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08001951 /**
1952 * Feature for {@link #getSystemAvailableFeatures} and
Aravind Akella068b0c02013-10-12 17:39:15 -07001953 * {@link #hasSystemFeature}: The device includes a hardware step counter.
1954 */
1955 @SdkConstant(SdkConstantType.FEATURE)
1956 public static final String FEATURE_SENSOR_STEP_COUNTER = "android.hardware.sensor.stepcounter";
1957
1958 /**
1959 * Feature for {@link #getSystemAvailableFeatures} and
1960 * {@link #hasSystemFeature}: The device includes a hardware step detector.
1961 */
1962 @SdkConstant(SdkConstantType.FEATURE)
1963 public static final String FEATURE_SENSOR_STEP_DETECTOR = "android.hardware.sensor.stepdetector";
1964
1965 /**
1966 * Feature for {@link #getSystemAvailableFeatures} and
Vinod Krishnan8afb23c2014-04-30 11:11:39 -07001967 * {@link #hasSystemFeature}: The device includes a heart rate monitor.
1968 */
1969 @SdkConstant(SdkConstantType.FEATURE)
1970 public static final String FEATURE_SENSOR_HEART_RATE = "android.hardware.sensor.heartrate";
1971
1972 /**
1973 * Feature for {@link #getSystemAvailableFeatures} and
Trevor Johns682c24e2016-04-12 10:13:47 -07001974 * {@link #hasSystemFeature}: The heart rate sensor on this device is an Electrocardiogram.
Vinod Krishnan1ab76892014-08-20 11:11:55 -07001975 */
1976 @SdkConstant(SdkConstantType.FEATURE)
1977 public static final String FEATURE_SENSOR_HEART_RATE_ECG =
1978 "android.hardware.sensor.heartrate.ecg";
1979
1980 /**
1981 * Feature for {@link #getSystemAvailableFeatures} and
Aravind Akella8b8e74b2014-07-09 11:52:39 -07001982 * {@link #hasSystemFeature}: The device includes a relative humidity sensor.
1983 */
1984 @SdkConstant(SdkConstantType.FEATURE)
1985 public static final String FEATURE_SENSOR_RELATIVE_HUMIDITY =
1986 "android.hardware.sensor.relative_humidity";
1987
1988 /**
1989 * Feature for {@link #getSystemAvailableFeatures} and
1990 * {@link #hasSystemFeature}: The device includes an ambient temperature sensor.
1991 */
1992 @SdkConstant(SdkConstantType.FEATURE)
1993 public static final String FEATURE_SENSOR_AMBIENT_TEMPERATURE =
1994 "android.hardware.sensor.ambient_temperature";
1995
1996 /**
1997 * Feature for {@link #getSystemAvailableFeatures} and
Ashutosh Joshieae371b2015-04-09 10:30:07 -07001998 * {@link #hasSystemFeature}: The device supports high fidelity sensor processing
1999 * capabilities.
2000 */
2001 @SdkConstant(SdkConstantType.FEATURE)
2002 public static final String FEATURE_HIFI_SENSORS =
2003 "android.hardware.sensor.hifi_sensors";
2004
2005 /**
2006 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002007 * {@link #hasSystemFeature}: The device has a telephony radio with data
2008 * communication support.
2009 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08002010 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002011 public static final String FEATURE_TELEPHONY = "android.hardware.telephony";
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002012
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002013 /**
2014 * Feature for {@link #getSystemAvailableFeatures} and
2015 * {@link #hasSystemFeature}: The device has a CDMA telephony stack.
2016 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08002017 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002018 public static final String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma";
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002019
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002020 /**
2021 * Feature for {@link #getSystemAvailableFeatures} and
2022 * {@link #hasSystemFeature}: The device has a GSM telephony stack.
2023 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08002024 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002025 public static final String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm";
Hung-ying Tyan3424c022010-08-27 18:08:19 +08002026
2027 /**
Polina Bondarenko80909ce2017-01-12 21:10:38 +01002028 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
2029 * The device supports telephony carrier restriction mechanism.
2030 *
2031 * <p>Devices declaring this feature must have an implementation of the
2032 * {@link android.telephony.TelephonyManager#getAllowedCarriers} and
2033 * {@link android.telephony.TelephonyManager#setAllowedCarriers}.
2034 * @hide
2035 */
2036 @SystemApi
2037 @SdkConstant(SdkConstantType.FEATURE)
2038 public static final String FEATURE_TELEPHONY_CARRIERLOCK =
2039 "android.hardware.telephony.carrierlock";
2040
2041 /**
Jeff Davidson35cda392017-02-27 09:46:00 -08002042 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device
2043 * supports embedded subscriptions on eUICCs.
2044 * TODO(b/35851809): Make this public.
2045 * @hide
2046 */
2047 @SdkConstant(SdkConstantType.FEATURE)
2048 public static final String FEATURE_TELEPHONY_EUICC = "android.hardware.telephony.euicc";
2049
2050 /**
Hung-ying Tyan3424c022010-08-27 18:08:19 +08002051 * Feature for {@link #getSystemAvailableFeatures} and
Mike Lockwoodf4ca2472011-02-27 11:23:25 -08002052 * {@link #hasSystemFeature}: The device supports connecting to USB devices
2053 * as the USB host.
2054 */
2055 @SdkConstant(SdkConstantType.FEATURE)
2056 public static final String FEATURE_USB_HOST = "android.hardware.usb.host";
2057
2058 /**
2059 * Feature for {@link #getSystemAvailableFeatures} and
2060 * {@link #hasSystemFeature}: The device supports connecting to USB accessories.
2061 */
2062 @SdkConstant(SdkConstantType.FEATURE)
2063 public static final String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory";
2064
2065 /**
2066 * Feature for {@link #getSystemAvailableFeatures} and
Hung-ying Tyan3424c022010-08-27 18:08:19 +08002067 * {@link #hasSystemFeature}: The SIP API is enabled on the device.
2068 */
2069 @SdkConstant(SdkConstantType.FEATURE)
2070 public static final String FEATURE_SIP = "android.software.sip";
2071
2072 /**
2073 * Feature for {@link #getSystemAvailableFeatures} and
2074 * {@link #hasSystemFeature}: The device supports SIP-based VOIP.
2075 */
2076 @SdkConstant(SdkConstantType.FEATURE)
2077 public static final String FEATURE_SIP_VOIP = "android.software.sip.voip";
2078
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002079 /**
2080 * Feature for {@link #getSystemAvailableFeatures} and
Ihab Awad1ec68882014-09-12 11:09:01 -07002081 * {@link #hasSystemFeature}: The Connection Service API is enabled on the device.
2082 */
2083 @SdkConstant(SdkConstantType.FEATURE)
2084 public static final String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice";
2085
2086 /**
2087 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrillb0fe0332010-04-05 14:43:58 -07002088 * {@link #hasSystemFeature}: The device's display has a touch screen.
2089 */
2090 @SdkConstant(SdkConstantType.FEATURE)
2091 public static final String FEATURE_TOUCHSCREEN = "android.hardware.touchscreen";
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002092
Dan Morrillb0fe0332010-04-05 14:43:58 -07002093 /**
2094 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08002095 * {@link #hasSystemFeature}: The device's touch screen supports
2096 * multitouch sufficient for basic two-finger gesture detection.
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002097 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08002098 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002099 public static final String FEATURE_TOUCHSCREEN_MULTITOUCH = "android.hardware.touchscreen.multitouch";
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002100
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002101 /**
2102 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08002103 * {@link #hasSystemFeature}: The device's touch screen is capable of
2104 * tracking two or more fingers fully independently.
2105 */
2106 @SdkConstant(SdkConstantType.FEATURE)
2107 public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT = "android.hardware.touchscreen.multitouch.distinct";
2108
2109 /**
2110 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill6993d3d2010-09-03 14:30:14 -07002111 * {@link #hasSystemFeature}: The device's touch screen is capable of
2112 * tracking a full hand of fingers fully independently -- that is, 5 or
2113 * more simultaneous independent pointers.
2114 */
2115 @SdkConstant(SdkConstantType.FEATURE)
2116 public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND = "android.hardware.touchscreen.multitouch.jazzhand";
2117
2118 /**
2119 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrilla5376872011-01-23 13:15:53 -08002120 * {@link #hasSystemFeature}: The device does not have a touch screen, but
2121 * does support touch emulation for basic events. For instance, the
2122 * device might use a mouse or remote control to drive a cursor, and
2123 * emulate basic touch pointer events like down, up, drag, etc. All
2124 * devices that support android.hardware.touchscreen or a sub-feature are
2125 * presumed to also support faketouch.
2126 */
2127 @SdkConstant(SdkConstantType.FEATURE)
2128 public static final String FEATURE_FAKETOUCH = "android.hardware.faketouch";
2129
2130 /**
2131 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborne22fe932011-06-08 20:24:29 -07002132 * {@link #hasSystemFeature}: The device does not have a touch screen, but
2133 * does support touch emulation for basic events that supports distinct
2134 * tracking of two or more fingers. This is an extension of
2135 * {@link #FEATURE_FAKETOUCH} for input devices with this capability. Note
2136 * that unlike a distinct multitouch screen as defined by
2137 * {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT}, these kinds of input
2138 * devices will not actually provide full two-finger gestures since the
2139 * input is being transformed to cursor movement on the screen. That is,
2140 * single finger gestures will move a cursor; two-finger swipes will
2141 * result in single-finger touch events; other two-finger gestures will
2142 * result in the corresponding two-finger touch event.
2143 */
2144 @SdkConstant(SdkConstantType.FEATURE)
2145 public static final String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = "android.hardware.faketouch.multitouch.distinct";
2146
2147 /**
2148 * Feature for {@link #getSystemAvailableFeatures} and
2149 * {@link #hasSystemFeature}: The device does not have a touch screen, but
2150 * does support touch emulation for basic events that supports tracking
2151 * a hand of fingers (5 or more fingers) fully independently.
2152 * This is an extension of
2153 * {@link #FEATURE_FAKETOUCH} for input devices with this capability. Note
2154 * that unlike a multitouch screen as defined by
2155 * {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND}, not all two finger
2156 * gestures can be detected due to the limitations described for
2157 * {@link #FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT}.
2158 */
2159 @SdkConstant(SdkConstantType.FEATURE)
2160 public static final String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = "android.hardware.faketouch.multitouch.jazzhand";
2161
2162 /**
2163 * Feature for {@link #getSystemAvailableFeatures} and
Jim Millerd9b9d412015-07-22 19:51:40 -07002164 * {@link #hasSystemFeature}: The device has biometric hardware to detect a fingerprint.
2165 */
2166 @SdkConstant(SdkConstantType.FEATURE)
2167 public static final String FEATURE_FINGERPRINT = "android.hardware.fingerprint";
2168
2169 /**
2170 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborne289bff2011-06-13 19:33:22 -07002171 * {@link #hasSystemFeature}: The device supports portrait orientation
2172 * screens. For backwards compatibility, you can assume that if neither
2173 * this nor {@link #FEATURE_SCREEN_LANDSCAPE} is set then the device supports
2174 * both portrait and landscape.
2175 */
2176 @SdkConstant(SdkConstantType.FEATURE)
2177 public static final String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait";
2178
2179 /**
2180 * Feature for {@link #getSystemAvailableFeatures} and
2181 * {@link #hasSystemFeature}: The device supports landscape orientation
2182 * screens. For backwards compatibility, you can assume that if neither
2183 * this nor {@link #FEATURE_SCREEN_PORTRAIT} is set then the device supports
2184 * both portrait and landscape.
2185 */
2186 @SdkConstant(SdkConstantType.FEATURE)
2187 public static final String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape";
2188
2189 /**
2190 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002191 * {@link #hasSystemFeature}: The device supports live wallpapers.
2192 */
Xavier Ducrohet3274b9b2009-12-14 17:52:20 -08002193 @SdkConstant(SdkConstantType.FEATURE)
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002194 public static final String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper";
Oscar Montemayor1228d0a2010-01-28 12:01:44 -08002195 /**
Dan Morrill50ab63f2010-03-05 16:16:19 -08002196 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn119bbc32013-03-22 17:27:25 -07002197 * {@link #hasSystemFeature}: The device supports app widgets.
2198 */
2199 @SdkConstant(SdkConstantType.FEATURE)
2200 public static final String FEATURE_APP_WIDGETS = "android.software.app_widgets";
2201
2202 /**
Dianne Hackborn91097de2014-04-04 18:02:06 -07002203 * @hide
2204 * Feature for {@link #getSystemAvailableFeatures} and
2205 * {@link #hasSystemFeature}: The device supports
2206 * {@link android.service.voice.VoiceInteractionService} and
2207 * {@link android.app.VoiceInteractor}.
2208 */
2209 @SdkConstant(SdkConstantType.FEATURE)
2210 public static final String FEATURE_VOICE_RECOGNIZERS = "android.software.voice_recognizers";
2211
2212
2213 /**
Dianne Hackborn119bbc32013-03-22 17:27:25 -07002214 * Feature for {@link #getSystemAvailableFeatures} and
2215 * {@link #hasSystemFeature}: The device supports a home screen that is replaceable
2216 * by third party applications.
2217 */
2218 @SdkConstant(SdkConstantType.FEATURE)
2219 public static final String FEATURE_HOME_SCREEN = "android.software.home_screen";
2220
2221 /**
2222 * Feature for {@link #getSystemAvailableFeatures} and
2223 * {@link #hasSystemFeature}: The device supports adding new input methods implemented
2224 * with the {@link android.inputmethodservice.InputMethodService} API.
2225 */
2226 @SdkConstant(SdkConstantType.FEATURE)
2227 public static final String FEATURE_INPUT_METHODS = "android.software.input_methods";
2228
2229 /**
2230 * Feature for {@link #getSystemAvailableFeatures} and
Amith Yamasani44a01b72013-09-16 10:44:57 -07002231 * {@link #hasSystemFeature}: The device supports device policy enforcement via device admins.
2232 */
2233 @SdkConstant(SdkConstantType.FEATURE)
2234 public static final String FEATURE_DEVICE_ADMIN = "android.software.device_admin";
2235
2236 /**
2237 * Feature for {@link #getSystemAvailableFeatures} and
Tim Kilbournf94b6a92014-03-07 15:13:48 -08002238 * {@link #hasSystemFeature}: The device supports leanback UI. This is
2239 * typically used in a living room television experience, but is a software
2240 * feature unlike {@link #FEATURE_TELEVISION}. Devices running with this
2241 * feature will use resources associated with the "television" UI mode.
2242 */
2243 @SdkConstant(SdkConstantType.FEATURE)
2244 public static final String FEATURE_LEANBACK = "android.software.leanback";
2245
2246 /**
2247 * Feature for {@link #getSystemAvailableFeatures} and
2248 * {@link #hasSystemFeature}: The device supports only leanback UI. Only
2249 * applications designed for this experience should be run, though this is
2250 * not enforced by the system.
Tim Kilbournf94b6a92014-03-07 15:13:48 -08002251 */
2252 @SdkConstant(SdkConstantType.FEATURE)
2253 public static final String FEATURE_LEANBACK_ONLY = "android.software.leanback_only";
2254
2255 /**
2256 * Feature for {@link #getSystemAvailableFeatures} and
Jae Seocfd861e2014-08-27 14:02:15 -07002257 * {@link #hasSystemFeature}: The device supports live TV and can display
2258 * contents from TV inputs implemented with the
2259 * {@link android.media.tv.TvInputService} API.
2260 */
2261 @SdkConstant(SdkConstantType.FEATURE)
2262 public static final String FEATURE_LIVE_TV = "android.software.live_tv";
2263
2264 /**
2265 * Feature for {@link #getSystemAvailableFeatures} and
Dan Morrill50ab63f2010-03-05 16:16:19 -08002266 * {@link #hasSystemFeature}: The device supports WiFi (802.11) networking.
2267 */
2268 @SdkConstant(SdkConstantType.FEATURE)
2269 public static final String FEATURE_WIFI = "android.hardware.wifi";
2270
2271 /**
Irfan Sheriff45b8b462011-09-07 11:24:16 -07002272 * Feature for {@link #getSystemAvailableFeatures} and
2273 * {@link #hasSystemFeature}: The device supports Wi-Fi Direct networking.
2274 */
2275 @SdkConstant(SdkConstantType.FEATURE)
2276 public static final String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
2277
2278 /**
Dianne Hackborn0cf2c8a2012-05-17 17:29:49 -07002279 * Feature for {@link #getSystemAvailableFeatures} and
Etan Cohen04133272016-10-26 11:22:06 -07002280 * {@link #hasSystemFeature}: The device supports Wi-Fi Aware.
Etan Cohen20d329b2015-09-29 13:49:02 -07002281 */
2282 @SdkConstant(SdkConstantType.FEATURE)
Etan Cohen04133272016-10-26 11:22:06 -07002283 public static final String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
Etan Cohen20d329b2015-09-29 13:49:02 -07002284
2285 /**
2286 * Feature for {@link #getSystemAvailableFeatures} and
Peter Qiub99fe312017-05-05 13:48:47 -07002287 * {@link #hasSystemFeature}: The device supports Wi-Fi Passpoint.
Jeff Sharkey0c28d432017-06-09 11:37:02 -06002288 * @hide
Peter Qiub99fe312017-05-05 13:48:47 -07002289 */
2290 @SdkConstant(SdkConstantType.FEATURE)
2291 public static final String FEATURE_WIFI_PASSPOINT = "android.hardware.wifi.passpoint";
2292
2293 /**
2294 * Feature for {@link #getSystemAvailableFeatures} and
Dianne Hackborn0cf2c8a2012-05-17 17:29:49 -07002295 * {@link #hasSystemFeature}: This is a device dedicated to showing UI
Todd Kennedy7f95a002015-04-22 14:28:25 -07002296 * on a vehicle headunit. A headunit here is defined to be inside a
2297 * vehicle that may or may not be moving. A headunit uses either a
2298 * primary display in the center console and/or additional displays in
2299 * the instrument cluster or elsewhere in the vehicle. Headunit display(s)
2300 * have limited size and resolution. The user will likely be focused on
2301 * driving so limiting driver distraction is a primary concern. User input
2302 * can be a variety of hard buttons, touch, rotary controllers and even mouse-
2303 * like interfaces.
2304 */
2305 @SdkConstant(SdkConstantType.FEATURE)
2306 public static final String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
2307
2308 /**
2309 * Feature for {@link #getSystemAvailableFeatures} and
2310 * {@link #hasSystemFeature}: This is a device dedicated to showing UI
Dianne Hackborn0cf2c8a2012-05-17 17:29:49 -07002311 * on a television. Television here is defined to be a typical living
2312 * room television experience: displayed on a big screen, where the user
2313 * is sitting far away from it, and the dominant form of input will be
2314 * something like a DPAD, not through touch or mouse.
Tim Kilbournf94b6a92014-03-07 15:13:48 -08002315 * @deprecated use {@link #FEATURE_LEANBACK} instead.
Dianne Hackborn0cf2c8a2012-05-17 17:29:49 -07002316 */
Jose Lima970417c2014-04-10 10:42:19 -07002317 @Deprecated
Dianne Hackborn0cf2c8a2012-05-17 17:29:49 -07002318 @SdkConstant(SdkConstantType.FEATURE)
2319 public static final String FEATURE_TELEVISION = "android.hardware.type.television";
2320
2321 /**
Justin Kohb5731f091c2014-02-13 16:06:59 -08002322 * Feature for {@link #getSystemAvailableFeatures} and
2323 * {@link #hasSystemFeature}: This is a device dedicated to showing UI
2324 * on a watch. A watch here is defined to be a device worn on the body, perhaps on
2325 * the wrist. The user is very close when interacting with the device.
2326 */
2327 @SdkConstant(SdkConstantType.FEATURE)
2328 public static final String FEATURE_WATCH = "android.hardware.type.watch";
2329
2330 /**
Ralph Nathanb8e0dee2017-01-24 15:24:59 -08002331 * Feature for {@link #getSystemAvailableFeatures} and
2332 * {@link #hasSystemFeature}: This is a device for IoT and may not have an UI. An embedded
2333 * device is defined as a full stack Android device with or without a display and no
2334 * user-installable apps.
2335 */
2336 @SdkConstant(SdkConstantType.FEATURE)
2337 public static final String FEATURE_EMBEDDED = "android.hardware.type.embedded";
2338
2339 /**
Dennis Kempin7345ed52017-04-14 16:40:56 -07002340 * Feature for {@link #getSystemAvailableFeatures} and
2341 * {@link #hasSystemFeature}: This is a device dedicated to be primarily used
2342 * with keyboard, mouse or touchpad. This includes traditional desktop
2343 * computers, laptops and variants such as convertibles or detachables.
2344 * Due to the larger screen, the device will most likely use the
2345 * {@link #FEATURE_FREEFORM_WINDOW_MANAGEMENT} feature as well.
Jeff Sharkey0c28d432017-06-09 11:37:02 -06002346 * @hide
Dennis Kempin7345ed52017-04-14 16:40:56 -07002347 */
2348 @SdkConstant(SdkConstantType.FEATURE)
2349 public static final String FEATURE_PC = "android.hardware.type.pc";
2350
2351 /**
Adam Lesinski3d9bcb92014-02-18 14:05:14 -08002352 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
2353 * The device supports printing.
2354 */
2355 @SdkConstant(SdkConstantType.FEATURE)
2356 public static final String FEATURE_PRINTING = "android.software.print";
2357
2358 /**
2359 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Eugene Susla7c3eef22017-03-10 14:25:58 -08002360 * The device supports {@link android.companion.CompanionDeviceManager#associate associating}
2361 * with devices via {@link android.companion.CompanionDeviceManager}.
2362 */
2363 @SdkConstant(SdkConstantType.FEATURE)
2364 public static final String FEATURE_COMPANION_DEVICE_SETUP
2365 = "android.software.companion_device_setup";
2366
2367 /**
2368 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Adam Lesinski3d9bcb92014-02-18 14:05:14 -08002369 * The device can perform backup and restore operations on installed applications.
2370 */
2371 @SdkConstant(SdkConstantType.FEATURE)
2372 public static final String FEATURE_BACKUP = "android.software.backup";
2373
2374 /**
Vladislav Kaznacheevd303b252015-10-27 17:30:58 -07002375 * Feature for {@link #getSystemAvailableFeatures} and
2376 * {@link #hasSystemFeature}: The device supports freeform window management.
2377 * Windows have title bars and can be moved and resized.
2378 */
Filip Gruszczynski811dc3b2015-11-23 12:34:22 -08002379 // If this feature is present, you also need to set
2380 // com.android.internal.R.config_freeformWindowManagement to true in your configuration overlay.
Vladislav Kaznacheevd303b252015-10-27 17:30:58 -07002381 @SdkConstant(SdkConstantType.FEATURE)
2382 public static final String FEATURE_FREEFORM_WINDOW_MANAGEMENT
2383 = "android.software.freeform_window_management";
2384
2385 /**
Adam Connors23cc04e2014-04-01 12:12:20 +01002386 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Wale Ogunwalefbe12c42015-12-06 16:23:50 -08002387 * The device supports picture-in-picture multi-window mode.
2388 */
2389 @SdkConstant(SdkConstantType.FEATURE)
2390 public static final String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
2391
2392 /**
2393 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Andrii Kulian1981f5f2017-04-07 16:23:12 -07002394 * The device supports running activities on secondary displays.
2395 */
2396 @SdkConstant(SdkConstantType.FEATURE)
2397 public static final String FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS
2398 = "android.software.activities_on_secondary_displays";
2399
2400 /**
2401 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Amith Yamasani1d653272014-09-11 17:56:05 -07002402 * The device supports creating secondary users and managed profiles via
2403 * {@link DevicePolicyManager}.
Adam Connors23cc04e2014-04-01 12:12:20 +01002404 */
2405 @SdkConstant(SdkConstantType.FEATURE)
Amith Yamasani1d653272014-09-11 17:56:05 -07002406 public static final String FEATURE_MANAGED_USERS = "android.software.managed_users";
2407
2408 /**
2409 * @hide
2410 * TODO: Remove after dependencies updated b/17392243
2411 */
2412 public static final String FEATURE_MANAGED_PROFILES = "android.software.managed_users";
Adam Connors23cc04e2014-04-01 12:12:20 +01002413
2414 /**
Ben Murdochf564c7f2014-05-20 18:58:06 +01002415 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Adam Connors19ccb5f2014-09-08 17:31:50 +01002416 * The device supports verified boot.
2417 */
2418 @SdkConstant(SdkConstantType.FEATURE)
2419 public static final String FEATURE_VERIFIED_BOOT = "android.software.verified_boot";
2420
2421 /**
2422 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
2423 * The device supports secure removal of users. When a user is deleted the data associated
2424 * with that user is securely deleted and no longer available.
2425 */
2426 @SdkConstant(SdkConstantType.FEATURE)
2427 public static final String FEATURE_SECURELY_REMOVES_USERS
2428 = "android.software.securely_removes_users";
2429
Jeff Sharkeyb92b05b2016-01-28 09:50:00 -07002430 /** {@hide} */
2431 @SdkConstant(SdkConstantType.FEATURE)
2432 public static final String FEATURE_FILE_BASED_ENCRYPTION
2433 = "android.software.file_based_encryption";
2434
Adam Connors19ccb5f2014-09-08 17:31:50 +01002435 /**
2436 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Ben Murdoch422c7a52014-05-16 13:45:47 +01002437 * The device has a full implementation of the android.webkit.* APIs. Devices
2438 * lacking this feature will not have a functioning WebView implementation.
2439 */
2440 @SdkConstant(SdkConstantType.FEATURE)
2441 public static final String FEATURE_WEBVIEW = "android.software.webview";
2442
2443 /**
Joe LaPenna4bb015d2014-07-04 17:15:54 -07002444 * Feature for {@link #getSystemAvailableFeatures} and
2445 * {@link #hasSystemFeature}: This device supports ethernet.
Joe LaPenna4bb015d2014-07-04 17:15:54 -07002446 */
2447 @SdkConstant(SdkConstantType.FEATURE)
2448 public static final String FEATURE_ETHERNET = "android.hardware.ethernet";
2449
2450 /**
Yuncheol Heoa0c4a062014-07-10 20:49:27 +09002451 * Feature for {@link #getSystemAvailableFeatures} and
2452 * {@link #hasSystemFeature}: This device supports HDMI-CEC.
2453 * @hide
2454 */
2455 @SdkConstant(SdkConstantType.FEATURE)
2456 public static final String FEATURE_HDMI_CEC = "android.hardware.hdmi.cec";
2457
2458 /**
Michael Wright6faa6752014-09-05 17:57:44 -07002459 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
2460 * The device has all of the inputs necessary to be considered a compatible game controller, or
2461 * includes a compatible game controller in the box.
2462 */
2463 @SdkConstant(SdkConstantType.FEATURE)
2464 public static final String FEATURE_GAMEPAD = "android.hardware.gamepad";
2465
Mike Lockwood5781cd52015-03-27 13:23:41 -07002466 /**
2467 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
2468 * The device has a full implementation of the android.media.midi.* APIs.
2469 */
2470 @SdkConstant(SdkConstantType.FEATURE)
2471 public static final String FEATURE_MIDI = "android.software.midi";
Michael Wright6faa6752014-09-05 17:57:44 -07002472
2473 /**
Ruben Brunkdd18a0b2015-12-04 16:16:31 -08002474 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Ruben Brunk927d3452016-05-02 19:30:51 -07002475 * The device implements an optimized mode for virtual reality (VR) applications that handles
2476 * stereoscopic rendering of notifications, and disables most monocular system UI components
2477 * while a VR application has user focus.
2478 * Devices declaring this feature must include an application implementing a
2479 * {@link android.service.vr.VrListenerService} that can be targeted by VR applications via
2480 * {@link android.app.Activity#setVrModeEnabled}.
Ruben Brunkdd18a0b2015-12-04 16:16:31 -08002481 */
2482 @SdkConstant(SdkConstantType.FEATURE)
2483 public static final String FEATURE_VR_MODE = "android.software.vr.mode";
2484
2485 /**
Ruben Brunk31d80ea2016-01-25 20:14:08 -08002486 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Ruben Brunk927d3452016-05-02 19:30:51 -07002487 * The device implements {@link #FEATURE_VR_MODE} but additionally meets extra CDD requirements
2488 * to provide a high-quality VR experience. In general, devices declaring this feature will
2489 * additionally:
2490 * <ul>
2491 * <li>Deliver consistent performance at a high framerate over an extended period of time
2492 * for typical VR application CPU/GPU workloads with a minimal number of frame drops for VR
2493 * applications that have called
2494 * {@link android.view.Window#setSustainedPerformanceMode}.</li>
2495 * <li>Implement {@link #FEATURE_HIFI_SENSORS} and have a low sensor latency.</li>
2496 * <li>Include optimizations to lower display persistence while running VR applications.</li>
2497 * <li>Implement an optimized render path to minimize latency to draw to the device's main
2498 * display.</li>
2499 * <li>Include the following EGL extensions: EGL_ANDROID_create_native_client_buffer,
2500 * EGL_ANDROID_front_buffer_auto_refresh, EGL_EXT_protected_content,
2501 * EGL_KHR_mutable_render_buffer, EGL_KHR_reusable_sync, and EGL_KHR_wait_sync.</li>
2502 * <li>Provide at least one CPU core that is reserved for use solely by the top, foreground
2503 * VR application process for critical render threads while such an application is
2504 * running.</li>
2505 * </ul>
Ruben Brunk31d80ea2016-01-25 20:14:08 -08002506 */
2507 @SdkConstant(SdkConstantType.FEATURE)
2508 public static final String FEATURE_VR_MODE_HIGH_PERFORMANCE
2509 = "android.hardware.vr.high_performance";
2510
2511 /**
Craig Donner279dd662017-03-15 17:10:50 -07002512 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Svet Ganov43574b02017-04-12 09:25:20 -07002513 * The device supports autofill of user credentials, addresses, credit cards, etc
2514 * via integration with {@link android.service.autofill.AutofillService autofill
2515 * providers}.
2516 */
2517 @SdkConstant(SdkConstantType.FEATURE)
2518 public static final String FEATURE_AUTOFILL = "android.software.autofill";
2519
2520 /**
2521 * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
Craig Donner279dd662017-03-15 17:10:50 -07002522 * The device implements headtracking suitable for a VR device.
2523 */
2524 @SdkConstant(SdkConstantType.FEATURE)
2525 public static final String FEATURE_VR_HEADTRACKING = "android.hardware.vr.headtracking";
2526
2527 /**
Dianne Hackborne83cefce2010-02-04 17:38:14 -08002528 * Action to external storage service to clean out removed apps.
2529 * @hide
2530 */
2531 public static final String ACTION_CLEAN_EXTERNAL_STORAGE
2532 = "android.content.pm.CLEAN_EXTERNAL_STORAGE";
Oscar Montemayor1228d0a2010-01-28 12:01:44 -08002533
Dianne Hackborn08ee42c2009-11-19 17:08:01 -08002534 /**
Kenny Root5ab21572011-07-27 11:11:19 -07002535 * Extra field name for the URI to a verification file. Passed to a package
2536 * verifier.
2537 *
2538 * @hide
2539 */
2540 public static final String EXTRA_VERIFICATION_URI = "android.content.pm.extra.VERIFICATION_URI";
2541
2542 /**
2543 * Extra field name for the ID of a package pending verification. Passed to
2544 * a package verifier and is used to call back to
Kenny Root3a9b5fb2011-09-20 14:15:38 -07002545 * {@link PackageManager#verifyPendingInstall(int, int)}
Kenny Root5ab21572011-07-27 11:11:19 -07002546 */
2547 public static final String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
2548
2549 /**
2550 * Extra field name for the package identifier which is trying to install
2551 * the package.
2552 *
2553 * @hide
2554 */
2555 public static final String EXTRA_VERIFICATION_INSTALLER_PACKAGE
2556 = "android.content.pm.extra.VERIFICATION_INSTALLER_PACKAGE";
2557
2558 /**
2559 * Extra field name for the requested install flags for a package pending
2560 * verification. Passed to a package verifier.
2561 *
2562 * @hide
2563 */
2564 public static final String EXTRA_VERIFICATION_INSTALL_FLAGS
2565 = "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS";
2566
2567 /**
rich cannings13d428e2012-09-13 13:43:07 -07002568 * Extra field name for the uid of who is requesting to install
2569 * the package.
2570 *
2571 * @hide
2572 */
2573 public static final String EXTRA_VERIFICATION_INSTALLER_UID
2574 = "android.content.pm.extra.VERIFICATION_INSTALLER_UID";
2575
2576 /**
2577 * Extra field name for the package name of a package pending verification.
2578 *
2579 * @hide
2580 */
2581 public static final String EXTRA_VERIFICATION_PACKAGE_NAME
2582 = "android.content.pm.extra.VERIFICATION_PACKAGE_NAME";
2583 /**
rich canningsd1b5cfc2012-08-29 14:49:51 -07002584 * Extra field name for the result of a verification, either
2585 * {@link #VERIFICATION_ALLOW}, or {@link #VERIFICATION_REJECT}.
2586 * Passed to package verifiers after a package is verified.
2587 */
2588 public static final String EXTRA_VERIFICATION_RESULT
2589 = "android.content.pm.extra.VERIFICATION_RESULT";
2590
2591 /**
rich cannings13d428e2012-09-13 13:43:07 -07002592 * Extra field name for the version code of a package pending verification.
2593 *
2594 * @hide
2595 */
2596 public static final String EXTRA_VERIFICATION_VERSION_CODE
2597 = "android.content.pm.extra.VERIFICATION_VERSION_CODE";
2598
2599 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07002600 * Extra field name for the ID of a intent filter pending verification.
2601 * Passed to an intent filter verifier and is used to call back to
2602 * {@link #verifyIntentFilter}
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08002603 *
2604 * @hide
2605 */
2606 public static final String EXTRA_INTENT_FILTER_VERIFICATION_ID
2607 = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_ID";
2608
2609 /**
2610 * Extra field name for the scheme used for an intent filter pending verification. Passed to
2611 * an intent filter verifier and is used to construct the URI to verify against.
2612 *
2613 * Usually this is "https"
2614 *
2615 * @hide
2616 */
2617 public static final String EXTRA_INTENT_FILTER_VERIFICATION_URI_SCHEME
2618 = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_URI_SCHEME";
2619
2620 /**
2621 * Extra field name for the host names to be used for an intent filter pending verification.
2622 * Passed to an intent filter verifier and is used to construct the URI to verify the
2623 * intent filter.
2624 *
2625 * This is a space delimited list of hosts.
2626 *
2627 * @hide
2628 */
2629 public static final String EXTRA_INTENT_FILTER_VERIFICATION_HOSTS
2630 = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_HOSTS";
2631
2632 /**
2633 * Extra field name for the package name to be used for an intent filter pending verification.
2634 * Passed to an intent filter verifier and is used to check the verification responses coming
2635 * from the hosts. Each host response will need to include the package name of APK containing
2636 * the intent filter.
2637 *
2638 * @hide
2639 */
2640 public static final String EXTRA_INTENT_FILTER_VERIFICATION_PACKAGE_NAME
2641 = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_PACKAGE_NAME";
2642
2643 /**
2644 * The action used to request that the user approve a permission request
2645 * from the application.
Nick Kralevich035f80d2013-03-27 15:20:08 -07002646 *
2647 * @hide
2648 */
Svetoslavc6d1c342015-02-26 14:44:43 -08002649 @SystemApi
2650 public static final String ACTION_REQUEST_PERMISSIONS =
2651 "android.content.pm.action.REQUEST_PERMISSIONS";
Nick Kralevich035f80d2013-03-27 15:20:08 -07002652
2653 /**
Svetoslavc6d1c342015-02-26 14:44:43 -08002654 * The names of the requested permissions.
2655 * <p>
2656 * <strong>Type:</strong> String[]
2657 * </p>
2658 *
2659 * @hide
2660 */
2661 @SystemApi
2662 public static final String EXTRA_REQUEST_PERMISSIONS_NAMES =
2663 "android.content.pm.extra.REQUEST_PERMISSIONS_NAMES";
2664
2665 /**
2666 * The results from the permissions request.
2667 * <p>
2668 * <strong>Type:</strong> int[] of #PermissionResult
2669 * </p>
2670 *
2671 * @hide
2672 */
2673 @SystemApi
2674 public static final String EXTRA_REQUEST_PERMISSIONS_RESULTS
2675 = "android.content.pm.extra.REQUEST_PERMISSIONS_RESULTS";
Nick Kralevich035f80d2013-03-27 15:20:08 -07002676
2677 /**
Jeff Sharkeybb580672014-07-10 12:10:25 -07002678 * String extra for {@link PackageInstallObserver} in the 'extras' Bundle in case of
Christopher Tatef1977b42014-03-24 16:25:51 -07002679 * {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}. This extra names the package which provides
2680 * the existing definition for the permission.
2681 * @hide
2682 */
2683 public static final String EXTRA_FAILURE_EXISTING_PACKAGE
2684 = "android.content.pm.extra.FAILURE_EXISTING_PACKAGE";
2685
2686 /**
Jeff Sharkeybb580672014-07-10 12:10:25 -07002687 * String extra for {@link PackageInstallObserver} in the 'extras' Bundle in case of
Christopher Tatef1977b42014-03-24 16:25:51 -07002688 * {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}. This extra names the permission that is
2689 * being redundantly defined by the package being installed.
2690 * @hide
2691 */
2692 public static final String EXTRA_FAILURE_EXISTING_PERMISSION
2693 = "android.content.pm.extra.FAILURE_EXISTING_PERMISSION";
2694
Svet Ganov8c7f7002015-05-07 10:48:44 -07002695 /**
2696 * Permission flag: The permission is set in its current state
2697 * by the user and apps can still request it at runtime.
2698 *
2699 * @hide
2700 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002701 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07002702 public static final int FLAG_PERMISSION_USER_SET = 1 << 0;
2703
2704 /**
2705 * Permission flag: The permission is set in its current state
2706 * by the user and it is fixed, i.e. apps can no longer request
2707 * this permission.
2708 *
2709 * @hide
2710 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002711 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07002712 public static final int FLAG_PERMISSION_USER_FIXED = 1 << 1;
2713
2714 /**
2715 * Permission flag: The permission is set in its current state
2716 * by device policy and neither apps nor the user can change
2717 * its state.
2718 *
2719 * @hide
2720 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002721 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07002722 public static final int FLAG_PERMISSION_POLICY_FIXED = 1 << 2;
2723
2724 /**
2725 * Permission flag: The permission is set in a granted state but
2726 * access to resources it guards is restricted by other means to
2727 * enable revoking a permission on legacy apps that do not support
2728 * runtime permissions. If this permission is upgraded to runtime
2729 * because the app was updated to support runtime permissions, the
2730 * the permission will be revoked in the upgrade process.
2731 *
2732 * @hide
2733 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002734 @SystemApi
Svet Ganov8c7f7002015-05-07 10:48:44 -07002735 public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 1 << 3;
2736
Svet Ganovb3f22b42015-05-12 11:01:24 -07002737 /**
2738 * Permission flag: The permission is set in its current state
2739 * because the app is a component that is a part of the system.
2740 *
2741 * @hide
2742 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002743 @SystemApi
Svet Ganovb3f22b42015-05-12 11:01:24 -07002744 public static final int FLAG_PERMISSION_SYSTEM_FIXED = 1 << 4;
Svet Ganov8c7f7002015-05-07 10:48:44 -07002745
Svet Ganov77ab6a82015-07-03 12:03:02 -07002746 /**
2747 * Permission flag: The permission is granted by default because it
2748 * enables app functionality that is expected to work out-of-the-box
2749 * for providing a smooth user experience. For example, the phone app
2750 * is expected to have the phone permission.
2751 *
2752 * @hide
2753 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002754 @SystemApi
Svet Ganov77ab6a82015-07-03 12:03:02 -07002755 public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 1 << 5;
2756
Svet Ganov8c7f7002015-05-07 10:48:44 -07002757 /**
Svet Ganov9c165d72015-12-01 19:52:26 -08002758 * Permission flag: The permission has to be reviewed before any of
2759 * the app components can run.
2760 *
2761 * @hide
2762 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08002763 @SystemApi
Svet Ganov9c165d72015-12-01 19:52:26 -08002764 public static final int FLAG_PERMISSION_REVIEW_REQUIRED = 1 << 6;
2765
2766 /**
Svet Ganov8c7f7002015-05-07 10:48:44 -07002767 * Mask for all permission flags.
2768 *
2769 * @hide
2770 */
2771 @SystemApi
Svet Ganovb3f22b42015-05-12 11:01:24 -07002772 public static final int MASK_PERMISSION_FLAGS = 0xFF;
Svet Ganov8c7f7002015-05-07 10:48:44 -07002773
Christopher Tatef1977b42014-03-24 16:25:51 -07002774 /**
Svet Ganovd7b1f4112016-02-09 18:49:23 -08002775 * This is a library that contains components apps can invoke. For
2776 * example, a services for apps to bind to, or standard chooser UI,
2777 * etc. This library is versioned and backwards compatible. Clients
2778 * should check its version via {@link android.ext.services.Version
2779 * #getVersionCode()} and avoid calling APIs added in later versions.
2780 *
2781 * @hide
2782 */
2783 public static final String SYSTEM_SHARED_LIBRARY_SERVICES = "android.ext.services";
2784
2785 /**
2786 * This is a library that contains components apps can dynamically
2787 * load. For example, new widgets, helper classes, etc. This library
2788 * is versioned and backwards compatible. Clients should check its
2789 * version via {@link android.ext.shared.Version#getVersionCode()}
2790 * and avoid calling APIs added in later versions.
2791 *
2792 * @hide
2793 */
2794 public static final String SYSTEM_SHARED_LIBRARY_SHARED = "android.ext.shared";
2795
2796 /**
Brian Carlstromca82e612016-04-19 23:16:08 -07002797 * Used when starting a process for an Activity.
2798 *
2799 * @hide
2800 */
2801 public static final int NOTIFY_PACKAGE_USE_ACTIVITY = 0;
2802
2803 /**
2804 * Used when starting a process for a Service.
2805 *
2806 * @hide
2807 */
2808 public static final int NOTIFY_PACKAGE_USE_SERVICE = 1;
2809
2810 /**
2811 * Used when moving a Service to the foreground.
2812 *
2813 * @hide
2814 */
2815 public static final int NOTIFY_PACKAGE_USE_FOREGROUND_SERVICE = 2;
2816
2817 /**
2818 * Used when starting a process for a BroadcastReceiver.
2819 *
2820 * @hide
2821 */
2822 public static final int NOTIFY_PACKAGE_USE_BROADCAST_RECEIVER = 3;
2823
2824 /**
2825 * Used when starting a process for a ContentProvider.
2826 *
2827 * @hide
2828 */
2829 public static final int NOTIFY_PACKAGE_USE_CONTENT_PROVIDER = 4;
2830
2831 /**
2832 * Used when starting a process for a BroadcastReceiver.
2833 *
2834 * @hide
2835 */
2836 public static final int NOTIFY_PACKAGE_USE_BACKUP = 5;
2837
2838 /**
2839 * Used with Context.getClassLoader() across Android packages.
2840 *
2841 * @hide
2842 */
2843 public static final int NOTIFY_PACKAGE_USE_CROSS_PACKAGE = 6;
2844
2845 /**
2846 * Used when starting a package within a process for Instrumentation.
2847 *
2848 * @hide
2849 */
2850 public static final int NOTIFY_PACKAGE_USE_INSTRUMENTATION = 7;
2851
2852 /**
2853 * Total number of usage reasons.
2854 *
2855 * @hide
2856 */
2857 public static final int NOTIFY_PACKAGE_USE_REASONS_COUNT = 8;
2858
2859 /**
Svet Ganov67882122016-12-11 16:36:34 -08002860 * Constant for specifying the highest installed package version code.
2861 */
2862 public static final int VERSION_CODE_HIGHEST = -1;
2863
2864 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002865 * Retrieve overall information about an application package that is
2866 * installed on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002867 *
2868 * @param packageName The full name (i.e. com.google.apps.contacts) of the
Jeff Sharkey4347f812017-04-21 12:08:39 -06002869 * desired package.
2870 * @param flags Additional option flags to modify the data returned.
2871 * @return A PackageInfo object containing information about the package. If
2872 * flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the package
2873 * is not found in the list of installed applications, the package
2874 * information is retrieved from the list of uninstalled
kmccormick30498b42013-03-27 17:39:17 -07002875 * applications (which includes installed applications as well as
2876 * applications with data directory i.e. applications which had been
2877 * deleted with {@code DONT_DELETE_DATA} flag set).
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002878 * @throws NameNotFoundException if a package with the given name cannot be
2879 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002880 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002881 public abstract PackageInfo getPackageInfo(String packageName, @PackageInfoFlags int flags)
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002882 throws NameNotFoundException;
2883
2884 /**
Svet Ganov67882122016-12-11 16:36:34 -08002885 * Retrieve overall information about an application package that is
2886 * installed on the system. This method can be used for retrieving
Jeff Sharkey4347f812017-04-21 12:08:39 -06002887 * information about packages for which multiple versions can be installed
2888 * at the time. Currently only packages hosting static shared libraries can
2889 * have multiple installed versions. The method can also be used to get info
2890 * for a package that has a single version installed by passing
2891 * {@link #VERSION_CODE_HIGHEST} in the {@link VersionedPackage}
Svet Ganov67882122016-12-11 16:36:34 -08002892 * constructor.
2893 *
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07002894 * @param versionedPackage The versioned package for which to query.
Jeff Sharkey4347f812017-04-21 12:08:39 -06002895 * @param flags Additional option flags to modify the data returned.
2896 * @return A PackageInfo object containing information about the package. If
2897 * flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the package
2898 * is not found in the list of installed applications, the package
2899 * information is retrieved from the list of uninstalled
Svet Ganov67882122016-12-11 16:36:34 -08002900 * applications (which includes installed applications as well as
2901 * applications with data directory i.e. applications which had been
2902 * deleted with {@code DONT_DELETE_DATA} flag set).
2903 * @throws NameNotFoundException if a package with the given name cannot be
2904 * found on the system.
Svet Ganov67882122016-12-11 16:36:34 -08002905 */
2906 public abstract PackageInfo getPackageInfo(VersionedPackage versionedPackage,
2907 @PackageInfoFlags int flags) throws NameNotFoundException;
2908
2909 /**
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002910 * Retrieve overall information about an application package that is
2911 * installed on the system.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002912 *
2913 * @param packageName The full name (i.e. com.google.apps.contacts) of the
Jeff Sharkey4347f812017-04-21 12:08:39 -06002914 * desired package.
2915 * @param flags Additional option flags to modify the data returned.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002916 * @param userId The user id.
Jeff Sharkey4347f812017-04-21 12:08:39 -06002917 * @return A PackageInfo object containing information about the package. If
2918 * flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the package
2919 * is not found in the list of installed applications, the package
2920 * information is retrieved from the list of uninstalled
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002921 * applications (which includes installed applications as well as
2922 * applications with data directory i.e. applications which had been
2923 * deleted with {@code DONT_DELETE_DATA} flag set).
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002924 * @throws NameNotFoundException if a package with the given name cannot be
2925 * found on the system.
Svet Ganov67882122016-12-11 16:36:34 -08002926 * @hide
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002927 */
2928 @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS)
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07002929 public abstract PackageInfo getPackageInfoAsUser(String packageName,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002930 @PackageInfoFlags int flags, @UserIdInt int userId) throws NameNotFoundException;
Nicolas Prevot9a80e532015-09-23 15:49:28 +01002931
2932 /**
Dianne Hackborn47096932010-02-11 15:57:09 -08002933 * Map from the current package names in use on the device to whatever
2934 * the current canonical name of that package is.
2935 * @param names Array of current names to be mapped.
2936 * @return Returns an array of the same size as the original, containing
2937 * the canonical name for each package.
2938 */
2939 public abstract String[] currentToCanonicalPackageNames(String[] names);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002940
Dianne Hackborn47096932010-02-11 15:57:09 -08002941 /**
2942 * Map from a packages canonical name to the current name in use on the device.
2943 * @param names Array of new names to be mapped.
2944 * @return Returns an array of the same size as the original, containing
2945 * the current name for each package.
2946 */
2947 public abstract String[] canonicalToCurrentPackageNames(String[] names);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002948
Dianne Hackborn47096932010-02-11 15:57:09 -08002949 /**
Andrew Solovay5ae13352014-06-06 12:23:09 -07002950 * Returns a "good" intent to launch a front-door activity in a package.
2951 * This is used, for example, to implement an "open" button when browsing
2952 * through packages. The current implementation looks first for a main
2953 * activity in the category {@link Intent#CATEGORY_INFO}, and next for a
2954 * main activity in the category {@link Intent#CATEGORY_LAUNCHER}. Returns
2955 * <code>null</code> if neither are found.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002956 *
2957 * @param packageName The name of the package to inspect.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07002958 *
Andrew Solovay5ae13352014-06-06 12:23:09 -07002959 * @return A fully-qualified {@link Intent} that can be used to launch the
2960 * main activity in the package. Returns <code>null</code> if the package
2961 * does not contain such an activity, or if <em>packageName</em> is not
Ihab Awad1ec68882014-09-12 11:09:01 -07002962 * recognized.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002963 */
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06002964 public abstract @Nullable Intent getLaunchIntentForPackage(@NonNull String packageName);
Mihai Predaeae850c2009-05-13 10:13:48 +02002965
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002966 /**
Jose Lima970417c2014-04-10 10:42:19 -07002967 * Return a "good" intent to launch a front-door Leanback activity in a
2968 * package, for use for example to implement an "open" button when browsing
2969 * through packages. The current implementation will look for a main
2970 * activity in the category {@link Intent#CATEGORY_LEANBACK_LAUNCHER}, or
2971 * return null if no main leanback activities are found.
Adam Connors551c0782014-06-05 12:13:03 +01002972 *
Jose Lima970417c2014-04-10 10:42:19 -07002973 * @param packageName The name of the package to inspect.
2974 * @return Returns either a fully-qualified Intent that can be used to launch
2975 * the main Leanback activity in the package, or null if the package
2976 * does not contain such an activity.
2977 */
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06002978 public abstract @Nullable Intent getLeanbackLaunchIntentForPackage(@NonNull String packageName);
Jose Lima970417c2014-04-10 10:42:19 -07002979
2980 /**
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06002981 * Return an array of all of the POSIX secondary group IDs that have been
2982 * assigned to the given package.
2983 * <p>
2984 * Note that the same package may have different GIDs under different
2985 * {@link UserHandle} on the same device.
Adam Connors551c0782014-06-05 12:13:03 +01002986 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002987 * @param packageName The full name (i.e. com.google.apps.contacts) of the
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06002988 * desired package.
2989 * @return Returns an int array of the assigned GIDs, or null if there are
Jose Lima970417c2014-04-10 10:42:19 -07002990 * none.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07002991 * @throws NameNotFoundException if a package with the given name cannot be
2992 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002993 */
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06002994 public abstract int[] getPackageGids(@NonNull String packageName)
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002995 throws NameNotFoundException;
2996
2997 /**
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06002998 * Return an array of all of the POSIX secondary group IDs that have been
2999 * assigned to the given package.
3000 * <p>
3001 * Note that the same package may have different GIDs under different
3002 * {@link UserHandle} on the same device.
Dianne Hackborna06de0f2012-12-11 16:34:47 -08003003 *
3004 * @param packageName The full name (i.e. com.google.apps.contacts) of the
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003005 * desired package.
3006 * @return Returns an int array of the assigned gids, or null if there are
3007 * none.
3008 * @throws NameNotFoundException if a package with the given name cannot be
3009 * found on the system.
Dianne Hackborna06de0f2012-12-11 16:34:47 -08003010 */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003011 public abstract int[] getPackageGids(String packageName, @PackageInfoFlags int flags)
Dianne Hackborna06de0f2012-12-11 16:34:47 -08003012 throws NameNotFoundException;
3013
3014 /**
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003015 * Return the UID associated with the given package name.
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06003016 * <p>
3017 * Note that the same package will have different UIDs under different
3018 * {@link UserHandle} on the same device.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003019 *
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003020 * @param packageName The full name (i.e. com.google.apps.contacts) of the
3021 * desired package.
3022 * @return Returns an integer UID who owns the given package name.
3023 * @throws NameNotFoundException if a package with the given name can not be
3024 * found on the system.
3025 */
3026 public abstract int getPackageUid(String packageName, @PackageInfoFlags int flags)
3027 throws NameNotFoundException;
3028
3029 /**
3030 * Return the UID associated with the given package name.
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06003031 * <p>
3032 * Note that the same package will have different UIDs under different
3033 * {@link UserHandle} on the same device.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003034 *
3035 * @param packageName The full name (i.e. com.google.apps.contacts) of the
3036 * desired package.
3037 * @param userId The user handle identifier to look up the package under.
3038 * @return Returns an integer UID who owns the given package name.
3039 * @throws NameNotFoundException if a package with the given name can not be
3040 * found on the system.
3041 * @hide
3042 */
3043 public abstract int getPackageUidAsUser(String packageName, @UserIdInt int userId)
3044 throws NameNotFoundException;
3045
3046 /**
3047 * Return the UID associated with the given package name.
Jeff Sharkeycf3f0a12016-03-17 19:57:58 -06003048 * <p>
3049 * Note that the same package will have different UIDs under different
3050 * {@link UserHandle} on the same device.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003051 *
3052 * @param packageName The full name (i.e. com.google.apps.contacts) of the
3053 * desired package.
3054 * @param userId The user handle identifier to look up the package under.
3055 * @return Returns an integer UID who owns the given package name.
3056 * @throws NameNotFoundException if a package with the given name can not be
3057 * found on the system.
3058 * @hide
3059 */
3060 public abstract int getPackageUidAsUser(String packageName, @PackageInfoFlags int flags,
3061 @UserIdInt int userId) throws NameNotFoundException;
3062
3063 /**
3064 * Retrieve all of the information we know about a particular permission.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003065 *
3066 * @param name The fully qualified name (i.e. com.google.permission.LOGIN)
Jeff Sharkey4347f812017-04-21 12:08:39 -06003067 * of the permission you are interested in.
3068 * @param flags Additional option flags to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003069 * @return Returns a {@link PermissionInfo} containing information about the
3070 * permission.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003071 * @throws NameNotFoundException if a package with the given name cannot be
3072 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003073 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003074 public abstract PermissionInfo getPermissionInfo(String name, @PermissionInfoFlags int flags)
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003075 throws NameNotFoundException;
3076
3077 /**
3078 * Query for all of the permissions associated with a particular group.
3079 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003080 * @param group The fully qualified name (i.e. com.google.permission.LOGIN)
Jeff Sharkey4347f812017-04-21 12:08:39 -06003081 * of the permission group you are interested in. Use null to
3082 * find all of the permissions not associated with a group.
3083 * @param flags Additional option flags to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003084 * @return Returns a list of {@link PermissionInfo} containing information
Jeff Sharkey4347f812017-04-21 12:08:39 -06003085 * about all of the permissions in the given group.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003086 * @throws NameNotFoundException if a package with the given name cannot be
3087 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003088 */
3089 public abstract List<PermissionInfo> queryPermissionsByGroup(String group,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003090 @PermissionInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003091
3092 /**
Paul Navin7b89a7b2017-01-26 23:56:08 +00003093 * Returns true if Permission Review Mode is enabled, false otherwise.
3094 *
3095 * @hide
3096 */
3097 @TestApi
3098 public abstract boolean isPermissionReviewModeEnabled();
3099
3100 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003101 * Retrieve all of the information we know about a particular group of
3102 * permissions.
3103 *
Jeff Sharkey4347f812017-04-21 12:08:39 -06003104 * @param name The fully qualified name (i.e.
3105 * com.google.permission_group.APPS) of the permission you are
3106 * interested in.
3107 * @param flags Additional option flags to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003108 * @return Returns a {@link PermissionGroupInfo} containing information
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003109 * about the permission.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003110 * @throws NameNotFoundException if a package with the given name cannot be
3111 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003112 */
3113 public abstract PermissionGroupInfo getPermissionGroupInfo(String name,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003114 @PermissionGroupInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003115
3116 /**
3117 * Retrieve all of the known permission groups in the system.
3118 *
Jeff Sharkey4347f812017-04-21 12:08:39 -06003119 * @param flags Additional option flags to modify the data returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003120 * @return Returns a list of {@link PermissionGroupInfo} containing
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003121 * information about all of the known permission groups.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003122 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003123 public abstract List<PermissionGroupInfo> getAllPermissionGroups(
3124 @PermissionGroupInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003125
3126 /**
3127 * Retrieve all of the information we know about a particular
3128 * package/application.
3129 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003130 * @param packageName The full name (i.e. com.google.apps.contacts) of an
Jeff Sharkey4347f812017-04-21 12:08:39 -06003131 * application.
3132 * @param flags Additional option flags to modify the data returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003133 * @return An {@link ApplicationInfo} containing information about the
Jeff Sharkey4347f812017-04-21 12:08:39 -06003134 * package. If flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if
3135 * the package is not found in the list of installed applications,
3136 * the application information is retrieved from the list of
3137 * uninstalled applications (which includes installed applications
3138 * as well as applications with data directory i.e. applications
3139 * which had been deleted with {@code DONT_DELETE_DATA} flag set).
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003140 * @throws NameNotFoundException if a package with the given name cannot be
3141 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003142 */
3143 public abstract ApplicationInfo getApplicationInfo(String packageName,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003144 @ApplicationInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003145
Jeff Sharkeycd654482016-01-08 17:42:11 -07003146 /** {@hide} */
3147 public abstract ApplicationInfo getApplicationInfoAsUser(String packageName,
3148 @ApplicationInfoFlags int flags, @UserIdInt int userId) throws NameNotFoundException;
3149
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003150 /**
3151 * Retrieve all of the information we know about a particular activity
3152 * class.
3153 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07003154 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003155 * com.google.apps.contacts/com.google.apps.contacts.
3156 * ContactsList) of an Activity class.
Jeff Sharkey4347f812017-04-21 12:08:39 -06003157 * @param flags Additional option flags to modify the data returned.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003158 * @return An {@link ActivityInfo} containing information about the
3159 * activity.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003160 * @throws NameNotFoundException if a package with the given name cannot be
3161 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003162 */
Dianne Hackborn361199b2010-08-30 17:42:07 -07003163 public abstract ActivityInfo getActivityInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003164 @ComponentInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003165
3166 /**
3167 * Retrieve all of the information we know about a particular receiver
3168 * class.
3169 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07003170 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003171 * com.google.apps.calendar/com.google.apps.calendar.
3172 * CalendarAlarm) of a Receiver class.
Jeff Sharkey4347f812017-04-21 12:08:39 -06003173 * @param flags Additional option flags to modify the data returned.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003174 * @return An {@link ActivityInfo} containing information about the
3175 * receiver.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003176 * @throws NameNotFoundException if a package with the given name cannot be
3177 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003178 */
Dianne Hackborn361199b2010-08-30 17:42:07 -07003179 public abstract ActivityInfo getReceiverInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003180 @ComponentInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003181
3182 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003183 * Retrieve all of the information we know about a particular service class.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003184 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07003185 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003186 * com.google.apps.media/com.google.apps.media.
3187 * BackgroundPlayback) of a Service class.
Jeff Sharkey4347f812017-04-21 12:08:39 -06003188 * @param flags Additional option flags to modify the data returned.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003189 * @return A {@link ServiceInfo} object containing information about the
3190 * service.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003191 * @throws NameNotFoundException if a package with the given name cannot be
3192 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003193 */
Dianne Hackborn361199b2010-08-30 17:42:07 -07003194 public abstract ServiceInfo getServiceInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003195 @ComponentInfoFlags int flags) throws NameNotFoundException;
Dianne Hackborn361199b2010-08-30 17:42:07 -07003196
3197 /**
3198 * Retrieve all of the information we know about a particular content
3199 * provider class.
3200 *
Dianne Hackborn361199b2010-08-30 17:42:07 -07003201 * @param component The full component name (i.e.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003202 * com.google.providers.media/com.google.providers.media.
3203 * MediaProvider) of a ContentProvider class.
Jeff Sharkey4347f812017-04-21 12:08:39 -06003204 * @param flags Additional option flags to modify the data returned.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003205 * @return A {@link ProviderInfo} object containing information about the
3206 * provider.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003207 * @throws NameNotFoundException if a package with the given name cannot be
3208 * found on the system.
Dianne Hackborn361199b2010-08-30 17:42:07 -07003209 */
3210 public abstract ProviderInfo getProviderInfo(ComponentName component,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003211 @ComponentInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003212
3213 /**
Jeff Sharkey4347f812017-04-21 12:08:39 -06003214 * Return a List of all packages that are installed on the device.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003215 *
Jeff Sharkey4347f812017-04-21 12:08:39 -06003216 * @param flags Additional option flags to modify the data returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003217 * @return A List of PackageInfo objects, one for each installed package,
Jeff Sharkey4347f812017-04-21 12:08:39 -06003218 * containing information about the package. In the unlikely case
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003219 * there are no installed packages, an empty list is returned. If
3220 * flag {@code MATCH_UNINSTALLED_PACKAGES} is set, the package
3221 * information is retrieved from the list of uninstalled
3222 * applications (which includes installed applications as well as
3223 * applications with data directory i.e. applications which had been
3224 * deleted with {@code DONT_DELETE_DATA} flag set).
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003225 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003226 public abstract List<PackageInfo> getInstalledPackages(@PackageInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003227
3228 /**
Jeff Sharkey4347f812017-04-21 12:08:39 -06003229 * Return a List of all installed packages that are currently holding any of
3230 * the given permissions.
Dianne Hackborne7991752013-01-16 17:56:46 -08003231 *
Jeff Sharkey4347f812017-04-21 12:08:39 -06003232 * @param flags Additional option flags to modify the data returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003233 * @return A List of PackageInfo objects, one for each installed package
3234 * that holds any of the permissions that were provided, containing
3235 * information about the package. If no installed packages hold any
3236 * of the permissions, an empty list is returned. If flag
Jeff Sharkey4347f812017-04-21 12:08:39 -06003237 * {@code MATCH_UNINSTALLED_PACKAGES} is set, the package
3238 * information is retrieved from the list of uninstalled
3239 * applications (which includes installed applications as well as
3240 * applications with data directory i.e. applications which had been
3241 * deleted with {@code DONT_DELETE_DATA} flag set).
Dianne Hackborne7991752013-01-16 17:56:46 -08003242 */
3243 public abstract List<PackageInfo> getPackagesHoldingPermissions(
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003244 String[] permissions, @PackageInfoFlags int flags);
Dianne Hackborne7991752013-01-16 17:56:46 -08003245
3246 /**
Jeff Sharkey4347f812017-04-21 12:08:39 -06003247 * Return a List of all packages that are installed on the device, for a
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -06003248 * specific user.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003249 *
Jeff Sharkey4347f812017-04-21 12:08:39 -06003250 * @param flags Additional option flags to modify the data returned.
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003251 * @param userId The user for whom the installed packages are to be listed
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003252 * @return A List of PackageInfo objects, one for each installed package,
Jeff Sharkey4347f812017-04-21 12:08:39 -06003253 * containing information about the package. In the unlikely case
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003254 * there are no installed packages, an empty list is returned. If
3255 * flag {@code MATCH_UNINSTALLED_PACKAGES} is set, the package
3256 * information is retrieved from the list of uninstalled
3257 * applications (which includes installed applications as well as
3258 * applications with data directory i.e. applications which had been
3259 * deleted with {@code DONT_DELETE_DATA} flag set).
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003260 * @hide
3261 */
Svet Ganovae0e03a2016-02-25 18:22:10 -08003262 @SystemApi
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -06003263 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07003264 public abstract List<PackageInfo> getInstalledPackagesAsUser(@PackageInfoFlags int flags,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003265 @UserIdInt int userId);
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003266
3267 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003268 * Check whether a particular package has been granted a particular
3269 * permission.
3270 *
Svet Ganovad3b2972015-07-07 22:49:17 -07003271 * @param permName The name of the permission you are checking for.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003272 * @param pkgName The name of the package you are checking against.
3273 *
3274 * @return If the package has the permission, PERMISSION_GRANTED is
3275 * returned. If it does not have the permission, PERMISSION_DENIED
3276 * is returned.
3277 *
3278 * @see #PERMISSION_GRANTED
3279 * @see #PERMISSION_DENIED
3280 */
Tor Norbye1c2bf032015-03-02 10:57:08 -08003281 @CheckResult
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06003282 public abstract @PermissionResult int checkPermission(String permName, String pkgName);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003283
3284 /**
Svet Ganovad3b2972015-07-07 22:49:17 -07003285 * Checks whether a particular permissions has been revoked for a
3286 * package by policy. Typically the device owner or the profile owner
3287 * may apply such a policy. The user cannot grant policy revoked
3288 * permissions, hence the only way for an app to get such a permission
3289 * is by a policy change.
3290 *
3291 * @param permName The name of the permission you are checking for.
3292 * @param pkgName The name of the package you are checking against.
3293 *
3294 * @return Whether the permission is restricted by policy.
3295 */
3296 @CheckResult
Svet Ganovf1b7f202015-07-29 08:33:42 -07003297 public abstract boolean isPermissionRevokedByPolicy(@NonNull String permName,
3298 @NonNull String pkgName);
3299
3300 /**
3301 * Gets the package name of the component controlling runtime permissions.
3302 *
3303 * @return The package name.
3304 *
3305 * @hide
3306 */
3307 public abstract String getPermissionControllerPackageName();
Svet Ganovad3b2972015-07-07 22:49:17 -07003308
3309 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003310 * Add a new dynamic permission to the system. For this to work, your
3311 * package must have defined a permission tree through the
3312 * {@link android.R.styleable#AndroidManifestPermissionTree
3313 * &lt;permission-tree&gt;} tag in its manifest. A package can only add
3314 * permissions to trees that were defined by either its own package or
3315 * another with the same user id; a permission is in a tree if it
3316 * matches the name of the permission tree + ".": for example,
3317 * "com.foo.bar" is a member of the permission tree "com.foo".
3318 *
3319 * <p>It is good to make your permission tree name descriptive, because you
3320 * are taking possession of that entire set of permission names. Thus, it
3321 * must be under a domain you control, with a suffix that will not match
3322 * any normal permissions that may be declared in any applications that
3323 * are part of that domain.
3324 *
3325 * <p>New permissions must be added before
3326 * any .apks are installed that use those permissions. Permissions you
3327 * add through this method are remembered across reboots of the device.
3328 * If the given permission already exists, the info you supply here
3329 * will be used to update it.
3330 *
3331 * @param info Description of the permission to be added.
3332 *
3333 * @return Returns true if a new permission was created, false if an
3334 * existing one was updated.
3335 *
3336 * @throws SecurityException if you are not allowed to add the
3337 * given permission name.
3338 *
3339 * @see #removePermission(String)
3340 */
3341 public abstract boolean addPermission(PermissionInfo info);
3342
3343 /**
Dianne Hackbornd7c09682010-03-30 10:42:20 -07003344 * Like {@link #addPermission(PermissionInfo)} but asynchronously
3345 * persists the package manager state after returning from the call,
3346 * allowing it to return quicker and batch a series of adds at the
3347 * expense of no guarantee the added permission will be retained if
3348 * the device is rebooted before it is written.
3349 */
3350 public abstract boolean addPermissionAsync(PermissionInfo info);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003351
Dianne Hackbornd7c09682010-03-30 10:42:20 -07003352 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003353 * Removes a permission that was previously added with
3354 * {@link #addPermission(PermissionInfo)}. The same ownership rules apply
3355 * -- you are only allowed to remove permissions that you are allowed
3356 * to add.
3357 *
3358 * @param name The name of the permission to remove.
3359 *
3360 * @throws SecurityException if you are not allowed to remove the
3361 * given permission name.
3362 *
3363 * @see #addPermission(PermissionInfo)
3364 */
3365 public abstract void removePermission(String name);
3366
Svet Ganov8c7f7002015-05-07 10:48:44 -07003367 /**
3368 * Permission flags set when granting or revoking a permission.
3369 *
3370 * @hide
3371 */
3372 @SystemApi
Jeff Sharkey4347f812017-04-21 12:08:39 -06003373 @IntDef(prefix = { "FLAG_PERMISSION_" }, value = {
3374 FLAG_PERMISSION_USER_SET,
Svet Ganov8c7f7002015-05-07 10:48:44 -07003375 FLAG_PERMISSION_USER_FIXED,
3376 FLAG_PERMISSION_POLICY_FIXED,
Svet Ganovb3f22b42015-05-12 11:01:24 -07003377 FLAG_PERMISSION_REVOKE_ON_UPGRADE,
Svet Ganov77ab6a82015-07-03 12:03:02 -07003378 FLAG_PERMISSION_SYSTEM_FIXED,
Jeff Sharkey4347f812017-04-21 12:08:39 -06003379 FLAG_PERMISSION_GRANTED_BY_DEFAULT
3380 })
Svet Ganov8c7f7002015-05-07 10:48:44 -07003381 @Retention(RetentionPolicy.SOURCE)
3382 public @interface PermissionFlags {}
3383
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003384 /**
Svetoslavc6d1c342015-02-26 14:44:43 -08003385 * Grant a runtime permission to an application which the application does not
3386 * already have. The permission must have been requested by the application.
3387 * If the application is not allowed to hold the permission, a {@link
Ruben Brunk12ab5e12016-11-10 15:27:30 -08003388 * java.lang.SecurityException} is thrown. If the package or permission is
3389 * invalid, a {@link java.lang.IllegalArgumentException} is thrown.
Svetoslavc6d1c342015-02-26 14:44:43 -08003390 * <p>
3391 * <strong>Note: </strong>Using this API requires holding
Todd Kennedya8eb6a82016-07-28 16:35:42 -07003392 * android.permission.GRANT_RUNTIME_PERMISSIONS and if the user id is
Svetoslavc6d1c342015-02-26 14:44:43 -08003393 * not the current user android.permission.INTERACT_ACROSS_USERS_FULL.
3394 * </p>
Nick Kralevich035f80d2013-03-27 15:20:08 -07003395 *
Svetoslavc6d1c342015-02-26 14:44:43 -08003396 * @param packageName The package to which to grant the permission.
3397 * @param permissionName The permission name to grant.
3398 * @param user The user for which to grant the permission.
3399 *
Svet Ganov8c7f7002015-05-07 10:48:44 -07003400 * @see #revokeRuntimePermission(String, String, android.os.UserHandle)
Svetoslavc6d1c342015-02-26 14:44:43 -08003401 *
3402 * @hide
Nick Kralevich035f80d2013-03-27 15:20:08 -07003403 */
Svetoslavc6d1c342015-02-26 14:44:43 -08003404 @SystemApi
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -06003405 @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS)
Svet Ganov8c7f7002015-05-07 10:48:44 -07003406 public abstract void grantRuntimePermission(@NonNull String packageName,
Svetoslavc6d1c342015-02-26 14:44:43 -08003407 @NonNull String permissionName, @NonNull UserHandle user);
Nick Kralevich035f80d2013-03-27 15:20:08 -07003408
Svetoslavc6d1c342015-02-26 14:44:43 -08003409 /**
3410 * Revoke a runtime permission that was previously granted by {@link
Svet Ganov8c7f7002015-05-07 10:48:44 -07003411 * #grantRuntimePermission(String, String, android.os.UserHandle)}. The
3412 * permission must have been requested by and granted to the application.
3413 * If the application is not allowed to hold the permission, a {@link
Ruben Brunk12ab5e12016-11-10 15:27:30 -08003414 * java.lang.SecurityException} is thrown. If the package or permission is
3415 * invalid, a {@link java.lang.IllegalArgumentException} is thrown.
Svetoslavc6d1c342015-02-26 14:44:43 -08003416 * <p>
3417 * <strong>Note: </strong>Using this API requires holding
Todd Kennedya8eb6a82016-07-28 16:35:42 -07003418 * android.permission.REVOKE_RUNTIME_PERMISSIONS and if the user id is
Svetoslavc6d1c342015-02-26 14:44:43 -08003419 * not the current user android.permission.INTERACT_ACROSS_USERS_FULL.
3420 * </p>
3421 *
3422 * @param packageName The package from which to revoke the permission.
3423 * @param permissionName The permission name to revoke.
3424 * @param user The user for which to revoke the permission.
3425 *
Svet Ganov8c7f7002015-05-07 10:48:44 -07003426 * @see #grantRuntimePermission(String, String, android.os.UserHandle)
Svetoslavc6d1c342015-02-26 14:44:43 -08003427 *
3428 * @hide
3429 */
3430 @SystemApi
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -06003431 @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS)
Svet Ganov8c7f7002015-05-07 10:48:44 -07003432 public abstract void revokeRuntimePermission(@NonNull String packageName,
Svetoslavc6d1c342015-02-26 14:44:43 -08003433 @NonNull String permissionName, @NonNull UserHandle user);
3434
3435 /**
Svet Ganov8c7f7002015-05-07 10:48:44 -07003436 * Gets the state flags associated with a permission.
3437 *
3438 * @param permissionName The permission for which to get the flags.
3439 * @param packageName The package name for which to get the flags.
3440 * @param user The user for which to get permission flags.
3441 * @return The permission flags.
3442 *
3443 * @hide
3444 */
3445 @SystemApi
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -06003446 @RequiresPermission(anyOf = {
3447 android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS,
3448 android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS
3449 })
Svet Ganov8c7f7002015-05-07 10:48:44 -07003450 public abstract @PermissionFlags int getPermissionFlags(String permissionName,
3451 String packageName, @NonNull UserHandle user);
3452
3453 /**
3454 * Updates the flags associated with a permission by replacing the flags in
3455 * the specified mask with the provided flag values.
3456 *
3457 * @param permissionName The permission for which to update the flags.
3458 * @param packageName The package name for which to update the flags.
3459 * @param flagMask The flags which to replace.
3460 * @param flagValues The flags with which to replace.
3461 * @param user The user for which to update the permission flags.
3462 *
3463 * @hide
3464 */
3465 @SystemApi
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -06003466 @RequiresPermission(anyOf = {
3467 android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS,
3468 android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS
3469 })
Svet Ganov8c7f7002015-05-07 10:48:44 -07003470 public abstract void updatePermissionFlags(String permissionName,
Jeff Sharkey4347f812017-04-21 12:08:39 -06003471 String packageName, @PermissionFlags int flagMask, @PermissionFlags int flagValues,
Svet Ganov8c7f7002015-05-07 10:48:44 -07003472 @NonNull UserHandle user);
3473
3474 /**
Svetoslav20770dd2015-05-29 15:43:04 -07003475 * Gets whether you should show UI with rationale for requesting a permission.
3476 * You should do this only if you do not have the permission and the context in
3477 * which the permission is requested does not clearly communicate to the user
3478 * what would be the benefit from grating this permission.
3479 *
3480 * @param permission A permission your app wants to request.
3481 * @return Whether you can show permission rationale UI.
3482 *
3483 * @hide
3484 */
3485 public abstract boolean shouldShowRequestPermissionRationale(String permission);
3486
3487 /**
Svetoslavc6d1c342015-02-26 14:44:43 -08003488 * Returns an {@link android.content.Intent} suitable for passing to
3489 * {@link android.app.Activity#startActivityForResult(android.content.Intent, int)}
3490 * which prompts the user to grant permissions to this application.
3491 *
3492 * @throws NullPointerException if {@code permissions} is {@code null} or empty.
3493 *
3494 * @hide
3495 */
3496 public Intent buildRequestPermissionsIntent(@NonNull String[] permissions) {
3497 if (ArrayUtils.isEmpty(permissions)) {
Svet Ganovf66381c2016-02-18 20:02:36 -08003498 throw new IllegalArgumentException("permission cannot be null or empty");
Svetoslavc6d1c342015-02-26 14:44:43 -08003499 }
3500 Intent intent = new Intent(ACTION_REQUEST_PERMISSIONS);
3501 intent.putExtra(EXTRA_REQUEST_PERMISSIONS_NAMES, permissions);
Svet Ganovf1b7f202015-07-29 08:33:42 -07003502 intent.setPackage(getPermissionControllerPackageName());
Svetoslavc6d1c342015-02-26 14:44:43 -08003503 return intent;
Nick Kralevich035f80d2013-03-27 15:20:08 -07003504 }
3505
3506 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003507 * Compare the signatures of two packages to determine if the same
3508 * signature appears in both of them. If they do contain the same
3509 * signature, then they are allowed special privileges when working
3510 * with each other: they can share the same user-id, run instrumentation
3511 * against each other, etc.
3512 *
3513 * @param pkg1 First package name whose signature will be compared.
3514 * @param pkg2 Second package name whose signature will be compared.
Chris Palmer09f33602010-09-13 14:27:18 -07003515 *
3516 * @return Returns an integer indicating whether all signatures on the
3517 * two packages match. The value is >= 0 ({@link #SIGNATURE_MATCH}) if
3518 * all signatures match or < 0 if there is not a match ({@link
3519 * #SIGNATURE_NO_MATCH} or {@link #SIGNATURE_UNKNOWN_PACKAGE}).
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003520 *
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003521 * @see #checkSignatures(int, int)
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003522 */
Tor Norbye1c2bf032015-03-02 10:57:08 -08003523 @CheckResult
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06003524 public abstract @SignatureResult int checkSignatures(String pkg1, String pkg2);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003525
3526 /**
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003527 * Like {@link #checkSignatures(String, String)}, but takes UIDs of
3528 * the two packages to be checked. This can be useful, for example,
3529 * when doing the check in an IPC, where the UID is the only identity
3530 * available. It is functionally identical to determining the package
3531 * associated with the UIDs and checking their signatures.
3532 *
Joe Onorato25660ec2009-08-12 22:40:37 -07003533 * @param uid1 First UID whose signature will be compared.
3534 * @param uid2 Second UID whose signature will be compared.
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003535 *
Chris Palmer09f33602010-09-13 14:27:18 -07003536 * @return Returns an integer indicating whether all signatures on the
3537 * two packages match. The value is >= 0 ({@link #SIGNATURE_MATCH}) if
3538 * all signatures match or < 0 if there is not a match ({@link
3539 * #SIGNATURE_NO_MATCH} or {@link #SIGNATURE_UNKNOWN_PACKAGE}).
3540 *
3541 * @see #checkSignatures(String, String)
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003542 */
Tor Norbye1c2bf032015-03-02 10:57:08 -08003543 @CheckResult
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06003544 public abstract @SignatureResult int checkSignatures(int uid1, int uid2);
Dianne Hackborn766cbfe2009-08-12 18:33:39 -07003545
3546 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003547 * Retrieve the names of all packages that are associated with a particular
3548 * user id. In most cases, this will be a single package name, the package
3549 * that has been assigned that user id. Where there are multiple packages
3550 * sharing the same user id through the "sharedUserId" mechanism, all
3551 * packages with that id will be returned.
3552 *
3553 * @param uid The user id for which you would like to retrieve the
3554 * associated packages.
3555 *
3556 * @return Returns an array of one or more packages assigned to the user
3557 * id, or null if there are no known packages with the given id.
3558 */
Jeff Sharkey377ded0f2016-01-10 13:15:41 -07003559 public abstract @Nullable String[] getPackagesForUid(int uid);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003560
3561 /**
Michal Karpinskicb67dc92016-12-13 18:20:23 +00003562 * Retrieve the official name associated with a uid. This name is
Jonathan Basseri7ea3a332015-05-12 19:39:22 -07003563 * guaranteed to never change, though it is possible for the underlying
Michal Karpinskicb67dc92016-12-13 18:20:23 +00003564 * uid to be changed. That is, if you are storing information about
3565 * uids in persistent storage, you should use the string returned
3566 * by this function instead of the raw uid.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003567 *
Michal Karpinskicb67dc92016-12-13 18:20:23 +00003568 * @param uid The uid for which you would like to retrieve a name.
3569 * @return Returns a unique name for the given uid, or null if the
3570 * uid is not currently assigned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003571 */
Jeff Sharkey377ded0f2016-01-10 13:15:41 -07003572 public abstract @Nullable String getNameForUid(int uid);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003573
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003574 /**
3575 * Return the user id associated with a shared user name. Multiple
3576 * applications can specify a shared user name in their manifest and thus
3577 * end up using a common uid. This might be used for new applications
3578 * that use an existing shared user name and need to know the uid of the
3579 * shared user.
3580 *
3581 * @param sharedUserName The shared user name whose uid is to be retrieved.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003582 * @return Returns the UID associated with the shared user.
3583 * @throws NameNotFoundException if a package with the given name cannot be
3584 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003585 * @hide
3586 */
3587 public abstract int getUidForSharedUser(String sharedUserName)
3588 throws NameNotFoundException;
3589
3590 /**
3591 * Return a List of all application packages that are installed on the
3592 * device. If flag GET_UNINSTALLED_PACKAGES has been set, a list of all
Jeff Sharkey4347f812017-04-21 12:08:39 -06003593 * applications including those deleted with {@code DONT_DELETE_DATA}
3594 * (partially installed apps with data directory) will be returned.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003595 *
Jeff Sharkey4347f812017-04-21 12:08:39 -06003596 * @param flags Additional option flags to modify the data returned.
3597 * @return A List of ApplicationInfo objects, one for each installed
3598 * application. In the unlikely case there are no installed
3599 * packages, an empty list is returned. If flag
3600 * {@code MATCH_UNINSTALLED_PACKAGES} is set, the application
3601 * information is retrieved from the list of uninstalled
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003602 * applications (which includes installed applications as well as
3603 * applications with data directory i.e. applications which had been
3604 * deleted with {@code DONT_DELETE_DATA} flag set).
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003605 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003606 public abstract List<ApplicationInfo> getInstalledApplications(@ApplicationInfoFlags int flags);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003607
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003608 /**
Jeff Sharkey4347f812017-04-21 12:08:39 -06003609 * Return a List of all application packages that are installed on the
3610 * device, for a specific user. If flag GET_UNINSTALLED_PACKAGES has been
3611 * set, a list of all applications including those deleted with
3612 * {@code DONT_DELETE_DATA} (partially installed apps with data directory)
Bartosz Fabianowski11334242016-11-17 20:49:16 +01003613 * will be returned.
3614 *
Jeff Sharkey4347f812017-04-21 12:08:39 -06003615 * @param flags Additional option flags to modify the data returned.
3616 * @param userId The user for whom the installed applications are to be
3617 * listed
3618 * @return A List of ApplicationInfo objects, one for each installed
3619 * application. In the unlikely case there are no installed
3620 * packages, an empty list is returned. If flag
3621 * {@code MATCH_UNINSTALLED_PACKAGES} is set, the application
3622 * information is retrieved from the list of uninstalled
Bartosz Fabianowski11334242016-11-17 20:49:16 +01003623 * applications (which includes installed applications as well as
3624 * applications with data directory i.e. applications which had been
3625 * deleted with {@code DONT_DELETE_DATA} flag set).
3626 * @hide
Bartosz Fabianowski11334242016-11-17 20:49:16 +01003627 */
3628 public abstract List<ApplicationInfo> getInstalledApplicationsAsUser(
3629 @ApplicationInfoFlags int flags, @UserIdInt int userId);
3630
3631 /**
Jeff Sharkey910e0812017-04-21 16:29:27 -06003632 * Gets the instant applications the user recently used.
Svet Ganov2acf0632015-11-24 19:10:59 -08003633 *
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003634 * @return The instant app list.
Svet Ganov2acf0632015-11-24 19:10:59 -08003635 *
3636 * @hide
3637 */
Todd Kennedy9c9fdf22017-03-06 10:58:27 -08003638 @SystemApi
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003639 @RequiresPermission(Manifest.permission.ACCESS_INSTANT_APPS)
3640 public abstract @NonNull List<InstantAppInfo> getInstantApps();
Svet Ganov2acf0632015-11-24 19:10:59 -08003641
3642 /**
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003643 * Gets the icon for an instant application.
Svet Ganov2acf0632015-11-24 19:10:59 -08003644 *
3645 * @param packageName The app package name.
3646 *
3647 * @hide
3648 */
Todd Kennedy9c9fdf22017-03-06 10:58:27 -08003649 @SystemApi
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003650 @RequiresPermission(Manifest.permission.ACCESS_INSTANT_APPS)
3651 public abstract @Nullable Drawable getInstantAppIcon(String packageName);
Svet Ganov2acf0632015-11-24 19:10:59 -08003652
3653 /**
David Christie31a16552017-03-01 15:08:45 -08003654 * Gets whether this application is an instant app.
Svet Ganov2acf0632015-11-24 19:10:59 -08003655 *
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003656 * @return Whether caller is an instant app.
Svet Ganov2acf0632015-11-24 19:10:59 -08003657 *
David Christie31a16552017-03-01 15:08:45 -08003658 * @see #isInstantApp(String)
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003659 * @see #updateInstantAppCookie(byte[])
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003660 * @see #getInstantAppCookie()
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003661 * @see #getInstantAppCookieMaxBytes()
Svet Ganov2acf0632015-11-24 19:10:59 -08003662 */
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003663 public abstract boolean isInstantApp();
Svet Ganov2acf0632015-11-24 19:10:59 -08003664
3665 /**
David Christie31a16552017-03-01 15:08:45 -08003666 * Gets whether the given package is an instant app.
3667 *
3668 * @param packageName The package to check
3669 * @return Whether the given package is an instant app.
3670 *
3671 * @see #isInstantApp()
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003672 * @see #updateInstantAppCookie(byte[])
David Christie31a16552017-03-01 15:08:45 -08003673 * @see #getInstantAppCookie()
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003674 * @see #getInstantAppCookieMaxBytes()
3675 * @see #clearInstantAppCookie()
David Christie31a16552017-03-01 15:08:45 -08003676 */
3677 public abstract boolean isInstantApp(String packageName);
3678
3679 /**
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003680 * Gets the maximum size in bytes of the cookie data an instant app
Svet Ganov2acf0632015-11-24 19:10:59 -08003681 * can store on the device.
3682 *
3683 * @return The max cookie size in bytes.
3684 *
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003685 * @see #isInstantApp()
David Christie31a16552017-03-01 15:08:45 -08003686 * @see #isInstantApp(String)
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003687 * @see #updateInstantAppCookie(byte[])
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003688 * @see #getInstantAppCookie()
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003689 * @see #clearInstantAppCookie()
3690 */
3691 public abstract int getInstantAppCookieMaxBytes();
3692
3693 /**
3694 * @deprecated
3695 * @hide
Svet Ganov2acf0632015-11-24 19:10:59 -08003696 */
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003697 public abstract int getInstantAppCookieMaxSize();
Svet Ganov2acf0632015-11-24 19:10:59 -08003698
3699 /**
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003700 * Gets the instant application cookie for this app. Non
3701 * instant apps and apps that were instant but were upgraded
3702 * to normal apps can still access this API. For instant apps
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003703 * this cookie is cached for some time after uninstall while for
Svet Ganov2acf0632015-11-24 19:10:59 -08003704 * normal apps the cookie is deleted after the app is uninstalled.
3705 * The cookie is always present while the app is installed.
3706 *
3707 * @return The cookie.
3708 *
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003709 * @see #isInstantApp()
David Christie31a16552017-03-01 15:08:45 -08003710 * @see #isInstantApp(String)
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003711 * @see #updateInstantAppCookie(byte[])
3712 * @see #getInstantAppCookieMaxBytes()
3713 * @see #clearInstantAppCookie()
Svet Ganov2acf0632015-11-24 19:10:59 -08003714 */
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003715 public abstract @NonNull byte[] getInstantAppCookie();
Svet Ganov2acf0632015-11-24 19:10:59 -08003716
3717 /**
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003718 * Clears the instant application cookie for the calling app.
Svet Ganov2acf0632015-11-24 19:10:59 -08003719 *
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003720 * @see #isInstantApp()
David Christie31a16552017-03-01 15:08:45 -08003721 * @see #isInstantApp(String)
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003722 * @see #getInstantAppCookieMaxBytes()
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003723 * @see #getInstantAppCookie()
Svetoslav Ganov345ffa52017-04-18 16:08:41 -07003724 * @see #clearInstantAppCookie()
3725 */
3726 public abstract void clearInstantAppCookie();
3727
3728 /**
3729 * Updates the instant application cookie for the calling app. Non
3730 * instant apps and apps that were instant but were upgraded
3731 * to normal apps can still access this API. For instant apps
3732 * this cookie is cached for some time after uninstall while for
3733 * normal apps the cookie is deleted after the app is uninstalled.
3734 * The cookie is always present while the app is installed. The
3735 * cookie size is limited by {@link #getInstantAppCookieMaxBytes()}.
3736 * Passing <code>null</code> or an empty array clears the cookie.
3737 * </p>
3738 *
3739 * @param cookie The cookie data.
3740 *
3741 * @see #isInstantApp()
3742 * @see #isInstantApp(String)
3743 * @see #getInstantAppCookieMaxBytes()
3744 * @see #getInstantAppCookie()
3745 * @see #clearInstantAppCookie()
3746 *
3747 * @throws IllegalArgumentException if the array exceeds max cookie size.
3748 */
3749 public abstract void updateInstantAppCookie(@Nullable byte[] cookie);
3750
3751 /**
3752 * @removed
3753 * @hide
Svet Ganov2acf0632015-11-24 19:10:59 -08003754 */
Svetoslav Ganov096d3042017-01-30 16:34:13 -08003755 public abstract boolean setInstantAppCookie(@Nullable byte[] cookie);
Svet Ganov2acf0632015-11-24 19:10:59 -08003756
3757 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003758 * Get a list of shared libraries that are available on the
3759 * system.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003760 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003761 * @return An array of shared library names that are
3762 * available on the system, or null if none are installed.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003763 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003764 */
3765 public abstract String[] getSystemSharedLibraryNames();
3766
3767 /**
Svet Ganov67882122016-12-11 16:36:34 -08003768 * Get a list of shared libraries on the device.
3769 *
3770 * @param flags To filter the libraries to return.
3771 * @return The shared library list.
3772 *
Svet Ganov67882122016-12-11 16:36:34 -08003773 * @see #MATCH_UNINSTALLED_PACKAGES
3774 */
3775 public abstract @NonNull List<SharedLibraryInfo> getSharedLibraries(
3776 @InstallFlags int flags);
3777
3778 /**
3779 * Get a list of shared libraries on the device.
3780 *
3781 * @param flags To filter the libraries to return.
3782 * @param userId The user to query for.
3783 * @return The shared library list.
3784 *
3785 * @see #MATCH_FACTORY_ONLY
3786 * @see #MATCH_KNOWN_PACKAGES
3787 * @see #MATCH_ANY_USER
3788 * @see #MATCH_UNINSTALLED_PACKAGES
3789 *
3790 * @hide
3791 */
3792 public abstract @NonNull List<SharedLibraryInfo> getSharedLibrariesAsUser(
3793 @InstallFlags int flags, @UserIdInt int userId);
3794
3795 /**
Svet Ganovd7b1f4112016-02-09 18:49:23 -08003796 * Get the name of the package hosting the services shared library.
3797 *
3798 * @return The library host package.
3799 *
3800 * @hide
3801 */
Svetoslav Ganova9c25002016-04-13 19:25:56 -07003802 public abstract @NonNull String getServicesSystemSharedLibraryPackageName();
3803
3804 /**
3805 * Get the name of the package hosting the shared components shared library.
3806 *
3807 * @return The library host package.
3808 *
3809 * @hide
3810 */
3811 public abstract @NonNull String getSharedSystemSharedLibraryPackageName();
Svet Ganovd7b1f4112016-02-09 18:49:23 -08003812
3813 /**
Todd Kennedy9106c642017-02-08 14:16:53 -08003814 * Returns the names of the packages that have been changed
3815 * [eg. added, removed or updated] since the given sequence
3816 * number.
3817 * <p>If no packages have been changed, returns <code>null</code>.
3818 * <p>The sequence number starts at <code>0</code> and is
3819 * reset every boot.
Todd Kennedy8fddf9d2017-04-17 15:16:12 -07003820 * @param sequenceNumber The first sequence number for which to retrieve package changes.
3821 * @see Settings.Global#BOOT_COUNT
Todd Kennedy9106c642017-02-08 14:16:53 -08003822 */
3823 public abstract @Nullable ChangedPackages getChangedPackages(
3824 @IntRange(from=0) int sequenceNumber);
3825
3826 /**
Dianne Hackborn49237342009-08-27 20:08:01 -07003827 * Get a list of features that are available on the
3828 * system.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003829 *
Dianne Hackborn49237342009-08-27 20:08:01 -07003830 * @return An array of FeatureInfo classes describing the features
3831 * that are available on the system, or null if there are none(!!).
Dianne Hackborn49237342009-08-27 20:08:01 -07003832 */
3833 public abstract FeatureInfo[] getSystemAvailableFeatures();
3834
3835 /**
Jeff Sharkey115d2c12016-02-15 17:25:57 -07003836 * Check whether the given feature name is one of the available features as
3837 * returned by {@link #getSystemAvailableFeatures()}. This tests for the
3838 * presence of <em>any</em> version of the given feature name; use
3839 * {@link #hasSystemFeature(String, int)} to check for a minimum version.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003840 *
Jeff Sharkey115d2c12016-02-15 17:25:57 -07003841 * @return Returns true if the devices supports the feature, else false.
Dianne Hackborn039c68e2009-09-26 16:39:23 -07003842 */
3843 public abstract boolean hasSystemFeature(String name);
3844
3845 /**
Jeff Sharkey115d2c12016-02-15 17:25:57 -07003846 * Check whether the given feature name and version is one of the available
3847 * features as returned by {@link #getSystemAvailableFeatures()}. Since
3848 * features are defined to always be backwards compatible, this returns true
3849 * if the available feature version is greater than or equal to the
3850 * requested version.
3851 *
3852 * @return Returns true if the devices supports the feature, else false.
3853 */
3854 public abstract boolean hasSystemFeature(String name, int version);
3855
3856 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003857 * Determine the best action to perform for a given Intent. This is how
3858 * {@link Intent#resolveActivity} finds an activity if a class has not been
3859 * explicitly specified.
3860 * <p>
3861 * <em>Note:</em> if using an implicit Intent (without an explicit
3862 * ComponentName specified), be sure to consider whether to set the
3863 * {@link #MATCH_DEFAULT_ONLY} only flag. You need to do so to resolve the
3864 * activity in the same way that
3865 * {@link android.content.Context#startActivity(Intent)} and
Dianne Hackborn4d023d212010-10-01 13:41:04 -07003866 * {@link android.content.Intent#resolveActivity(PackageManager)
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003867 * Intent.resolveActivity(PackageManager)} do.
3868 * </p>
Amith Yamasani4b2e9342011-03-31 12:38:53 -07003869 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003870 * @param intent An intent containing all of the desired specification
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003871 * (action, data, type, category, and/or component).
Jeff Sharkey4347f812017-04-21 12:08:39 -06003872 * @param flags Additional option flags to modify the data returned. The
3873 * most important is {@link #MATCH_DEFAULT_ONLY}, to limit the
3874 * resolution to only those activities that support the
3875 * {@link android.content.Intent#CATEGORY_DEFAULT}.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003876 * @return Returns a ResolveInfo object containing the final activity intent
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003877 * that was determined to be the best action. Returns null if no
Mike LeBeaubd3f5272010-02-18 19:27:17 -08003878 * matching activity was found. If multiple matching activities are
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003879 * found and there is no default set, returns a ResolveInfo object
Mike LeBeaubd3f5272010-02-18 19:27:17 -08003880 * containing something else, such as the activity resolver.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003881 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003882 public abstract ResolveInfo resolveActivity(Intent intent, @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003883
3884 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003885 * Determine the best action to perform for a given Intent for a given user.
3886 * This is how {@link Intent#resolveActivity} finds an activity if a class
3887 * has not been explicitly specified.
3888 * <p>
3889 * <em>Note:</em> if using an implicit Intent (without an explicit
3890 * ComponentName specified), be sure to consider whether to set the
3891 * {@link #MATCH_DEFAULT_ONLY} only flag. You need to do so to resolve the
3892 * activity in the same way that
3893 * {@link android.content.Context#startActivity(Intent)} and
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003894 * {@link android.content.Intent#resolveActivity(PackageManager)
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003895 * Intent.resolveActivity(PackageManager)} do.
3896 * </p>
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003897 *
3898 * @param intent An intent containing all of the desired specification
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003899 * (action, data, type, category, and/or component).
Jeff Sharkey4347f812017-04-21 12:08:39 -06003900 * @param flags Additional option flags to modify the data returned. The
3901 * most important is {@link #MATCH_DEFAULT_ONLY}, to limit the
3902 * resolution to only those activities that support the
3903 * {@link android.content.Intent#CATEGORY_DEFAULT}.
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003904 * @param userId The user id.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003905 * @return Returns a ResolveInfo object containing the final activity intent
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003906 * that was determined to be the best action. Returns null if no
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003907 * matching activity was found. If multiple matching activities are
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08003908 * found and there is no default set, returns a ResolveInfo object
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003909 * containing something else, such as the activity resolver.
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003910 * @hide
3911 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003912 public abstract ResolveInfo resolveActivityAsUser(Intent intent, @ResolveInfoFlags int flags,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003913 @UserIdInt int userId);
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003914
3915 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003916 * Retrieve all activities that can be performed for the given intent.
3917 *
3918 * @param intent The desired intent as per resolveActivity().
Jeff Sharkey4347f812017-04-21 12:08:39 -06003919 * @param flags Additional option flags to modify the data returned. The
3920 * most important is {@link #MATCH_DEFAULT_ONLY}, to limit the
3921 * resolution to only those activities that support the
3922 * {@link android.content.Intent#CATEGORY_DEFAULT}. Or, set
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003923 * {@link #MATCH_ALL} to prevent any filtering of the results.
3924 * @return Returns a List of ResolveInfo objects containing one entry for
3925 * each matching activity, ordered from best to worst. In other
3926 * words, the first item is what would be returned by
3927 * {@link #resolveActivity}. If there are no matching activities, an
3928 * empty list is returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003929 */
3930 public abstract List<ResolveInfo> queryIntentActivities(Intent intent,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003931 @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003932
3933 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003934 * Retrieve all activities that can be performed for the given intent, for a
3935 * specific user.
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003936 *
3937 * @param intent The desired intent as per resolveActivity().
Jeff Sharkey4347f812017-04-21 12:08:39 -06003938 * @param flags Additional option flags to modify the data returned. The
3939 * most important is {@link #MATCH_DEFAULT_ONLY}, to limit the
3940 * resolution to only those activities that support the
3941 * {@link android.content.Intent#CATEGORY_DEFAULT}. Or, set
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003942 * {@link #MATCH_ALL} to prevent any filtering of the results.
3943 * @return Returns a List of ResolveInfo objects containing one entry for
3944 * each matching activity, ordered from best to worst. In other
3945 * words, the first item is what would be returned by
3946 * {@link #resolveActivity}. If there are no matching activities, an
3947 * empty list is returned.
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003948 * @hide
3949 */
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07003950 public abstract List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07003951 @ResolveInfoFlags int flags, @UserIdInt int userId);
Amith Yamasani151ec4c2012-09-07 19:25:16 -07003952
3953 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003954 * Retrieve a set of activities that should be presented to the user as
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003955 * similar options. This is like {@link #queryIntentActivities}, except it
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003956 * also allows you to supply a list of more explicit Intents that you would
3957 * like to resolve to particular options, and takes care of returning the
3958 * final ResolveInfo list in a reasonable order, with no duplicates, based
3959 * on those inputs.
3960 *
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003961 * @param caller The class name of the activity that is making the request.
3962 * This activity will never appear in the output list. Can be
3963 * null.
3964 * @param specifics An array of Intents that should be resolved to the first
3965 * specific results. Can be null.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003966 * @param intent The desired intent as per resolveActivity().
Jeff Sharkey4347f812017-04-21 12:08:39 -06003967 * @param flags Additional option flags to modify the data returned. The
3968 * most important is {@link #MATCH_DEFAULT_ONLY}, to limit the
3969 * resolution to only those activities that support the
3970 * {@link android.content.Intent#CATEGORY_DEFAULT}.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003971 * @return Returns a List of ResolveInfo objects containing one entry for
3972 * each matching activity. The list is ordered first by all of the
3973 * intents resolved in <var>specifics</var> and then any additional
3974 * activities that can handle <var>intent</var> but did not get
3975 * included by one of the <var>specifics</var> intents. If there are
3976 * no matching activities, an empty list is returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003977 */
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06003978 public abstract List<ResolveInfo> queryIntentActivityOptions(@Nullable ComponentName caller,
3979 @Nullable Intent[] specifics, Intent intent, @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003980
3981 /**
3982 * Retrieve all receivers that can handle a broadcast of the given intent.
3983 *
3984 * @param intent The desired intent as per resolveActivity().
Jeff Sharkey4347f812017-04-21 12:08:39 -06003985 * @param flags Additional option flags to modify the data returned.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003986 * @return Returns a List of ResolveInfo objects containing one entry for
3987 * each matching receiver, ordered from best to worst. If there are
3988 * no matching receivers, an empty list or null is returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003989 */
3990 public abstract List<ResolveInfo> queryBroadcastReceivers(Intent intent,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07003991 @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003992
3993 /**
Jeff Sharkey8a372a02016-03-16 16:25:45 -06003994 * Retrieve all receivers that can handle a broadcast of the given intent,
3995 * for a specific user.
Amith Yamasanif203aee2012-08-29 18:41:53 -07003996 *
3997 * @param intent The desired intent as per resolveActivity().
Jeff Sharkey4347f812017-04-21 12:08:39 -06003998 * @param flags Additional option flags to modify the data returned.
Fyodor Kupolov940e8572016-01-26 12:03:51 -08003999 * @param userHandle UserHandle of the user being queried.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004000 * @return Returns a List of ResolveInfo objects containing one entry for
4001 * each matching receiver, ordered from best to worst. If there are
4002 * no matching receivers, an empty list or null is returned.
Amith Yamasanif203aee2012-08-29 18:41:53 -07004003 * @hide
4004 */
Fyodor Kupolov940e8572016-01-26 12:03:51 -08004005 @SystemApi
4006 public List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent,
4007 @ResolveInfoFlags int flags, UserHandle userHandle) {
4008 return queryBroadcastReceiversAsUser(intent, flags, userHandle.getIdentifier());
4009 }
4010
4011 /**
4012 * @hide
4013 */
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07004014 public abstract List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004015 @ResolveInfoFlags int flags, @UserIdInt int userId);
Amith Yamasanif203aee2012-08-29 18:41:53 -07004016
Fyodor Kupolov940e8572016-01-26 12:03:51 -08004017
Jeff Sharkeybd940222016-01-08 11:07:13 -07004018 /** {@hide} */
4019 @Deprecated
4020 public List<ResolveInfo> queryBroadcastReceivers(Intent intent,
4021 @ResolveInfoFlags int flags, @UserIdInt int userId) {
Jeff Sharkey6f4b2a32017-03-21 14:13:41 -06004022 final String msg = "Shame on you for calling the hidden API "
4023 + "queryBroadcastReceivers(). Shame!";
4024 if (VMRuntime.getRuntime().getTargetSdkVersion() >= Build.VERSION_CODES.O) {
4025 throw new UnsupportedOperationException(msg);
4026 } else {
4027 Log.d(TAG, msg);
4028 return queryBroadcastReceiversAsUser(intent, flags, userId);
4029 }
Jeff Sharkeybd940222016-01-08 11:07:13 -07004030 }
4031
Amith Yamasanif203aee2012-08-29 18:41:53 -07004032 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004033 * Determine the best service to handle for a given Intent.
4034 *
4035 * @param intent An intent containing all of the desired specification
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004036 * (action, data, type, category, and/or component).
Jeff Sharkey4347f812017-04-21 12:08:39 -06004037 * @param flags Additional option flags to modify the data returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004038 * @return Returns a ResolveInfo object containing the final service intent
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004039 * that was determined to be the best action. Returns null if no
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004040 * matching service was found.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004041 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004042 public abstract ResolveInfo resolveService(Intent intent, @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004043
4044 /**
4045 * Retrieve all services that can match the given intent.
4046 *
4047 * @param intent The desired intent as per resolveService().
Jeff Sharkey4347f812017-04-21 12:08:39 -06004048 * @param flags Additional option flags to modify the data returned.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004049 * @return Returns a List of ResolveInfo objects containing one entry for
4050 * each matching service, ordered from best to worst. In other
4051 * words, the first item is what would be returned by
4052 * {@link #resolveService}. If there are no matching services, an
4053 * empty list or null is returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004054 */
4055 public abstract List<ResolveInfo> queryIntentServices(Intent intent,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004056 @ResolveInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004057
4058 /**
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004059 * Retrieve all services that can match the given intent for a given user.
4060 *
4061 * @param intent The desired intent as per resolveService().
Jeff Sharkey4347f812017-04-21 12:08:39 -06004062 * @param flags Additional option flags to modify the data returned.
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004063 * @param userId The user id.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004064 * @return Returns a List of ResolveInfo objects containing one entry for
4065 * each matching service, ordered from best to worst. In other
4066 * words, the first item is what would be returned by
4067 * {@link #resolveService}. If there are no matching services, an
4068 * empty list or null is returned.
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004069 * @hide
4070 */
4071 public abstract List<ResolveInfo> queryIntentServicesAsUser(Intent intent,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004072 @ResolveInfoFlags int flags, @UserIdInt int userId);
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004073
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004074 /**
4075 * Retrieve all providers that can match the given intent.
4076 *
4077 * @param intent An intent containing all of the desired specification
4078 * (action, data, type, category, and/or component).
Jeff Sharkey4347f812017-04-21 12:08:39 -06004079 * @param flags Additional option flags to modify the data returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004080 * @param userId The user id.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004081 * @return Returns a List of ResolveInfo objects containing one entry for
4082 * each matching provider, ordered from best to worst. If there are
4083 * no matching services, an empty list or null is returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004084 * @hide
4085 */
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004086 public abstract List<ResolveInfo> queryIntentContentProvidersAsUser(
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004087 Intent intent, @ResolveInfoFlags int flags, @UserIdInt int userId);
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004088
4089 /**
4090 * Retrieve all providers that can match the given intent.
4091 *
4092 * @param intent An intent containing all of the desired specification
4093 * (action, data, type, category, and/or component).
Jeff Sharkey4347f812017-04-21 12:08:39 -06004094 * @param flags Additional option flags to modify the data returned.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004095 * @return Returns a List of ResolveInfo objects containing one entry for
4096 * each matching provider, ordered from best to worst. If there are
4097 * no matching services, an empty list or null is returned.
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004098 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004099 public abstract List<ResolveInfo> queryIntentContentProviders(Intent intent,
4100 @ResolveInfoFlags int flags);
Jeff Sharkey85f5f812013-10-07 10:16:12 -07004101
Svetoslav Ganov58d37b52012-09-18 12:04:19 -07004102 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004103 * Find a single content provider by its base path name.
4104 *
4105 * @param name The name of the provider to find.
Jeff Sharkey4347f812017-04-21 12:08:39 -06004106 * @param flags Additional option flags to modify the data returned.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004107 * @return A {@link ProviderInfo} object containing information about the
4108 * provider. If a provider was not found, returns null.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004109 */
4110 public abstract ProviderInfo resolveContentProvider(String name,
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004111 @ComponentInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004112
4113 /**
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004114 * Find a single content provider by its base path name.
4115 *
4116 * @param name The name of the provider to find.
Jeff Sharkey4347f812017-04-21 12:08:39 -06004117 * @param flags Additional option flags to modify the data returned.
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004118 * @param userId The user id.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004119 * @return A {@link ProviderInfo} object containing information about the
4120 * provider. If a provider was not found, returns null.
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004121 * @hide
4122 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004123 public abstract ProviderInfo resolveContentProviderAsUser(String name,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004124 @ComponentInfoFlags int flags, @UserIdInt int userId);
Alexandra Gherghina0363c3e2014-06-23 13:34:59 +01004125
4126 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004127 * Retrieve content provider information.
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004128 * <p>
4129 * <em>Note: unlike most other methods, an empty result set is indicated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004130 * by a null return instead of an empty list.</em>
4131 *
4132 * @param processName If non-null, limits the returned providers to only
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004133 * those that are hosted by the given process. If null, all
4134 * content providers are returned.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004135 * @param uid If <var>processName</var> is non-null, this is the required
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004136 * uid owning the requested content providers.
Jeff Sharkey4347f812017-04-21 12:08:39 -06004137 * @param flags Additional option flags to modify the data returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004138 * @return A list of {@link ProviderInfo} objects containing one entry for
4139 * each provider either matching <var>processName</var> or, if
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004140 * <var>processName</var> is null, all known content providers.
4141 * <em>If there are no matching providers, null is returned.</em>
4142 */
4143 public abstract List<ProviderInfo> queryContentProviders(
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004144 String processName, int uid, @ComponentInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004145
4146 /**
Makoto Onuki32757292017-02-22 14:36:59 -08004147 * Same as {@link #queryContentProviders}, except when {@code metaDataKey} is not null,
4148 * it only returns providers which have metadata with the {@code metaDataKey} key.
4149 *
4150 * <p>DO NOT USE the {@code metaDataKey} parameter, unless you're the contacts provider.
4151 * You really shouldn't need it. Other apps should use {@link #queryIntentContentProviders}
4152 * instead.
4153 *
4154 * <p>The {@code metaDataKey} parameter was added to allow the contacts provider to quickly
4155 * scan the GAL providers on the device. Unfortunately the discovery protocol used metadata
4156 * to mark GAL providers, rather than intent filters, so we can't use
4157 * {@link #queryIntentContentProviders} for that.
4158 *
4159 * @hide
4160 */
4161 public List<ProviderInfo> queryContentProviders(
4162 String processName, int uid, @ComponentInfoFlags int flags, String metaDataKey) {
4163 // Provide the default implementation for mocks.
4164 return queryContentProviders(processName, uid, flags);
4165 }
4166
4167 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004168 * Retrieve all of the information we know about a particular
4169 * instrumentation class.
4170 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004171 * @param className The full name (i.e.
Jeff Sharkey4347f812017-04-21 12:08:39 -06004172 * com.google.apps.contacts.InstrumentList) of an Instrumentation
4173 * class.
4174 * @param flags Additional option flags to modify the data returned.
4175 * @return An {@link InstrumentationInfo} object containing information
4176 * about the instrumentation.
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004177 * @throws NameNotFoundException if a package with the given name cannot be
4178 * found on the system.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004179 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004180 public abstract InstrumentationInfo getInstrumentationInfo(ComponentName className,
4181 @InstrumentationInfoFlags int flags) throws NameNotFoundException;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004182
4183 /**
Jeff Sharkey4347f812017-04-21 12:08:39 -06004184 * Retrieve information about available instrumentation code. May be used to
4185 * retrieve either all instrumentation code, or only the code targeting a
4186 * particular package.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004187 *
4188 * @param targetPackage If null, all instrumentation is returned; only the
Jeff Sharkey4347f812017-04-21 12:08:39 -06004189 * instrumentation targeting this package name is returned.
4190 * @param flags Additional option flags to modify the data returned.
Todd Kennedy6b9bfa12016-01-08 13:44:51 -08004191 * @return A list of {@link InstrumentationInfo} objects containing one
4192 * entry for each matching instrumentation. If there are no
Jesse Hallf77a34f2016-02-04 18:41:33 -08004193 * instrumentation available, returns an empty list.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004194 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004195 public abstract List<InstrumentationInfo> queryInstrumentation(String targetPackage,
4196 @InstrumentationInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004197
4198 /**
4199 * Retrieve an image from a package. This is a low-level API used by
4200 * the various package manager info structures (such as
4201 * {@link ComponentInfo} to implement retrieval of their associated
4202 * icon.
4203 *
4204 * @param packageName The name of the package that this icon is coming from.
kmccormick30498b42013-03-27 17:39:17 -07004205 * Cannot be null.
4206 * @param resid The resource identifier of the desired image. Cannot be 0.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004207 * @param appInfo Overall information about <var>packageName</var>. This
4208 * may be null, in which case the application information will be retrieved
4209 * for you if needed; if you already have this information around, it can
4210 * be much more efficient to supply it here.
4211 *
4212 * @return Returns a Drawable holding the requested image. Returns null if
4213 * an image could not be found for any reason.
4214 */
Tor Norbye7b9c9122013-05-30 16:48:33 -07004215 public abstract Drawable getDrawable(String packageName, @DrawableRes int resid,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004216 ApplicationInfo appInfo);
4217
4218 /**
4219 * Retrieve the icon associated with an activity. Given the full name of
4220 * an activity, retrieves the information about it and calls
4221 * {@link ComponentInfo#loadIcon ComponentInfo.loadIcon()} to return its icon.
kmccormick30498b42013-03-27 17:39:17 -07004222 * If the activity cannot be found, NameNotFoundException is thrown.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004223 *
4224 * @param activityName Name of the activity whose icon is to be retrieved.
4225 *
4226 * @return Returns the image of the icon, or the default activity icon if
4227 * it could not be found. Does not return null.
4228 * @throws NameNotFoundException Thrown if the resources for the given
4229 * activity could not be loaded.
4230 *
4231 * @see #getActivityIcon(Intent)
4232 */
4233 public abstract Drawable getActivityIcon(ComponentName activityName)
4234 throws NameNotFoundException;
4235
4236 /**
4237 * Retrieve the icon associated with an Intent. If intent.getClassName() is
4238 * set, this simply returns the result of
4239 * getActivityIcon(intent.getClassName()). Otherwise it resolves the intent's
4240 * component and returns the icon associated with the resolved component.
kmccormick30498b42013-03-27 17:39:17 -07004241 * If intent.getClassName() cannot be found or the Intent cannot be resolved
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004242 * to a component, NameNotFoundException is thrown.
4243 *
4244 * @param intent The intent for which you would like to retrieve an icon.
4245 *
4246 * @return Returns the image of the icon, or the default activity icon if
4247 * it could not be found. Does not return null.
4248 * @throws NameNotFoundException Thrown if the resources for application
4249 * matching the given intent could not be loaded.
4250 *
4251 * @see #getActivityIcon(ComponentName)
4252 */
4253 public abstract Drawable getActivityIcon(Intent intent)
4254 throws NameNotFoundException;
4255
4256 /**
Jose Limaf78e3122014-03-06 12:13:15 -08004257 * Retrieve the banner associated with an activity. Given the full name of
4258 * an activity, retrieves the information about it and calls
4259 * {@link ComponentInfo#loadIcon ComponentInfo.loadIcon()} to return its
4260 * banner. If the activity cannot be found, NameNotFoundException is thrown.
4261 *
4262 * @param activityName Name of the activity whose banner is to be retrieved.
4263 * @return Returns the image of the banner, or null if the activity has no
4264 * banner specified.
4265 * @throws NameNotFoundException Thrown if the resources for the given
4266 * activity could not be loaded.
4267 * @see #getActivityBanner(Intent)
4268 */
4269 public abstract Drawable getActivityBanner(ComponentName activityName)
4270 throws NameNotFoundException;
4271
4272 /**
4273 * Retrieve the banner associated with an Intent. If intent.getClassName()
4274 * is set, this simply returns the result of
4275 * getActivityBanner(intent.getClassName()). Otherwise it resolves the
4276 * intent's component and returns the banner associated with the resolved
4277 * component. If intent.getClassName() cannot be found or the Intent cannot
4278 * be resolved to a component, NameNotFoundException is thrown.
4279 *
4280 * @param intent The intent for which you would like to retrieve a banner.
4281 * @return Returns the image of the banner, or null if the activity has no
4282 * banner specified.
4283 * @throws NameNotFoundException Thrown if the resources for application
4284 * matching the given intent could not be loaded.
4285 * @see #getActivityBanner(ComponentName)
4286 */
4287 public abstract Drawable getActivityBanner(Intent intent)
4288 throws NameNotFoundException;
4289
4290 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004291 * Return the generic icon for an activity that is used when no specific
4292 * icon is defined.
Adam Connors23cc04e2014-04-01 12:12:20 +01004293 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004294 * @return Drawable Image of the icon.
4295 */
4296 public abstract Drawable getDefaultActivityIcon();
4297
4298 /**
4299 * Retrieve the icon associated with an application. If it has not defined
4300 * an icon, the default app icon is returned. Does not return null.
4301 *
4302 * @param info Information about application being queried.
4303 *
4304 * @return Returns the image of the icon, or the default application icon
4305 * if it could not be found.
4306 *
4307 * @see #getApplicationIcon(String)
4308 */
4309 public abstract Drawable getApplicationIcon(ApplicationInfo info);
4310
4311 /**
4312 * Retrieve the icon associated with an application. Given the name of the
4313 * application's package, retrieves the information about it and calls
kmccormick30498b42013-03-27 17:39:17 -07004314 * getApplicationIcon() to return its icon. If the application cannot be
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004315 * found, NameNotFoundException is thrown.
4316 *
4317 * @param packageName Name of the package whose application icon is to be
4318 * retrieved.
4319 *
4320 * @return Returns the image of the icon, or the default application icon
4321 * if it could not be found. Does not return null.
4322 * @throws NameNotFoundException Thrown if the resources for the given
4323 * application could not be loaded.
4324 *
4325 * @see #getApplicationIcon(ApplicationInfo)
4326 */
4327 public abstract Drawable getApplicationIcon(String packageName)
4328 throws NameNotFoundException;
4329
4330 /**
Jose Limaf78e3122014-03-06 12:13:15 -08004331 * Retrieve the banner associated with an application.
4332 *
4333 * @param info Information about application being queried.
4334 * @return Returns the image of the banner or null if the application has no
4335 * banner specified.
4336 * @see #getApplicationBanner(String)
4337 */
4338 public abstract Drawable getApplicationBanner(ApplicationInfo info);
4339
4340 /**
4341 * Retrieve the banner associated with an application. Given the name of the
4342 * application's package, retrieves the information about it and calls
4343 * getApplicationIcon() to return its banner. If the application cannot be
4344 * found, NameNotFoundException is thrown.
4345 *
4346 * @param packageName Name of the package whose application banner is to be
4347 * retrieved.
4348 * @return Returns the image of the banner or null if the application has no
4349 * banner specified.
4350 * @throws NameNotFoundException Thrown if the resources for the given
4351 * application could not be loaded.
4352 * @see #getApplicationBanner(ApplicationInfo)
4353 */
4354 public abstract Drawable getApplicationBanner(String packageName)
4355 throws NameNotFoundException;
4356
4357 /**
4358 * Retrieve the logo associated with an activity. Given the full name of an
4359 * activity, retrieves the information about it and calls
4360 * {@link ComponentInfo#loadLogo ComponentInfo.loadLogo()} to return its
4361 * logo. If the activity cannot be found, NameNotFoundException is thrown.
Adam Powell81cd2e92010-04-21 16:35:18 -07004362 *
4363 * @param activityName Name of the activity whose logo is to be retrieved.
Jose Limaf78e3122014-03-06 12:13:15 -08004364 * @return Returns the image of the logo or null if the activity has no logo
4365 * specified.
Adam Powell81cd2e92010-04-21 16:35:18 -07004366 * @throws NameNotFoundException Thrown if the resources for the given
Jose Limaf78e3122014-03-06 12:13:15 -08004367 * activity could not be loaded.
Adam Powell81cd2e92010-04-21 16:35:18 -07004368 * @see #getActivityLogo(Intent)
4369 */
4370 public abstract Drawable getActivityLogo(ComponentName activityName)
4371 throws NameNotFoundException;
4372
4373 /**
4374 * Retrieve the logo associated with an Intent. If intent.getClassName() is
4375 * set, this simply returns the result of
4376 * getActivityLogo(intent.getClassName()). Otherwise it resolves the intent's
4377 * component and returns the logo associated with the resolved component.
kmccormick30498b42013-03-27 17:39:17 -07004378 * If intent.getClassName() cannot be found or the Intent cannot be resolved
Adam Powell81cd2e92010-04-21 16:35:18 -07004379 * to a component, NameNotFoundException is thrown.
4380 *
4381 * @param intent The intent for which you would like to retrieve a logo.
4382 *
4383 * @return Returns the image of the logo, or null if the activity has no
4384 * logo specified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07004385 *
Adam Powell81cd2e92010-04-21 16:35:18 -07004386 * @throws NameNotFoundException Thrown if the resources for application
4387 * matching the given intent could not be loaded.
4388 *
4389 * @see #getActivityLogo(ComponentName)
4390 */
4391 public abstract Drawable getActivityLogo(Intent intent)
4392 throws NameNotFoundException;
4393
4394 /**
4395 * Retrieve the logo associated with an application. If it has not specified
4396 * a logo, this method returns null.
4397 *
4398 * @param info Information about application being queried.
4399 *
4400 * @return Returns the image of the logo, or null if no logo is specified
4401 * by the application.
4402 *
4403 * @see #getApplicationLogo(String)
4404 */
4405 public abstract Drawable getApplicationLogo(ApplicationInfo info);
4406
4407 /**
4408 * Retrieve the logo associated with an application. Given the name of the
4409 * application's package, retrieves the information about it and calls
kmccormick30498b42013-03-27 17:39:17 -07004410 * getApplicationLogo() to return its logo. If the application cannot be
Adam Powell81cd2e92010-04-21 16:35:18 -07004411 * found, NameNotFoundException is thrown.
4412 *
4413 * @param packageName Name of the package whose application logo is to be
4414 * retrieved.
4415 *
4416 * @return Returns the image of the logo, or null if no application logo
4417 * has been specified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07004418 *
Adam Powell81cd2e92010-04-21 16:35:18 -07004419 * @throws NameNotFoundException Thrown if the resources for the given
4420 * application could not be loaded.
4421 *
4422 * @see #getApplicationLogo(ApplicationInfo)
4423 */
4424 public abstract Drawable getApplicationLogo(String packageName)
4425 throws NameNotFoundException;
4426
4427 /**
Tony Mak4dc008c2016-03-16 10:46:49 +00004428 * If the target user is a managed profile, then this returns a badged copy of the given icon
4429 * to be able to distinguish it from the original icon. For badging an arbitrary drawable use
Kenny Guydf77d712015-05-29 17:02:22 +01004430 * {@link #getUserBadgedDrawableForDensity(
Svetoslavc7d62f02014-09-04 15:39:54 -07004431 * android.graphics.drawable.Drawable, UserHandle, android.graphics.Rect, int)}.
4432 * <p>
4433 * If the original drawable is a BitmapDrawable and the backing bitmap is
4434 * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging
4435 * is performed in place and the original drawable is returned.
4436 * </p>
4437 *
4438 * @param icon The icon to badge.
4439 * @param user The target user.
4440 * @return A drawable that combines the original icon and a badge as
4441 * determined by the system.
4442 */
4443 public abstract Drawable getUserBadgedIcon(Drawable icon, UserHandle user);
4444
4445 /**
4446 * If the target user is a managed profile of the calling user or the caller
4447 * is itself a managed profile, then this returns a badged copy of the given
4448 * drawable allowing the user to distinguish it from the original drawable.
4449 * The caller can specify the location in the bounds of the drawable to be
4450 * badged where the badge should be applied as well as the density of the
4451 * badge to be used.
4452 * <p>
4453 * If the original drawable is a BitmapDrawable and the backing bitmap is
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004454 * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging
Svetoslavc7d62f02014-09-04 15:39:54 -07004455 * is performed in place and the original drawable is returned.
4456 * </p>
4457 *
4458 * @param drawable The drawable to badge.
4459 * @param user The target user.
4460 * @param badgeLocation Where in the bounds of the badged drawable to place
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004461 * the badge. If it's {@code null}, the badge is applied on top of the entire
Svetoslavc7d62f02014-09-04 15:39:54 -07004462 * drawable being badged.
4463 * @param badgeDensity The optional desired density for the badge as per
Vadim Tryshev66ae66a2016-02-18 15:41:21 -08004464 * {@link android.util.DisplayMetrics#densityDpi}. If it's not positive,
Svetoslavc7d62f02014-09-04 15:39:54 -07004465 * the density of the display is used.
4466 * @return A drawable that combines the original drawable and a badge as
4467 * determined by the system.
4468 */
4469 public abstract Drawable getUserBadgedDrawableForDensity(Drawable drawable,
4470 UserHandle user, Rect badgeLocation, int badgeDensity);
4471
4472 /**
4473 * If the target user is a managed profile of the calling user or the caller
4474 * is itself a managed profile, then this returns a drawable to use as a small
4475 * icon to include in a view to distinguish it from the original icon.
4476 *
4477 * @param user The target user.
4478 * @param density The optional desired density for the badge as per
4479 * {@link android.util.DisplayMetrics#densityDpi}. If not provided
4480 * the density of the current display is used.
4481 * @return the drawable or null if no drawable is required.
4482 * @hide
4483 */
4484 public abstract Drawable getUserBadgeForDensity(UserHandle user, int density);
4485
4486 /**
4487 * If the target user is a managed profile of the calling user or the caller
Selim Cineke6ff9462016-01-15 15:07:06 -08004488 * is itself a managed profile, then this returns a drawable to use as a small
4489 * icon to include in a view to distinguish it from the original icon. This version
4490 * doesn't have background protection and should be used over a light background instead of
4491 * a badge.
4492 *
4493 * @param user The target user.
4494 * @param density The optional desired density for the badge as per
4495 * {@link android.util.DisplayMetrics#densityDpi}. If not provided
4496 * the density of the current display is used.
4497 * @return the drawable or null if no drawable is required.
4498 * @hide
4499 */
4500 public abstract Drawable getUserBadgeForDensityNoBackground(UserHandle user, int density);
4501
4502 /**
4503 * If the target user is a managed profile of the calling user or the caller
Svetoslavc7d62f02014-09-04 15:39:54 -07004504 * is itself a managed profile, then this returns a copy of the label with
4505 * badging for accessibility services like talkback. E.g. passing in "Email"
4506 * and it might return "Work Email" for Email in the work profile.
4507 *
4508 * @param label The label to change.
4509 * @param user The target user.
4510 * @return A label that combines the original label and a badge as
4511 * determined by the system.
4512 */
4513 public abstract CharSequence getUserBadgedLabel(CharSequence label, UserHandle user);
4514
4515 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004516 * Retrieve text from a package. This is a low-level API used by
4517 * the various package manager info structures (such as
4518 * {@link ComponentInfo} to implement retrieval of their associated
4519 * labels and other text.
4520 *
4521 * @param packageName The name of the package that this text is coming from.
kmccormick30498b42013-03-27 17:39:17 -07004522 * Cannot be null.
4523 * @param resid The resource identifier of the desired text. Cannot be 0.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004524 * @param appInfo Overall information about <var>packageName</var>. This
4525 * may be null, in which case the application information will be retrieved
4526 * for you if needed; if you already have this information around, it can
4527 * be much more efficient to supply it here.
4528 *
4529 * @return Returns a CharSequence holding the requested text. Returns null
4530 * if the text could not be found for any reason.
4531 */
Tor Norbye7b9c9122013-05-30 16:48:33 -07004532 public abstract CharSequence getText(String packageName, @StringRes int resid,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004533 ApplicationInfo appInfo);
4534
4535 /**
4536 * Retrieve an XML file from a package. This is a low-level API used to
4537 * retrieve XML meta data.
4538 *
4539 * @param packageName The name of the package that this xml is coming from.
kmccormick30498b42013-03-27 17:39:17 -07004540 * Cannot be null.
4541 * @param resid The resource identifier of the desired xml. Cannot be 0.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004542 * @param appInfo Overall information about <var>packageName</var>. This
4543 * may be null, in which case the application information will be retrieved
4544 * for you if needed; if you already have this information around, it can
4545 * be much more efficient to supply it here.
4546 *
4547 * @return Returns an XmlPullParser allowing you to parse out the XML
4548 * data. Returns null if the xml resource could not be found for any
4549 * reason.
4550 */
Tor Norbye7b9c9122013-05-30 16:48:33 -07004551 public abstract XmlResourceParser getXml(String packageName, @XmlRes int resid,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004552 ApplicationInfo appInfo);
4553
4554 /**
4555 * Return the label to use for this application.
4556 *
4557 * @return Returns the label associated with this application, or null if
4558 * it could not be found for any reason.
kmccormick30498b42013-03-27 17:39:17 -07004559 * @param info The application to get the label of.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004560 */
4561 public abstract CharSequence getApplicationLabel(ApplicationInfo info);
4562
4563 /**
4564 * Retrieve the resources associated with an activity. Given the full
4565 * name of an activity, retrieves the information about it and calls
4566 * getResources() to return its application's resources. If the activity
kmccormick30498b42013-03-27 17:39:17 -07004567 * cannot be found, NameNotFoundException is thrown.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004568 *
4569 * @param activityName Name of the activity whose resources are to be
4570 * retrieved.
4571 *
4572 * @return Returns the application's Resources.
4573 * @throws NameNotFoundException Thrown if the resources for the given
4574 * application could not be loaded.
4575 *
4576 * @see #getResourcesForApplication(ApplicationInfo)
4577 */
4578 public abstract Resources getResourcesForActivity(ComponentName activityName)
4579 throws NameNotFoundException;
4580
4581 /**
4582 * Retrieve the resources for an application. Throws NameNotFoundException
4583 * if the package is no longer installed.
4584 *
4585 * @param app Information about the desired application.
4586 *
4587 * @return Returns the application's Resources.
4588 * @throws NameNotFoundException Thrown if the resources for the given
4589 * application could not be loaded (most likely because it was uninstalled).
4590 */
4591 public abstract Resources getResourcesForApplication(ApplicationInfo app)
4592 throws NameNotFoundException;
4593
4594 /**
4595 * Retrieve the resources associated with an application. Given the full
4596 * package name of an application, retrieves the information about it and
4597 * calls getResources() to return its application's resources. If the
kmccormick30498b42013-03-27 17:39:17 -07004598 * appPackageName cannot be found, NameNotFoundException is thrown.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004599 *
4600 * @param appPackageName Package name of the application whose resources
4601 * are to be retrieved.
4602 *
4603 * @return Returns the application's Resources.
4604 * @throws NameNotFoundException Thrown if the resources for the given
4605 * application could not be loaded.
4606 *
4607 * @see #getResourcesForApplication(ApplicationInfo)
4608 */
4609 public abstract Resources getResourcesForApplication(String appPackageName)
4610 throws NameNotFoundException;
4611
Amith Yamasani98edc952012-09-25 14:09:27 -07004612 /** @hide */
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004613 public abstract Resources getResourcesForApplicationAsUser(String appPackageName,
4614 @UserIdInt int userId) throws NameNotFoundException;
Amith Yamasani98edc952012-09-25 14:09:27 -07004615
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004616 /**
Jeff Sharkey4347f812017-04-21 12:08:39 -06004617 * Retrieve overall information about an application package defined in a
4618 * package archive file
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004619 *
4620 * @param archiveFilePath The path to the archive file
Jeff Sharkey4347f812017-04-21 12:08:39 -06004621 * @param flags Additional option flags to modify the data returned.
4622 * @return A PackageInfo object containing information about the package
4623 * archive. If the package could not be parsed, returns null.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004624 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07004625 public PackageInfo getPackageArchiveInfo(String archiveFilePath, @PackageInfoFlags int flags) {
Jeff Sharkey275e0852014-06-17 18:18:49 -07004626 final PackageParser parser = new PackageParser();
Dianne Hackborncd154e92017-02-28 17:37:35 -08004627 parser.setCallback(new PackageParser.CallbackImpl(this));
Jeff Sharkey275e0852014-06-17 18:18:49 -07004628 final File apkFile = new File(archiveFilePath);
Jeff Sharkeyc4858a22014-06-16 10:51:20 -07004629 try {
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004630 if ((flags & (MATCH_DIRECT_BOOT_UNAWARE | MATCH_DIRECT_BOOT_AWARE)) != 0) {
Jeff Sharkeyc3132512016-01-12 14:06:58 -07004631 // Caller expressed an explicit opinion about what encryption
4632 // aware/unaware components they want to see, so fall through and
4633 // give them what they want
4634 } else {
4635 // Caller expressed no opinion, so match everything
Jeff Sharkey8a372a02016-03-16 16:25:45 -06004636 flags |= MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE;
Jeff Sharkeyc3132512016-01-12 14:06:58 -07004637 }
4638
Jeff Sharkey275e0852014-06-17 18:18:49 -07004639 PackageParser.Package pkg = parser.parseMonolithicPackage(apkFile, 0);
Jeff Sharkeyc4858a22014-06-16 10:51:20 -07004640 if ((flags & GET_SIGNATURES) != 0) {
Svet Ganov354cd3c2015-12-17 11:35:04 -08004641 PackageParser.collectCertificates(pkg, 0);
Jeff Sharkeyc4858a22014-06-16 10:51:20 -07004642 }
4643 PackageUserState state = new PackageUserState();
4644 return PackageParser.generatePackageInfo(pkg, null, flags, 0, 0, null, state);
4645 } catch (PackageParserException e) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004646 return null;
4647 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004648 }
4649
4650 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004651 * @deprecated replaced by {@link PackageInstaller}
4652 * @hide
Jacek Surazski65e13172009-04-28 15:26:38 +02004653 */
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004654 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004655 public abstract void installPackage(
Todd Kennedya6793232016-02-24 22:46:00 +00004656 Uri packageURI,
4657 IPackageInstallObserver observer,
4658 @InstallFlags int flags,
Jacek Surazski65e13172009-04-28 15:26:38 +02004659 String installerPackageName);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004660 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004661 * @deprecated replaced by {@link PackageInstaller}
Christopher Tateab8a5012014-03-24 16:25:51 -07004662 * @hide
Christopher Tateab8a5012014-03-24 16:25:51 -07004663 */
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004664 @Deprecated
Todd Kennedya6793232016-02-24 22:46:00 +00004665 public abstract void installPackage(
4666 Uri packageURI,
4667 PackageInstallObserver observer,
4668 @InstallFlags int flags,
4669 String installerPackageName);
Christopher Tateab8a5012014-03-24 16:25:51 -07004670
rich cannings706e8ba2012-08-20 13:20:14 -07004671 /**
Dianne Hackborn7767eac2012-08-23 18:25:40 -07004672 * If there is already an application with the given package name installed
4673 * on the system for other users, also install it for the calling user.
4674 * @hide
4675 */
Nicolas Prevot9a80e532015-09-23 15:49:28 +01004676 public abstract int installExistingPackage(String packageName) throws NameNotFoundException;
4677
4678 /**
4679 * If there is already an application with the given package name installed
Sunny Goyala31a74b2017-05-11 15:59:19 -07004680 * on the system for other users, also install it for the calling user.
4681 * @hide
4682 */
4683 public abstract int installExistingPackage(String packageName, @InstallReason int installReason)
4684 throws NameNotFoundException;
4685
4686 /**
4687 * If there is already an application with the given package name installed
Nicolas Prevot9a80e532015-09-23 15:49:28 +01004688 * on the system for other users, also install it for the specified user.
4689 * @hide
4690 */
4691 @RequiresPermission(anyOf = {
4692 Manifest.permission.INSTALL_PACKAGES,
4693 Manifest.permission.INTERACT_ACROSS_USERS_FULL})
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004694 public abstract int installExistingPackageAsUser(String packageName, @UserIdInt int userId)
Dianne Hackborn7767eac2012-08-23 18:25:40 -07004695 throws NameNotFoundException;
4696
4697 /**
Kenny Root5ab21572011-07-27 11:11:19 -07004698 * Allows a package listening to the
4699 * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification
Kenny Root3a9b5fb2011-09-20 14:15:38 -07004700 * broadcast} to respond to the package manager. The response must include
4701 * the {@code verificationCode} which is one of
4702 * {@link PackageManager#VERIFICATION_ALLOW} or
4703 * {@link PackageManager#VERIFICATION_REJECT}.
Kenny Root5ab21572011-07-27 11:11:19 -07004704 *
4705 * @param id pending package identifier as passed via the
kmccormick30498b42013-03-27 17:39:17 -07004706 * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra.
Kenny Root3a9b5fb2011-09-20 14:15:38 -07004707 * @param verificationCode either {@link PackageManager#VERIFICATION_ALLOW}
4708 * or {@link PackageManager#VERIFICATION_REJECT}.
rich cannings7e671512012-08-27 14:44:16 -07004709 * @throws SecurityException if the caller does not have the
Dianne Hackborn8832c182012-09-17 17:20:24 -07004710 * PACKAGE_VERIFICATION_AGENT permission.
Kenny Root5ab21572011-07-27 11:11:19 -07004711 */
Kenny Root3a9b5fb2011-09-20 14:15:38 -07004712 public abstract void verifyPendingInstall(int id, int verificationCode);
Kenny Root5ab21572011-07-27 11:11:19 -07004713
4714 /**
rich canningsd9ef3e52012-08-22 14:28:05 -07004715 * Allows a package listening to the
4716 * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification
4717 * broadcast} to extend the default timeout for a response and declare what
4718 * action to perform after the timeout occurs. The response must include
4719 * the {@code verificationCodeAtTimeout} which is one of
4720 * {@link PackageManager#VERIFICATION_ALLOW} or
4721 * {@link PackageManager#VERIFICATION_REJECT}.
4722 *
4723 * This method may only be called once per package id. Additional calls
4724 * will have no effect.
4725 *
4726 * @param id pending package identifier as passed via the
kmccormick30498b42013-03-27 17:39:17 -07004727 * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra.
rich canningsd9ef3e52012-08-22 14:28:05 -07004728 * @param verificationCodeAtTimeout either
4729 * {@link PackageManager#VERIFICATION_ALLOW} or
rich canningsd1b5cfc2012-08-29 14:49:51 -07004730 * {@link PackageManager#VERIFICATION_REJECT}. If
4731 * {@code verificationCodeAtTimeout} is neither
4732 * {@link PackageManager#VERIFICATION_ALLOW} or
4733 * {@link PackageManager#VERIFICATION_REJECT}, then
4734 * {@code verificationCodeAtTimeout} will default to
rich canningsd9ef3e52012-08-22 14:28:05 -07004735 * {@link PackageManager#VERIFICATION_REJECT}.
4736 * @param millisecondsToDelay the amount of time requested for the timeout.
4737 * Must be positive and less than
rich canningsd1b5cfc2012-08-29 14:49:51 -07004738 * {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}. If
4739 * {@code millisecondsToDelay} is out of bounds,
4740 * {@code millisecondsToDelay} will be set to the closest in
4741 * bounds value; namely, 0 or
rich canningsd9ef3e52012-08-22 14:28:05 -07004742 * {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}.
rich cannings7e671512012-08-27 14:44:16 -07004743 * @throws SecurityException if the caller does not have the
Dianne Hackborn8832c182012-09-17 17:20:24 -07004744 * PACKAGE_VERIFICATION_AGENT permission.
rich canningsd9ef3e52012-08-22 14:28:05 -07004745 */
4746 public abstract void extendVerificationTimeout(int id,
4747 int verificationCodeAtTimeout, long millisecondsToDelay);
4748
4749 /**
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004750 * Allows a package listening to the
Todd Kennedydfa93ab2016-03-03 15:24:33 -08004751 * {@link Intent#ACTION_INTENT_FILTER_NEEDS_VERIFICATION} intent filter verification
4752 * broadcast to respond to the package manager. The response must include
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004753 * the {@code verificationCode} which is one of
4754 * {@link PackageManager#INTENT_FILTER_VERIFICATION_SUCCESS} or
4755 * {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}.
4756 *
4757 * @param verificationId pending package identifier as passed via the
4758 * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra.
4759 * @param verificationCode either {@link PackageManager#INTENT_FILTER_VERIFICATION_SUCCESS}
4760 * or {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}.
Todd Kennedydfa93ab2016-03-03 15:24:33 -08004761 * @param failedDomains a list of failed domains if the verificationCode is
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004762 * {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}, otherwise null;
4763 * @throws SecurityException if the caller does not have the
4764 * INTENT_FILTER_VERIFICATION_AGENT permission.
4765 *
4766 * @hide
4767 */
Fabrice Di Meglioef741da2015-05-12 16:31:38 -07004768 @SystemApi
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -06004769 @RequiresPermission(android.Manifest.permission.INTENT_FILTER_VERIFICATION_AGENT)
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004770 public abstract void verifyIntentFilter(int verificationId, int verificationCode,
Todd Kennedydfa93ab2016-03-03 15:24:33 -08004771 List<String> failedDomains);
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004772
4773 /**
4774 * Get the status of a Domain Verification Result for an IntentFilter. This is
4775 * related to the {@link android.content.IntentFilter#setAutoVerify(boolean)} and
4776 * {@link android.content.IntentFilter#getAutoVerify()}
4777 *
4778 * This is used by the ResolverActivity to change the status depending on what the User select
4779 * in the Disambiguation Dialog and also used by the Settings App for changing the default App
4780 * for a domain.
4781 *
4782 * @param packageName The package name of the Activity associated with the IntentFilter.
4783 * @param userId The user id.
4784 *
4785 * @return The status to set to. This can be
4786 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK} or
4787 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS} or
4788 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER} or
4789 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED}
4790 *
4791 * @hide
4792 */
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08004793 @SystemApi
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004794 public abstract int getIntentVerificationStatusAsUser(String packageName, @UserIdInt int userId);
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004795
4796 /**
4797 * Allow to change the status of a Intent Verification status for all IntentFilter of an App.
4798 * This is related to the {@link android.content.IntentFilter#setAutoVerify(boolean)} and
4799 * {@link android.content.IntentFilter#getAutoVerify()}
4800 *
4801 * This is used by the ResolverActivity to change the status depending on what the User select
4802 * in the Disambiguation Dialog and also used by the Settings App for changing the default App
4803 * for a domain.
4804 *
4805 * @param packageName The package name of the Activity associated with the IntentFilter.
4806 * @param status The status to set to. This can be
4807 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK} or
4808 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS} or
4809 * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER}
4810 * @param userId The user id.
4811 *
4812 * @return true if the status has been set. False otherwise.
4813 *
4814 * @hide
4815 */
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08004816 @SystemApi
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -06004817 @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS)
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07004818 public abstract boolean updateIntentVerificationStatusAsUser(String packageName, int status,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004819 @UserIdInt int userId);
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004820
4821 /**
4822 * Get the list of IntentFilterVerificationInfo for a specific package and User.
4823 *
4824 * @param packageName the package name. When this parameter is set to a non null value,
4825 * the results will be filtered by the package name provided.
4826 * Otherwise, there will be no filtering and it will return a list
Fabrice Di Meglio07885952015-04-06 19:41:28 -07004827 * corresponding for all packages
4828 *
4829 * @return a list of IntentFilterVerificationInfo for a specific package.
4830 *
4831 * @hide
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004832 */
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08004833 @SystemApi
Fabrice Di Meglio1c1b4712014-11-19 17:12:32 -08004834 public abstract List<IntentFilterVerificationInfo> getIntentFilterVerifications(
4835 String packageName);
4836
4837 /**
Fabrice Di Meglio07885952015-04-06 19:41:28 -07004838 * Get the list of IntentFilter for a specific package.
4839 *
4840 * @param packageName the package name. This parameter is set to a non null value,
4841 * the list will contain all the IntentFilter for that package.
4842 * Otherwise, the list will be empty.
4843 *
4844 * @return a list of IntentFilter for a specific package.
4845 *
4846 * @hide
4847 */
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08004848 @SystemApi
Fabrice Di Meglio07885952015-04-06 19:41:28 -07004849 public abstract List<IntentFilter> getAllIntentFilters(String packageName);
4850
4851 /**
Fabrice Di Meglio62271722015-04-10 17:24:02 -07004852 * Get the default Browser package name for a specific user.
4853 *
4854 * @param userId The user id.
4855 *
4856 * @return the package name of the default Browser for the specified user. If the user id passed
4857 * is -1 (all users) it will return a null value.
4858 *
4859 * @hide
4860 */
Jeff Sharkeya73b8fd2016-01-06 17:02:08 -07004861 @TestApi
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08004862 @SystemApi
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004863 public abstract String getDefaultBrowserPackageNameAsUser(@UserIdInt int userId);
Fabrice Di Meglio62271722015-04-10 17:24:02 -07004864
4865 /**
4866 * Set the default Browser package name for a specific user.
4867 *
4868 * @param packageName The package name of the default Browser.
4869 * @param userId The user id.
4870 *
4871 * @return true if the default Browser for the specified user has been set,
4872 * otherwise return false. If the user id passed is -1 (all users) this call will not
4873 * do anything and just return false.
4874 *
4875 * @hide
4876 */
Jeff Schumacher6fd90ed2017-01-20 13:58:34 -08004877 @SystemApi
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -06004878 @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS)
Jeff Sharkey8588bc12016-01-06 16:47:42 -07004879 public abstract boolean setDefaultBrowserPackageNameAsUser(String packageName,
4880 @UserIdInt int userId);
Fabrice Di Meglio62271722015-04-10 17:24:02 -07004881
4882 /**
Dianne Hackborn880119b2010-11-18 22:26:40 -08004883 * Change the installer associated with a given package. There are limitations
4884 * on how the installer package can be changed; in particular:
4885 * <ul>
4886 * <li> A SecurityException will be thrown if <var>installerPackageName</var>
4887 * is not signed with the same certificate as the calling application.
4888 * <li> A SecurityException will be thrown if <var>targetPackage</var> already
4889 * has an installer package, and that installer package is not signed with
4890 * the same certificate as the calling application.
4891 * </ul>
4892 *
4893 * @param targetPackage The installed package whose installer will be changed.
4894 * @param installerPackageName The package name of the new installer. May be
4895 * null to clear the association.
4896 */
4897 public abstract void setInstallerPackageName(String targetPackage,
4898 String installerPackageName);
4899
Todd Kennedyab532892017-03-08 14:19:49 -08004900 /** @hide */
4901 @SystemApi
4902 @RequiresPermission(Manifest.permission.INSTALL_PACKAGES)
4903 public abstract void setUpdateAvailable(String packageName, boolean updateAvaialble);
4904
Dianne Hackborn880119b2010-11-18 22:26:40 -08004905 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004906 * Attempts to delete a package. Since this may take a little while, the
4907 * result will be posted back to the given observer. A deletion will fail if
4908 * the calling context lacks the
4909 * {@link android.Manifest.permission#DELETE_PACKAGES} permission, if the
4910 * named package cannot be found, or if the named package is a system
4911 * package.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004912 *
4913 * @param packageName The name of the package to delete
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004914 * @param observer An observer callback to get notified when the package
4915 * deletion is complete.
4916 * {@link android.content.pm.IPackageDeleteObserver#packageDeleted}
4917 * will be called when that happens. observer may be null to
4918 * indicate that no callback is desired.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004919 * @hide
4920 */
Svet Ganov67882122016-12-11 16:36:34 -08004921 @RequiresPermission(Manifest.permission.DELETE_PACKAGES)
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004922 public abstract void deletePackage(String packageName, IPackageDeleteObserver observer,
4923 @DeleteFlags int flags);
Jacek Surazski65e13172009-04-28 15:26:38 +02004924
4925 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004926 * Attempts to delete a package. Since this may take a little while, the
4927 * result will be posted back to the given observer. A deletion will fail if
4928 * the named package cannot be found, or if the named package is a system
4929 * package.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01004930 *
4931 * @param packageName The name of the package to delete
Jeff Sharkey5aa86932016-01-08 19:07:49 -07004932 * @param observer An observer callback to get notified when the package
4933 * deletion is complete.
4934 * {@link android.content.pm.IPackageDeleteObserver#packageDeleted}
4935 * will be called when that happens. observer may be null to
4936 * indicate that no callback is desired.
Nicolas Prevot9a80e532015-09-23 15:49:28 +01004937 * @param userId The user Id
Nicolas Prevot9a80e532015-09-23 15:49:28 +01004938 * @hide
4939 */
Svet Ganov67882122016-12-11 16:36:34 -08004940 @RequiresPermission(anyOf = {
Nicolas Prevot9a80e532015-09-23 15:49:28 +01004941 Manifest.permission.DELETE_PACKAGES,
4942 Manifest.permission.INTERACT_ACROSS_USERS_FULL})
Svet Ganov67882122016-12-11 16:36:34 -08004943 public abstract void deletePackageAsUser(@NonNull String packageName,
4944 IPackageDeleteObserver observer, @DeleteFlags int flags, @UserIdInt int userId);
Nicolas Prevot9a80e532015-09-23 15:49:28 +01004945
4946 /**
Jacek Surazski65e13172009-04-28 15:26:38 +02004947 * Retrieve the package name of the application that installed a package. This identifies
4948 * which market the package came from.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07004949 *
Jacek Surazski65e13172009-04-28 15:26:38 +02004950 * @param packageName The name of the package to query
4951 */
4952 public abstract String getInstallerPackageName(String packageName);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07004953
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08004954 /**
4955 * Attempts to clear the user data directory of an application.
4956 * Since this may take a little while, the result will
4957 * be posted back to the given observer. A deletion will fail if the
4958 * named package cannot be found, or if the named package is a "system package".
4959 *
4960 * @param packageName The name of the package
4961 * @param observer An observer callback to get notified when the operation is finished
4962 * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
4963 * will be called when that happens. observer may be null to indicate that
4964 * no callback is desired.
4965 *
4966 * @hide
4967 */
4968 public abstract void clearApplicationUserData(String packageName,
4969 IPackageDataObserver observer);
4970 /**
4971 * Attempts to delete the cache files associated with an application.
4972 * Since this may take a little while, the result will
4973 * be posted back to the given observer. A deletion will fail if the calling context
4974 * lacks the {@link android.Manifest.permission#DELETE_CACHE_FILES} permission, if the
4975 * named package cannot be found, or if the named package is a "system package".
4976 *
4977 * @param packageName The name of the package to delete
4978 * @param observer An observer callback to get notified when the cache file deletion
4979 * is complete.
4980 * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
4981 * will be called when that happens. observer may be null to indicate that
4982 * no callback is desired.
4983 *
4984 * @hide
4985 */
4986 public abstract void deleteApplicationCacheFiles(String packageName,
4987 IPackageDataObserver observer);
4988
4989 /**
Suprabh Shukla78c9eb82016-04-12 15:51:35 -07004990 * Attempts to delete the cache files associated with an application for a given user. Since
4991 * this may take a little while, the result will be posted back to the given observer. A
4992 * deletion will fail if the calling context lacks the
4993 * {@link android.Manifest.permission#DELETE_CACHE_FILES} permission, if the named package
4994 * cannot be found, or if the named package is a "system package". If {@code userId} does not
4995 * belong to the calling user, the caller must have
4996 * {@link android.Manifest.permission#INTERACT_ACROSS_USERS} permission.
4997 *
4998 * @param packageName The name of the package to delete
4999 * @param userId the user for which the cache files needs to be deleted
5000 * @param observer An observer callback to get notified when the cache file deletion is
5001 * complete.
5002 * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
5003 * will be called when that happens. observer may be null to indicate that no
5004 * callback is desired.
5005 * @hide
5006 */
5007 public abstract void deleteApplicationCacheFilesAsUser(String packageName, int userId,
5008 IPackageDataObserver observer);
5009
5010 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005011 * Free storage by deleting LRU sorted list of cache files across
5012 * all applications. If the currently available free storage
5013 * on the device is greater than or equal to the requested
5014 * free storage, no cache files are cleared. If the currently
5015 * available storage on the device is less than the requested
5016 * free storage, some or all of the cache files across
5017 * all applications are deleted (based on last accessed time)
5018 * to increase the free storage space on the device to
5019 * the requested value. There is no guarantee that clearing all
5020 * the cache files from all applications will clear up
5021 * enough storage to achieve the desired value.
5022 * @param freeStorageSize The number of bytes of storage to be
5023 * freed by the system. Say if freeStorageSize is XX,
5024 * and the current free storage is YY,
5025 * if XX is less than YY, just return. if not free XX-YY number
5026 * of bytes if possible.
5027 * @param observer call back used to notify when
5028 * the operation is completed
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005029 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005030 * @hide
5031 */
Jeff Sharkey529f91f2015-04-18 20:23:13 -07005032 public void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer) {
5033 freeStorageAndNotify(null, freeStorageSize, observer);
5034 }
5035
5036 /** {@hide} */
5037 public abstract void freeStorageAndNotify(String volumeUuid, long freeStorageSize,
5038 IPackageDataObserver observer);
Suchi Amalapurapu1ccac752009-06-12 10:09:58 -07005039
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005040 /**
5041 * Free storage by deleting LRU sorted list of cache files across
5042 * all applications. If the currently available free storage
5043 * on the device is greater than or equal to the requested
5044 * free storage, no cache files are cleared. If the currently
5045 * available storage on the device is less than the requested
5046 * free storage, some or all of the cache files across
5047 * all applications are deleted (based on last accessed time)
5048 * to increase the free storage space on the device to
5049 * the requested value. There is no guarantee that clearing all
5050 * the cache files from all applications will clear up
5051 * enough storage to achieve the desired value.
5052 * @param freeStorageSize The number of bytes of storage to be
5053 * freed by the system. Say if freeStorageSize is XX,
5054 * and the current free storage is YY,
5055 * if XX is less than YY, just return. if not free XX-YY number
5056 * of bytes if possible.
Suchi Amalapurapu1ccac752009-06-12 10:09:58 -07005057 * @param pi IntentSender call back used to
5058 * notify when the operation is completed.May be null
5059 * to indicate that no call back is desired.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005060 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005061 * @hide
5062 */
Jeff Sharkey529f91f2015-04-18 20:23:13 -07005063 public void freeStorage(long freeStorageSize, IntentSender pi) {
5064 freeStorage(null, freeStorageSize, pi);
5065 }
5066
5067 /** {@hide} */
5068 public abstract void freeStorage(String volumeUuid, long freeStorageSize, IntentSender pi);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005069
5070 /**
5071 * Retrieve the size information for a package.
5072 * Since this may take a little while, the result will
5073 * be posted back to the given observer. The calling context
5074 * should have the {@link android.Manifest.permission#GET_PACKAGE_SIZE} permission.
5075 *
5076 * @param packageName The name of the package whose size information is to be retrieved
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005077 * @param userId The user whose size information should be retrieved.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005078 * @param observer An observer callback to get notified when the operation
5079 * is complete.
5080 * {@link android.content.pm.IPackageStatsObserver#onGetStatsCompleted(PackageStats, boolean)}
5081 * The observer's callback is invoked with a PackageStats object(containing the
5082 * code, data and cache sizes of the package) and a boolean value representing
5083 * the status of the operation. observer may be null to indicate that
5084 * no callback is desired.
5085 *
Jeff Sharkey60f95aa2017-03-08 13:57:15 -07005086 * @deprecated use {@link StorageStatsManager} instead.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005087 * @hide
5088 */
Jeff Sharkey60f95aa2017-03-08 13:57:15 -07005089 @Deprecated
Jeff Sharkey8588bc12016-01-06 16:47:42 -07005090 public abstract void getPackageSizeInfoAsUser(String packageName, @UserIdInt int userId,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005091 IPackageStatsObserver observer);
5092
5093 /**
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005094 * Like {@link #getPackageSizeInfoAsUser(String, int, IPackageStatsObserver)}, but
Dianne Hackborn0c380492012-08-20 17:23:30 -07005095 * returns the size for the calling user.
5096 *
Jeff Sharkey60f95aa2017-03-08 13:57:15 -07005097 * @deprecated use {@link StorageStatsManager} instead.
Dianne Hackborn0c380492012-08-20 17:23:30 -07005098 * @hide
5099 */
Jeff Sharkey60f95aa2017-03-08 13:57:15 -07005100 @Deprecated
Dianne Hackborn0c380492012-08-20 17:23:30 -07005101 public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) {
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005102 getPackageSizeInfoAsUser(packageName, UserHandle.myUserId(), observer);
Dianne Hackborn0c380492012-08-20 17:23:30 -07005103 }
5104
5105 /**
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005106 * @deprecated This function no longer does anything; it was an old
kmccormickac66b852013-03-28 15:17:15 -07005107 * approach to managing preferred activities, which has been superseded
5108 * by (and conflicts with) the modern activity-based preferences.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005109 */
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005110 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005111 public abstract void addPackageToPreferred(String packageName);
5112
5113 /**
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005114 * @deprecated This function no longer does anything; it was an old
kmccormickac66b852013-03-28 15:17:15 -07005115 * approach to managing preferred activities, which has been superseded
5116 * by (and conflicts with) the modern activity-based preferences.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005117 */
Dianne Hackborna7ca0e52009-12-01 14:31:55 -08005118 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005119 public abstract void removePackageFromPreferred(String packageName);
5120
5121 /**
Jeff Sharkey4347f812017-04-21 12:08:39 -06005122 * Retrieve the list of all currently configured preferred packages. The
5123 * first package on the list is the most preferred, the last is the least
5124 * preferred.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005125 *
Jeff Sharkey4347f812017-04-21 12:08:39 -06005126 * @param flags Additional option flags to modify the data returned.
5127 * @return A List of PackageInfo objects, one for each preferred
5128 * application, in order of preference.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005129 */
Jeff Sharkey2f3e3532015-12-21 14:16:43 -07005130 public abstract List<PackageInfo> getPreferredPackages(@PackageInfoFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005131
5132 /**
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005133 * @deprecated This is a protected API that should not have been available
5134 * to third party applications. It is the platform's responsibility for
kmccormick30498b42013-03-27 17:39:17 -07005135 * assigning preferred activities and this cannot be directly modified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005136 *
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005137 * Add a new preferred activity mapping to the system. This will be used
5138 * to automatically select the given activity component when
5139 * {@link Context#startActivity(Intent) Context.startActivity()} finds
5140 * multiple matching activities and also matches the given filter.
5141 *
5142 * @param filter The set of intents under which this activity will be
5143 * made preferred.
5144 * @param match The IntentFilter match category that this preference
5145 * applies to.
5146 * @param set The set of activities that the user was picking from when
5147 * this preference was made.
5148 * @param activity The component name of the activity that is to be
5149 * preferred.
5150 */
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005151 @Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005152 public abstract void addPreferredActivity(IntentFilter filter, int match,
5153 ComponentName[] set, ComponentName activity);
5154
5155 /**
Amith Yamasania3f133a2012-08-09 17:11:28 -07005156 * Same as {@link #addPreferredActivity(IntentFilter, int,
5157 ComponentName[], ComponentName)}, but with a specific userId to apply the preference
5158 to.
5159 * @hide
5160 */
Jeff Sharkeye06b4d12016-01-06 14:51:50 -07005161 public void addPreferredActivityAsUser(IntentFilter filter, int match,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07005162 ComponentName[] set, ComponentName activity, @UserIdInt int userId) {
Amith Yamasania3f133a2012-08-09 17:11:28 -07005163 throw new RuntimeException("Not implemented. Must override in a subclass.");
5164 }
5165
5166 /**
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005167 * @deprecated This is a protected API that should not have been available
5168 * to third party applications. It is the platform's responsibility for
kmccormick30498b42013-03-27 17:39:17 -07005169 * assigning preferred activities and this cannot be directly modified.
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005170 *
Satish Sampath8dbe6122009-06-02 23:35:54 +01005171 * Replaces an existing preferred activity mapping to the system, and if that were not present
5172 * adds a new preferred activity. This will be used
5173 * to automatically select the given activity component when
5174 * {@link Context#startActivity(Intent) Context.startActivity()} finds
5175 * multiple matching activities and also matches the given filter.
5176 *
5177 * @param filter The set of intents under which this activity will be
5178 * made preferred.
5179 * @param match The IntentFilter match category that this preference
5180 * applies to.
5181 * @param set The set of activities that the user was picking from when
5182 * this preference was made.
5183 * @param activity The component name of the activity that is to be
5184 * preferred.
5185 * @hide
5186 */
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005187 @Deprecated
Satish Sampath8dbe6122009-06-02 23:35:54 +01005188 public abstract void replacePreferredActivity(IntentFilter filter, int match,
5189 ComponentName[] set, ComponentName activity);
5190
5191 /**
Amith Yamasani41c1ded2014-08-05 11:15:05 -07005192 * @hide
5193 */
5194 @Deprecated
5195 public void replacePreferredActivityAsUser(IntentFilter filter, int match,
Jeff Sharkey8588bc12016-01-06 16:47:42 -07005196 ComponentName[] set, ComponentName activity, @UserIdInt int userId) {
Amith Yamasani41c1ded2014-08-05 11:15:05 -07005197 throw new RuntimeException("Not implemented. Must override in a subclass.");
5198 }
5199
5200 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005201 * Remove all preferred activity mappings, previously added with
5202 * {@link #addPreferredActivity}, from the
5203 * system whose activities are implemented in the given package name.
Dianne Hackborn2ee89ea2010-03-10 18:27:09 -08005204 * An application can only clear its own package(s).
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005205 *
5206 * @param packageName The name of the package whose preferred activity
5207 * mappings are to be removed.
5208 */
5209 public abstract void clearPackagePreferredActivities(String packageName);
5210
5211 /**
5212 * Retrieve all preferred activities, previously added with
5213 * {@link #addPreferredActivity}, that are
5214 * currently registered with the system.
5215 *
John Spurlock38e64252015-03-18 12:09:32 -04005216 * @param outFilters A required list in which to place the filters of all of the
5217 * preferred activities.
5218 * @param outActivities A required list in which to place the component names of
5219 * all of the preferred activities.
5220 * @param packageName An optional package in which you would like to limit
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005221 * the list. If null, all activities will be returned; if non-null, only
5222 * those activities in the given package are returned.
5223 *
5224 * @return Returns the total number of registered preferred activities
5225 * (the number of distinct IntentFilter records, not the number of unique
5226 * activity components) that were found.
5227 */
John Spurlock38e64252015-03-18 12:09:32 -04005228 public abstract int getPreferredActivities(@NonNull List<IntentFilter> outFilters,
5229 @NonNull List<ComponentName> outActivities, String packageName);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005230
5231 /**
Christopher Tatea2a0850d2013-09-05 16:38:58 -07005232 * Ask for the set of available 'home' activities and the current explicit
5233 * default, if any.
5234 * @hide
5235 */
5236 public abstract ComponentName getHomeActivities(List<ResolveInfo> outActivities);
5237
5238 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005239 * Set the enabled setting for a package component (activity, receiver, service, provider).
5240 * This setting will override any enabled state which may have been set by the component in its
5241 * manifest.
5242 *
5243 * @param componentName The component to enable
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06005244 * @param newState The new enabled state for the component.
5245 * @param flags Optional behavior flags.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005246 */
5247 public abstract void setComponentEnabledSetting(ComponentName componentName,
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06005248 @EnabledState int newState, @EnabledFlags int flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005249
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005250 /**
Amaury Medeirosdde24262014-06-03 20:06:41 -03005251 * Return the enabled setting for a package component (activity,
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005252 * receiver, service, provider). This returns the last value set by
5253 * {@link #setComponentEnabledSetting(ComponentName, int, int)}; in most
5254 * cases this value will be {@link #COMPONENT_ENABLED_STATE_DEFAULT} since
5255 * the value originally specified in the manifest has not been modified.
5256 *
5257 * @param componentName The component to retrieve.
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06005258 * @return Returns the current enabled state for the component.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005259 */
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06005260 public abstract @EnabledState int getComponentEnabledSetting(
5261 ComponentName componentName);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005262
5263 /**
5264 * Set the enabled setting for an application
5265 * This setting will override any enabled state which may have been set by the application in
5266 * its manifest. It also overrides the enabled state set in the manifest for any of the
5267 * application's components. It does not override any enabled state set by
5268 * {@link #setComponentEnabledSetting} for any of the application's components.
5269 *
5270 * @param packageName The package name of the application to enable
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06005271 * @param newState The new enabled state for the application.
5272 * @param flags Optional behavior flags.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005273 */
5274 public abstract void setApplicationEnabledSetting(String packageName,
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06005275 @EnabledState int newState, @EnabledFlags int flags);
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005276
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005277 /**
Amaury Medeirosdde24262014-06-03 20:06:41 -03005278 * Return the enabled setting for an application. This returns
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005279 * the last value set by
5280 * {@link #setApplicationEnabledSetting(String, int, int)}; in most
5281 * cases this value will be {@link #COMPONENT_ENABLED_STATE_DEFAULT} since
5282 * the value originally specified in the manifest has not been modified.
5283 *
Amaury Medeirosdde24262014-06-03 20:06:41 -03005284 * @param packageName The package name of the application to retrieve.
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06005285 * @return Returns the current enabled state for the application.
Mathew Inwood1b9f8d92011-09-26 13:23:56 +01005286 * @throws IllegalArgumentException if the named package does not exist.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005287 */
Jeff Sharkey30e06bb2017-04-24 11:18:03 -06005288 public abstract @EnabledState int getApplicationEnabledSetting(String packageName);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005289
5290 /**
Sudheer Shankabbb3ff22015-07-09 15:39:23 +01005291 * Flush the package restrictions for a given user to disk. This forces the package restrictions
5292 * like component and package enabled settings to be written to disk and avoids the delay that
5293 * is otherwise present when changing those settings.
5294 *
5295 * @param userId Ther userId of the user whose restrictions are to be flushed.
5296 * @hide
5297 */
5298 public abstract void flushPackageRestrictionsAsUser(int userId);
5299
5300 /**
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005301 * Puts the package in a hidden state, which is almost like an uninstalled state,
Amith Yamasani655d0e22013-06-12 14:19:10 -07005302 * making the package unavailable, but it doesn't remove the data or the actual
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005303 * package file. Application can be unhidden by either resetting the hidden state
5304 * or by installing it, such as with {@link #installExistingPackage(String)}
Amith Yamasani655d0e22013-06-12 14:19:10 -07005305 * @hide
5306 */
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005307 public abstract boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden,
Amith Yamasani655d0e22013-06-12 14:19:10 -07005308 UserHandle userHandle);
5309
5310 /**
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005311 * Returns the hidden state of a package.
5312 * @see #setApplicationHiddenSettingAsUser(String, boolean, UserHandle)
Amith Yamasani655d0e22013-06-12 14:19:10 -07005313 * @hide
5314 */
Amith Yamasanie5bcff62014-07-19 15:44:09 -07005315 public abstract boolean getApplicationHiddenSettingAsUser(String packageName,
Amith Yamasani655d0e22013-06-12 14:19:10 -07005316 UserHandle userHandle);
5317
5318 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005319 * Return whether the device has been booted into safe mode.
5320 */
5321 public abstract boolean isSafeMode();
Suchi Amalapurapu8946dd32010-02-19 09:19:34 -08005322
5323 /**
Svetoslavf7c06eb2015-06-10 18:43:22 -07005324 * Adds a listener for permission changes for installed packages.
5325 *
5326 * @param listener The listener to add.
5327 *
5328 * @hide
5329 */
5330 @SystemApi
5331 @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS)
5332 public abstract void addOnPermissionsChangeListener(OnPermissionsChangedListener listener);
5333
5334 /**
5335 * Remvoes a listener for permission changes for installed packages.
5336 *
5337 * @param listener The listener to remove.
5338 *
5339 * @hide
5340 */
5341 @SystemApi
Jeff Sharkeyd86b8fe2017-06-02 17:36:26 -06005342 @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS)
Svetoslavf7c06eb2015-06-10 18:43:22 -07005343 public abstract void removeOnPermissionsChangeListener(OnPermissionsChangedListener listener);
5344
5345 /**
dcashman9d2f4412014-06-09 09:27:54 -07005346 * Return the {@link KeySet} associated with the String alias for this
5347 * application.
5348 *
5349 * @param alias The alias for a given {@link KeySet} as defined in the
5350 * application's AndroidManifest.xml.
dcashmanc6f22492014-08-14 09:54:51 -07005351 * @hide
dcashman9d2f4412014-06-09 09:27:54 -07005352 */
5353 public abstract KeySet getKeySetByAlias(String packageName, String alias);
5354
Ihab Awad1ec68882014-09-12 11:09:01 -07005355 /** Return the signing {@link KeySet} for this application.
dcashmanc6f22492014-08-14 09:54:51 -07005356 * @hide
5357 */
dcashman9d2f4412014-06-09 09:27:54 -07005358 public abstract KeySet getSigningKeySet(String packageName);
5359
5360 /**
5361 * Return whether the package denoted by packageName has been signed by all
5362 * of the keys specified by the {@link KeySet} ks. This will return true if
5363 * the package has been signed by additional keys (a superset) as well.
5364 * Compare to {@link #isSignedByExactly(String packageName, KeySet ks)}.
dcashmanc6f22492014-08-14 09:54:51 -07005365 * @hide
dcashman9d2f4412014-06-09 09:27:54 -07005366 */
5367 public abstract boolean isSignedBy(String packageName, KeySet ks);
5368
5369 /**
5370 * Return whether the package denoted by packageName has been signed by all
5371 * of, and only, the keys specified by the {@link KeySet} ks. Compare to
5372 * {@link #isSignedBy(String packageName, KeySet ks)}.
dcashmanc6f22492014-08-14 09:54:51 -07005373 * @hide
dcashman9d2f4412014-06-09 09:27:54 -07005374 */
5375 public abstract boolean isSignedByExactly(String packageName, KeySet ks);
5376
5377 /**
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005378 * Puts the package in a suspended state, where attempts at starting activities are denied.
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005379 *
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005380 * <p>It doesn't remove the data or the actual package file. The application notifications
5381 * will be hidden, the application will not show up in recents, will not be able to show
5382 * toasts or dialogs or ring the device.
5383 *
Kenny Guy871f3eb2016-03-09 20:06:16 +00005384 * <p>The package must already be installed. If the package is uninstalled while suspended
5385 * the package will no longer be suspended.
5386 *
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005387 * @param packageNames The names of the packages to set the suspended status.
5388 * @param suspended If set to {@code true} than the packages will be suspended, if set to
5389 * {@code false} the packages will be unsuspended.
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005390 * @param userId The user id.
5391 *
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005392 * @return an array of package names for which the suspended status is not set as requested in
5393 * this method.
5394 *
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005395 * @hide
5396 */
Andrei Stingaceanueb84b182016-01-26 18:39:55 +00005397 public abstract String[] setPackagesSuspendedAsUser(
5398 String[] packageNames, boolean suspended, @UserIdInt int userId);
Andrei Stingaceanu1e283912015-11-26 15:26:28 +00005399
Andrei Stingaceanu355b2322016-02-12 16:43:51 +00005400 /**
5401 * @see #setPackageSuspendedAsUser(String, boolean, int)
5402 * @param packageName The name of the package to get the suspended status of.
5403 * @param userId The user id.
5404 * @return {@code true} if the package is suspended or {@code false} if the package is not
5405 * suspended or could not be found.
5406 * @hide
5407 */
5408 public abstract boolean isPackageSuspendedForUser(String packageName, int userId);
5409
Jeff Sharkey9bc89af2017-01-11 11:25:50 -07005410 /**
5411 * Provide a hint of what the {@link ApplicationInfo#category} value should
5412 * be for the given package.
5413 * <p>
5414 * This hint can only be set by the app which installed this package, as
5415 * determined by {@link #getInstallerPackageName(String)}.
Jeff Sharkey60a82cd2017-04-18 18:19:16 -06005416 *
5417 * @param packageName the package to change the category hint for.
Jeff Sharkey4347f812017-04-21 12:08:39 -06005418 * @param categoryHint the category hint to set.
Jeff Sharkey9bc89af2017-01-11 11:25:50 -07005419 */
Jeff Sharkey60a82cd2017-04-18 18:19:16 -06005420 public abstract void setApplicationCategoryHint(@NonNull String packageName,
Jeff Sharkey9bc89af2017-01-11 11:25:50 -07005421 @ApplicationInfo.Category int categoryHint);
5422
Jeff Sharkeyb2b9ab82015-04-05 21:10:42 -07005423 /** {@hide} */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005424 public static boolean isMoveStatusFinished(int status) {
5425 return (status < 0 || status > 100);
5426 }
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005427
Jeff Sharkeye2d45be2015-04-15 17:14:12 -07005428 /** {@hide} */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005429 public static abstract class MoveCallback {
Jeff Sharkey50a05452015-04-29 11:24:52 -07005430 public void onCreated(int moveId, Bundle extras) {}
5431 public abstract void onStatusChanged(int moveId, int status, long estMillis);
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005432 }
Jeff Sharkeye2d45be2015-04-15 17:14:12 -07005433
5434 /** {@hide} */
Jeff Sharkey620b32b2015-04-23 19:36:02 -07005435 public abstract int getMoveStatus(int moveId);
5436
5437 /** {@hide} */
5438 public abstract void registerMoveCallback(MoveCallback callback, Handler handler);
5439 /** {@hide} */
5440 public abstract void unregisterMoveCallback(MoveCallback callback);
5441
5442 /** {@hide} */
5443 public abstract int movePackage(String packageName, VolumeInfo vol);
5444 /** {@hide} */
5445 public abstract @Nullable VolumeInfo getPackageCurrentVolume(ApplicationInfo app);
5446 /** {@hide} */
5447 public abstract @NonNull List<VolumeInfo> getPackageCandidateVolumes(ApplicationInfo app);
5448
5449 /** {@hide} */
5450 public abstract int movePrimaryStorage(VolumeInfo vol);
5451 /** {@hide} */
5452 public abstract @Nullable VolumeInfo getPrimaryStorageCurrentVolume();
5453 /** {@hide} */
5454 public abstract @NonNull List<VolumeInfo> getPrimaryStorageCandidateVolumes();
Jeff Sharkeye2d45be2015-04-15 17:14:12 -07005455
Amith Yamasani4b2e9342011-03-31 12:38:53 -07005456 /**
Amith Yamasani13593602012-03-22 16:16:17 -07005457 * Returns the device identity that verifiers can use to associate their scheme to a particular
5458 * device. This should not be used by anything other than a package verifier.
Aravind Akella068b0c02013-10-12 17:39:15 -07005459 *
Kenny Root0aaa0d92011-09-12 16:42:55 -07005460 * @return identity that uniquely identifies current device
5461 * @hide
5462 */
5463 public abstract VerifierDeviceIdentity getVerifierDeviceIdentity();
Amith Yamasani742a6712011-05-04 14:49:28 -07005464
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005465 /**
Jeff Hao9f60c082014-10-28 18:51:07 -07005466 * Returns true if the device is upgrading, such as first boot after OTA.
5467 *
5468 * @hide
5469 */
5470 public abstract boolean isUpgrade();
5471
5472 /**
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005473 * Return interface that offers the ability to install, upgrade, and remove
5474 * applications on the device.
5475 */
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005476 public abstract @NonNull PackageInstaller getPackageInstaller();
Jeff Sharkey3a44f3f2014-04-28 17:36:31 -07005477
Amith Yamasani742a6712011-05-04 14:49:28 -07005478 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005479 * Adds a {@code CrossProfileIntentFilter}. After calling this method all
5480 * intents sent from the user with id sourceUserId can also be be resolved
5481 * by activities in the user with id targetUserId if they match the
5482 * specified intent filter.
5483 *
Nicolas Prevot3f7777f2014-07-24 15:58:39 +01005484 * @param filter The {@link IntentFilter} the intent has to match
5485 * @param sourceUserId The source user id.
5486 * @param targetUserId The target user id.
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005487 * @param flags The possible values are {@link #SKIP_CURRENT_PROFILE} and
5488 * {@link #ONLY_IF_NO_MATCH_FOUND}.
Nicolas Prevotc79586e2014-05-06 12:47:57 +01005489 * @hide
5490 */
Nicolas Prevot63798c52014-05-27 13:22:38 +01005491 public abstract void addCrossProfileIntentFilter(IntentFilter filter, int sourceUserId,
5492 int targetUserId, int flags);
Nicolas Prevotc79586e2014-05-06 12:47:57 +01005493
5494 /**
Jeff Sharkey5aa86932016-01-08 19:07:49 -07005495 * Clearing {@code CrossProfileIntentFilter}s which have the specified user
5496 * as their source, and have been set by the app calling this method.
5497 *
Nicolas Prevot3f7777f2014-07-24 15:58:39 +01005498 * @param sourceUserId The source user id.
Nicolas Prevotc79586e2014-05-06 12:47:57 +01005499 * @hide
5500 */
Nicolas Prevot81948992014-05-16 18:25:26 +01005501 public abstract void clearCrossProfileIntentFilters(int sourceUserId);
Alexandra Gherghina6e2ae252014-06-12 16:03:58 +01005502
5503 /**
Nicolas Prevot88cc3462014-05-14 14:51:48 +01005504 * @hide
5505 */
Nicolas Prevot7f7b0c72014-06-23 15:59:38 +01005506 public abstract Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo);
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005507
Benjamin Franzec2d48b2014-10-01 15:38:43 +01005508 /**
5509 * @hide
5510 */
5511 public abstract Drawable loadUnbadgedItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo);
5512
Jeff Sharkey6c833e02014-07-14 22:44:30 -07005513 /** {@hide} */
5514 public abstract boolean isPackageAvailable(String packageName);
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005515
5516 /** {@hide} */
Jeff Sharkeya0907432014-08-15 10:23:11 -07005517 public static String installStatusToString(int status, String msg) {
5518 final String str = installStatusToString(status);
5519 if (msg != null) {
5520 return str + ": " + msg;
5521 } else {
5522 return str;
5523 }
5524 }
5525
5526 /** {@hide} */
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005527 public static String installStatusToString(int status) {
5528 switch (status) {
5529 case INSTALL_SUCCEEDED: return "INSTALL_SUCCEEDED";
5530 case INSTALL_FAILED_ALREADY_EXISTS: return "INSTALL_FAILED_ALREADY_EXISTS";
5531 case INSTALL_FAILED_INVALID_APK: return "INSTALL_FAILED_INVALID_APK";
5532 case INSTALL_FAILED_INVALID_URI: return "INSTALL_FAILED_INVALID_URI";
5533 case INSTALL_FAILED_INSUFFICIENT_STORAGE: return "INSTALL_FAILED_INSUFFICIENT_STORAGE";
5534 case INSTALL_FAILED_DUPLICATE_PACKAGE: return "INSTALL_FAILED_DUPLICATE_PACKAGE";
5535 case INSTALL_FAILED_NO_SHARED_USER: return "INSTALL_FAILED_NO_SHARED_USER";
5536 case INSTALL_FAILED_UPDATE_INCOMPATIBLE: return "INSTALL_FAILED_UPDATE_INCOMPATIBLE";
5537 case INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: return "INSTALL_FAILED_SHARED_USER_INCOMPATIBLE";
5538 case INSTALL_FAILED_MISSING_SHARED_LIBRARY: return "INSTALL_FAILED_MISSING_SHARED_LIBRARY";
5539 case INSTALL_FAILED_REPLACE_COULDNT_DELETE: return "INSTALL_FAILED_REPLACE_COULDNT_DELETE";
5540 case INSTALL_FAILED_DEXOPT: return "INSTALL_FAILED_DEXOPT";
5541 case INSTALL_FAILED_OLDER_SDK: return "INSTALL_FAILED_OLDER_SDK";
5542 case INSTALL_FAILED_CONFLICTING_PROVIDER: return "INSTALL_FAILED_CONFLICTING_PROVIDER";
5543 case INSTALL_FAILED_NEWER_SDK: return "INSTALL_FAILED_NEWER_SDK";
5544 case INSTALL_FAILED_TEST_ONLY: return "INSTALL_FAILED_TEST_ONLY";
5545 case INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: return "INSTALL_FAILED_CPU_ABI_INCOMPATIBLE";
5546 case INSTALL_FAILED_MISSING_FEATURE: return "INSTALL_FAILED_MISSING_FEATURE";
5547 case INSTALL_FAILED_CONTAINER_ERROR: return "INSTALL_FAILED_CONTAINER_ERROR";
5548 case INSTALL_FAILED_INVALID_INSTALL_LOCATION: return "INSTALL_FAILED_INVALID_INSTALL_LOCATION";
5549 case INSTALL_FAILED_MEDIA_UNAVAILABLE: return "INSTALL_FAILED_MEDIA_UNAVAILABLE";
5550 case INSTALL_FAILED_VERIFICATION_TIMEOUT: return "INSTALL_FAILED_VERIFICATION_TIMEOUT";
5551 case INSTALL_FAILED_VERIFICATION_FAILURE: return "INSTALL_FAILED_VERIFICATION_FAILURE";
5552 case INSTALL_FAILED_PACKAGE_CHANGED: return "INSTALL_FAILED_PACKAGE_CHANGED";
5553 case INSTALL_FAILED_UID_CHANGED: return "INSTALL_FAILED_UID_CHANGED";
5554 case INSTALL_FAILED_VERSION_DOWNGRADE: return "INSTALL_FAILED_VERSION_DOWNGRADE";
5555 case INSTALL_PARSE_FAILED_NOT_APK: return "INSTALL_PARSE_FAILED_NOT_APK";
5556 case INSTALL_PARSE_FAILED_BAD_MANIFEST: return "INSTALL_PARSE_FAILED_BAD_MANIFEST";
5557 case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return "INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION";
5558 case INSTALL_PARSE_FAILED_NO_CERTIFICATES: return "INSTALL_PARSE_FAILED_NO_CERTIFICATES";
5559 case INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES: return "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES";
5560 case INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING: return "INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING";
5561 case INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME: return "INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME";
5562 case INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: return "INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID";
5563 case INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: return "INSTALL_PARSE_FAILED_MANIFEST_MALFORMED";
5564 case INSTALL_PARSE_FAILED_MANIFEST_EMPTY: return "INSTALL_PARSE_FAILED_MANIFEST_EMPTY";
5565 case INSTALL_FAILED_INTERNAL_ERROR: return "INSTALL_FAILED_INTERNAL_ERROR";
5566 case INSTALL_FAILED_USER_RESTRICTED: return "INSTALL_FAILED_USER_RESTRICTED";
5567 case INSTALL_FAILED_DUPLICATE_PERMISSION: return "INSTALL_FAILED_DUPLICATE_PERMISSION";
5568 case INSTALL_FAILED_NO_MATCHING_ABIS: return "INSTALL_FAILED_NO_MATCHING_ABIS";
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005569 case INSTALL_FAILED_ABORTED: return "INSTALL_FAILED_ABORTED";
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005570 default: return Integer.toString(status);
5571 }
5572 }
5573
5574 /** {@hide} */
Jeff Sharkeya0907432014-08-15 10:23:11 -07005575 public static int installStatusToPublicStatus(int status) {
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005576 switch (status) {
Jeff Sharkeya0907432014-08-15 10:23:11 -07005577 case INSTALL_SUCCEEDED: return PackageInstaller.STATUS_SUCCESS;
5578 case INSTALL_FAILED_ALREADY_EXISTS: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5579 case INSTALL_FAILED_INVALID_APK: return PackageInstaller.STATUS_FAILURE_INVALID;
5580 case INSTALL_FAILED_INVALID_URI: return PackageInstaller.STATUS_FAILURE_INVALID;
5581 case INSTALL_FAILED_INSUFFICIENT_STORAGE: return PackageInstaller.STATUS_FAILURE_STORAGE;
5582 case INSTALL_FAILED_DUPLICATE_PACKAGE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5583 case INSTALL_FAILED_NO_SHARED_USER: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5584 case INSTALL_FAILED_UPDATE_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5585 case INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5586 case INSTALL_FAILED_MISSING_SHARED_LIBRARY: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5587 case INSTALL_FAILED_REPLACE_COULDNT_DELETE: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5588 case INSTALL_FAILED_DEXOPT: return PackageInstaller.STATUS_FAILURE_INVALID;
5589 case INSTALL_FAILED_OLDER_SDK: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5590 case INSTALL_FAILED_CONFLICTING_PROVIDER: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5591 case INSTALL_FAILED_NEWER_SDK: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5592 case INSTALL_FAILED_TEST_ONLY: return PackageInstaller.STATUS_FAILURE_INVALID;
5593 case INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5594 case INSTALL_FAILED_MISSING_FEATURE: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5595 case INSTALL_FAILED_CONTAINER_ERROR: return PackageInstaller.STATUS_FAILURE_STORAGE;
5596 case INSTALL_FAILED_INVALID_INSTALL_LOCATION: return PackageInstaller.STATUS_FAILURE_STORAGE;
5597 case INSTALL_FAILED_MEDIA_UNAVAILABLE: return PackageInstaller.STATUS_FAILURE_STORAGE;
5598 case INSTALL_FAILED_VERIFICATION_TIMEOUT: return PackageInstaller.STATUS_FAILURE_ABORTED;
5599 case INSTALL_FAILED_VERIFICATION_FAILURE: return PackageInstaller.STATUS_FAILURE_ABORTED;
5600 case INSTALL_FAILED_PACKAGE_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID;
5601 case INSTALL_FAILED_UID_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID;
5602 case INSTALL_FAILED_VERSION_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID;
Svetoslavd9653702015-05-13 18:02:46 -07005603 case INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID;
Jeff Sharkeya0907432014-08-15 10:23:11 -07005604 case INSTALL_PARSE_FAILED_NOT_APK: return PackageInstaller.STATUS_FAILURE_INVALID;
5605 case INSTALL_PARSE_FAILED_BAD_MANIFEST: return PackageInstaller.STATUS_FAILURE_INVALID;
5606 case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return PackageInstaller.STATUS_FAILURE_INVALID;
5607 case INSTALL_PARSE_FAILED_NO_CERTIFICATES: return PackageInstaller.STATUS_FAILURE_INVALID;
5608 case INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES: return PackageInstaller.STATUS_FAILURE_INVALID;
5609 case INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING: return PackageInstaller.STATUS_FAILURE_INVALID;
5610 case INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME: return PackageInstaller.STATUS_FAILURE_INVALID;
5611 case INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: return PackageInstaller.STATUS_FAILURE_INVALID;
5612 case INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: return PackageInstaller.STATUS_FAILURE_INVALID;
5613 case INSTALL_PARSE_FAILED_MANIFEST_EMPTY: return PackageInstaller.STATUS_FAILURE_INVALID;
5614 case INSTALL_FAILED_INTERNAL_ERROR: return PackageInstaller.STATUS_FAILURE;
5615 case INSTALL_FAILED_USER_RESTRICTED: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5616 case INSTALL_FAILED_DUPLICATE_PERMISSION: return PackageInstaller.STATUS_FAILURE_CONFLICT;
5617 case INSTALL_FAILED_NO_MATCHING_ABIS: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE;
5618 case INSTALL_FAILED_ABORTED: return PackageInstaller.STATUS_FAILURE_ABORTED;
5619 default: return PackageInstaller.STATUS_FAILURE;
5620 }
5621 }
5622
5623 /** {@hide} */
5624 public static String deleteStatusToString(int status, String msg) {
5625 final String str = deleteStatusToString(status);
5626 if (msg != null) {
5627 return str + ": " + msg;
5628 } else {
5629 return str;
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005630 }
5631 }
5632
5633 /** {@hide} */
5634 public static String deleteStatusToString(int status) {
5635 switch (status) {
5636 case DELETE_SUCCEEDED: return "DELETE_SUCCEEDED";
5637 case DELETE_FAILED_INTERNAL_ERROR: return "DELETE_FAILED_INTERNAL_ERROR";
5638 case DELETE_FAILED_DEVICE_POLICY_MANAGER: return "DELETE_FAILED_DEVICE_POLICY_MANAGER";
5639 case DELETE_FAILED_USER_RESTRICTED: return "DELETE_FAILED_USER_RESTRICTED";
5640 case DELETE_FAILED_OWNER_BLOCKED: return "DELETE_FAILED_OWNER_BLOCKED";
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005641 case DELETE_FAILED_ABORTED: return "DELETE_FAILED_ABORTED";
Svet Ganov67882122016-12-11 16:36:34 -08005642 case DELETE_FAILED_USED_SHARED_LIBRARY: return "DELETE_FAILED_USED_SHARED_LIBRARY";
Jeff Sharkey16c8e3f2014-07-24 17:08:17 -07005643 default: return Integer.toString(status);
5644 }
5645 }
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005646
5647 /** {@hide} */
Jeff Sharkeya0907432014-08-15 10:23:11 -07005648 public static int deleteStatusToPublicStatus(int status) {
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005649 switch (status) {
Jeff Sharkeya0907432014-08-15 10:23:11 -07005650 case DELETE_SUCCEEDED: return PackageInstaller.STATUS_SUCCESS;
5651 case DELETE_FAILED_INTERNAL_ERROR: return PackageInstaller.STATUS_FAILURE;
5652 case DELETE_FAILED_DEVICE_POLICY_MANAGER: return PackageInstaller.STATUS_FAILURE_BLOCKED;
5653 case DELETE_FAILED_USER_RESTRICTED: return PackageInstaller.STATUS_FAILURE_BLOCKED;
5654 case DELETE_FAILED_OWNER_BLOCKED: return PackageInstaller.STATUS_FAILURE_BLOCKED;
5655 case DELETE_FAILED_ABORTED: return PackageInstaller.STATUS_FAILURE_ABORTED;
Svet Ganov67882122016-12-11 16:36:34 -08005656 case DELETE_FAILED_USED_SHARED_LIBRARY: return PackageInstaller.STATUS_FAILURE_CONFLICT;
Jeff Sharkeya0907432014-08-15 10:23:11 -07005657 default: return PackageInstaller.STATUS_FAILURE;
Jeff Sharkeyf0600952014-08-07 17:31:53 -07005658 }
5659 }
Jeff Sharkey6c0b9da2014-08-07 22:07:11 -07005660
5661 /** {@hide} */
Svet Ganov77ab6a82015-07-03 12:03:02 -07005662 public static String permissionFlagToString(int flag) {
5663 switch (flag) {
Svetoslav4a5f4a22015-07-07 18:18:15 -07005664 case FLAG_PERMISSION_GRANTED_BY_DEFAULT: return "GRANTED_BY_DEFAULT";
5665 case FLAG_PERMISSION_POLICY_FIXED: return "POLICY_FIXED";
5666 case FLAG_PERMISSION_SYSTEM_FIXED: return "SYSTEM_FIXED";
5667 case FLAG_PERMISSION_USER_SET: return "USER_SET";
5668 case FLAG_PERMISSION_REVOKE_ON_UPGRADE: return "REVOKE_ON_UPGRADE";
5669 case FLAG_PERMISSION_USER_FIXED: return "USER_FIXED";
Svet Ganov9c165d72015-12-01 19:52:26 -08005670 case FLAG_PERMISSION_REVIEW_REQUIRED: return "REVIEW_REQUIRED";
Svet Ganov77ab6a82015-07-03 12:03:02 -07005671 default: return Integer.toString(flag);
5672 }
5673 }
5674
5675 /** {@hide} */
Jeff Sharkey6c0b9da2014-08-07 22:07:11 -07005676 public static class LegacyPackageInstallObserver extends PackageInstallObserver {
5677 private final IPackageInstallObserver mLegacy;
5678
5679 public LegacyPackageInstallObserver(IPackageInstallObserver legacy) {
5680 mLegacy = legacy;
5681 }
5682
5683 @Override
5684 public void onPackageInstalled(String basePackageName, int returnCode, String msg,
5685 Bundle extras) {
5686 if (mLegacy == null) return;
5687 try {
5688 mLegacy.packageInstalled(basePackageName, returnCode);
5689 } catch (RemoteException ignored) {
5690 }
5691 }
5692 }
5693
5694 /** {@hide} */
5695 public static class LegacyPackageDeleteObserver extends PackageDeleteObserver {
5696 private final IPackageDeleteObserver mLegacy;
5697
5698 public LegacyPackageDeleteObserver(IPackageDeleteObserver legacy) {
5699 mLegacy = legacy;
5700 }
5701
5702 @Override
5703 public void onPackageDeleted(String basePackageName, int returnCode, String msg) {
5704 if (mLegacy == null) return;
5705 try {
5706 mLegacy.packageDeleted(basePackageName, returnCode);
5707 } catch (RemoteException ignored) {
5708 }
5709 }
5710 }
Bartosz Fabianowskia34f53f2017-01-11 18:08:47 +01005711
5712 /**
Jeff Sharkey4347f812017-04-21 12:08:39 -06005713 * Return the install reason that was recorded when a package was first
5714 * installed for a specific user. Requesting the install reason for another
5715 * user will require the permission INTERACT_ACROSS_USERS_FULL.
Bartosz Fabianowskia34f53f2017-01-11 18:08:47 +01005716 *
5717 * @param packageName The package for which to retrieve the install reason
5718 * @param user The user for whom to retrieve the install reason
Jeff Sharkey4347f812017-04-21 12:08:39 -06005719 * @return The install reason. If the package is not installed for the given
5720 * user, {@code INSTALL_REASON_UNKNOWN} is returned.
Bartosz Fabianowskia34f53f2017-01-11 18:08:47 +01005721 * @hide
5722 */
5723 @TestApi
5724 public abstract @InstallReason int getInstallReason(String packageName,
5725 @NonNull UserHandle user);
Suprabh Shuklaaef25132017-01-23 18:09:03 -08005726
5727 /**
5728 * Checks whether the calling package is allowed to request package installs through package
Suprabh Shukla57528472017-04-14 19:22:45 -07005729 * installer. Apps are encouraged to call this API before launching the package installer via
Suprabh Shuklaaef25132017-01-23 18:09:03 -08005730 * intent {@link android.content.Intent#ACTION_INSTALL_PACKAGE}. Starting from Android O, the
5731 * user can explicitly choose what external sources they trust to install apps on the device.
Suprabh Shukla57528472017-04-14 19:22:45 -07005732 * If this API returns false, the install request will be blocked by the package installer and
Suprabh Shuklaaef25132017-01-23 18:09:03 -08005733 * a dialog will be shown to the user with an option to launch settings to change their
5734 * preference. An application must target Android O or higher and declare permission
Suprabh Shukla57528472017-04-14 19:22:45 -07005735 * {@link android.Manifest.permission#REQUEST_INSTALL_PACKAGES} in order to use this API.
Suprabh Shuklaaef25132017-01-23 18:09:03 -08005736 *
5737 * @return true if the calling package is trusted by the user to request install packages on
5738 * the device, false otherwise.
Suprabh Shukla57528472017-04-14 19:22:45 -07005739 * @see android.content.Intent#ACTION_INSTALL_PACKAGE
5740 * @see android.provider.Settings#ACTION_MANAGE_UNKNOWN_APP_SOURCES
Suprabh Shuklaaef25132017-01-23 18:09:03 -08005741 */
5742 public abstract boolean canRequestPackageInstalls();
Chad Brubakeraa49cb82017-03-24 15:53:09 -07005743
5744 /**
5745 * Return the {@link ComponentName} of the activity providing Settings for the Instant App
5746 * resolver.
5747 *
Todd Kennedy801e6592017-04-12 14:10:12 -07005748 * @see {@link android.content.Intent#ACTION_INSTANT_APP_RESOLVER_SETTINGS}
Chad Brubakeraa49cb82017-03-24 15:53:09 -07005749 * @hide
5750 */
5751 @SystemApi
5752 public abstract ComponentName getInstantAppResolverSettingsComponent();
Todd Kennedy801e6592017-04-12 14:10:12 -07005753
5754 /**
5755 * Return the {@link ComponentName} of the activity responsible for installing instant
5756 * applications.
5757 *
5758 * @see {@link android.content.Intent#ACTION_INSTALL_INSTANT_APP_PACKAGE}
5759 * @hide
5760 */
5761 @SystemApi
5762 public abstract ComponentName getInstantAppInstallerComponent();
Chad Brubaker0d277a72017-04-12 16:56:53 -07005763
5764 /**
5765 * Return the Android Id for a given Instant App.
5766 *
5767 * @see {@link android.provider.Settings.Secure#ANDROID_ID}
5768 * @hide
5769 */
5770 public abstract String getInstantAppAndroidId(String packageName, @NonNull UserHandle user);
Calin Juravle3d2af7f2017-04-19 19:56:21 -07005771
5772 /**
5773 * Callback use to notify the callers of module registration that the operation
5774 * has finished.
5775 *
5776 * @hide
5777 */
Calin Juravle3d2af7f2017-04-19 19:56:21 -07005778 public static abstract class DexModuleRegisterCallback {
5779 public abstract void onDexModuleRegistered(String dexModulePath, boolean success,
5780 String message);
5781 }
5782
5783 /**
5784 * Register an application dex module with the package manager.
5785 * The package manager will keep track of the given module for future optimizations.
5786 *
5787 * Dex module optimizations will disable the classpath checking at runtime. The client bares
5788 * the responsibility to ensure that the static assumptions on classes in the optimized code
5789 * hold at runtime (e.g. there's no duplicate classes in the classpath).
5790 *
5791 * Note that the package manager already keeps track of dex modules loaded with
5792 * {@link dalvik.system.DexClassLoader} and {@link dalvik.system.PathClassLoader}.
5793 * This can be called for an eager registration.
5794 *
5795 * The call might take a while and the results will be posted on the main thread, using
5796 * the given callback.
5797 *
5798 * If the module is intended to be shared with other apps, make sure that the file
5799 * permissions allow for it.
5800 * If at registration time the permissions allow for others to read it, the module would
5801 * be marked as a shared module which might undergo a different optimization strategy.
5802 * (usually shared modules will generated larger optimizations artifacts,
5803 * taking more disk space).
5804 *
5805 * @param dexModulePath the absolute path of the dex module.
5806 * @param callback if not null, {@link DexModuleRegisterCallback#onDexModuleRegistered} will
5807 * be called once the registration finishes.
5808 *
5809 * @hide
5810 */
Calin Juravle3d2af7f2017-04-19 19:56:21 -07005811 public abstract void registerDexModule(String dexModulePath,
5812 @Nullable DexModuleRegisterCallback callback);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08005813}