PackageManager.java revision 7f1e49f2ff6b97a85dca041a72398d4a56149787
17ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke/* 27ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Copyright (C) 2006 The Android Open Source Project 37ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 47ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Licensed under the Apache License, Version 2.0 (the "License"); 57ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * you may not use this file except in compliance with the License. 67ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * You may obtain a copy of the License at 77ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 87ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * http://www.apache.org/licenses/LICENSE-2.0 97ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Unless required by applicable law or agreed to in writing, software 117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * distributed under the License is distributed on an "AS IS" BASIS, 127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * See the License for the specific language governing permissions and 147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * limitations under the License. 157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkepackage android.content.pm; 187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.Manifest; 207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.CheckResult; 217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.DrawableRes; 227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.IntDef; 237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.IntRange; 247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.NonNull; 257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.Nullable; 267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.RequiresPermission; 277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.SdkConstant; 287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.SdkConstant.SdkConstantType; 297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.StringRes; 307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.SystemApi; 317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.TestApi; 327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.UserIdInt; 337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.annotation.XmlRes; 347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.app.ActivityManager; 357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.app.PackageDeleteObserver; 367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.app.PackageInstallObserver; 377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.app.admin.DevicePolicyManager; 387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.app.usage.StorageStatsManager; 397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.content.ComponentName; 407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.content.Context; 417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.content.Intent; 427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.content.IntentFilter; 437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.content.IntentSender; 447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.content.pm.PackageParser.PackageParserException; 457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.content.pm.dex.ArtManager; 467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.content.res.Resources; 477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.content.res.XmlResourceParser; 487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.graphics.Rect; 497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.graphics.drawable.Drawable; 507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.net.wifi.WifiManager; 517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.os.Build; 527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.os.Bundle; 537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.os.Handler; 547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.os.RemoteException; 557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.os.UserHandle; 567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.os.UserManager; 577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.os.storage.StorageManager; 587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.os.storage.VolumeInfo; 597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.util.AndroidException; 607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport android.util.Log; 617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport com.android.internal.util.ArrayUtils; 63871f1080d0f7b7444458de40b67de7938c220922Matt Turner 647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport dalvik.system.VMRuntime; 650c0bbe77d0f92acf34c4582207b9def2e2fe308dJonathan Gray 660c0bbe77d0f92acf34c4582207b9def2e2fe308dJonathan Grayimport java.io.File; 670c0bbe77d0f92acf34c4582207b9def2e2fe308dJonathan Grayimport java.lang.annotation.Retention; 68d877c643bea7a40e37d13d8a967c06fd006d1622Matt Turnerimport java.lang.annotation.RetentionPolicy; 697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkeimport java.util.List; 707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke/** 727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Class for retrieving various kinds of information related to the application 737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * packages that are currently installed on the device. 747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * You can find this class through {@link Context#getPackageManager}. 764047263cb15e89d23cb145c74fb3f303904e8f14Ian Romanick */ 777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunkepublic abstract class PackageManager { 787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke private static final String TAG = "PackageManager"; 797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** {@hide} */ 817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final boolean APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE = true; 827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 84665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry * This exception is thrown when a given package, application, or component 857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * name cannot be found. 867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static class NameNotFoundException extends AndroidException { 887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public NameNotFoundException() { 897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public NameNotFoundException(String name) { 92665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry super(name); 937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Listener for changes in permissions granted to a UID. 98665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry * 997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 1007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 1017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 1027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public interface OnPermissionsChangedListener { 1037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 1047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Called when the permissions for a UID change. 1067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param uid The UID with a change. 1077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 1087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public void onPermissionsChanged(int uid); 1097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 110665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry 1117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * As a guiding principle: 1137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 1147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code GET_} flags are used to request additional data that may have been 1157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * elided to save wire space. 1167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 1177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code MATCH_} flags are used to include components or packages that 1187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * would have otherwise been omitted from a result set by current system 1197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * state. 1207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 1217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 1227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** @hide */ 1237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = { 1247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_ACTIVITIES, 1257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_CONFIGURATIONS, 126f30f48476fd2f441c7aaf001bd8456fe2d5432bfKenneth Graunke GET_GIDS, 127f30f48476fd2f441c7aaf001bd8456fe2d5432bfKenneth Graunke GET_INSTRUMENTATION, 128f30f48476fd2f441c7aaf001bd8456fe2d5432bfKenneth Graunke GET_INTENT_FILTERS, 129f30f48476fd2f441c7aaf001bd8456fe2d5432bfKenneth Graunke GET_META_DATA, 130f30f48476fd2f441c7aaf001bd8456fe2d5432bfKenneth Graunke GET_PERMISSIONS, 131f30f48476fd2f441c7aaf001bd8456fe2d5432bfKenneth Graunke GET_PROVIDERS, 1327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_RECEIVERS, 1337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_SERVICES, 1347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_SHARED_LIBRARY_FILES, 135665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry GET_SIGNATURES, 1367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_SIGNING_CERTIFICATES, 1377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_URI_PERMISSION_PATTERNS, 1387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_UNINSTALLED_PACKAGES, 1394a5cff24d77df6070656b501514d8c304fdbabdfKenneth Graunke MATCH_DISABLED_COMPONENTS, 1404a5cff24d77df6070656b501514d8c304fdbabdfKenneth Graunke MATCH_DISABLED_UNTIL_USED_COMPONENTS, 1414a5cff24d77df6070656b501514d8c304fdbabdfKenneth Graunke MATCH_SYSTEM_ONLY, 1424a5cff24d77df6070656b501514d8c304fdbabdfKenneth Graunke MATCH_FACTORY_ONLY, 1434a5cff24d77df6070656b501514d8c304fdbabdfKenneth Graunke MATCH_DEBUG_TRIAGED_MISSING, 1444a5cff24d77df6070656b501514d8c304fdbabdfKenneth Graunke MATCH_INSTANT, 145ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin GET_DISABLED_COMPONENTS, 146ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin GET_DISABLED_UNTIL_USED_COMPONENTS, 147ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin GET_UNINSTALLED_PACKAGES, 148ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin }) 149ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin @Retention(RetentionPolicy.SOURCE) 150ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin public @interface PackageInfoFlags {} 151ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin 1527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** @hide */ 1537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = { 1547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_META_DATA, 1557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_SHARED_LIBRARY_FILES, 1567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_UNINSTALLED_PACKAGES, 1577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_SYSTEM_ONLY, 1587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DEBUG_TRIAGED_MISSING, 1597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DISABLED_COMPONENTS, 1607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DISABLED_UNTIL_USED_COMPONENTS, 1617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_INSTANT, 1627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_STATIC_SHARED_LIBRARIES, 1637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_DISABLED_UNTIL_USED_COMPONENTS, 1647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_UNINSTALLED_PACKAGES, 1657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke }) 1667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @Retention(RetentionPolicy.SOURCE) 1677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public @interface ApplicationInfoFlags {} 1687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 1697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** @hide */ 1707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = { 1717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_META_DATA, 1727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_SHARED_LIBRARY_FILES, 1737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_ALL, 1747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DEBUG_TRIAGED_MISSING, 175665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry MATCH_DEFAULT_ONLY, 1767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DISABLED_COMPONENTS, 1777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DISABLED_UNTIL_USED_COMPONENTS, 1787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DIRECT_BOOT_AWARE, 1797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DIRECT_BOOT_UNAWARE, 1807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_SYSTEM_ONLY, 1817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_UNINSTALLED_PACKAGES, 1827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_INSTANT, 1837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_STATIC_SHARED_LIBRARIES, 1847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_DISABLED_COMPONENTS, 1857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_DISABLED_UNTIL_USED_COMPONENTS, 1867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_UNINSTALLED_PACKAGES, 187720670a615590e37a7e85852527a590778e6f273Ilia Mirkin }) 188720670a615590e37a7e85852527a590778e6f273Ilia Mirkin @Retention(RetentionPolicy.SOURCE) 189720670a615590e37a7e85852527a590778e6f273Ilia Mirkin public @interface ComponentInfoFlags {} 190720670a615590e37a7e85852527a590778e6f273Ilia Mirkin 191720670a615590e37a7e85852527a590778e6f273Ilia Mirkin /** @hide */ 192720670a615590e37a7e85852527a590778e6f273Ilia Mirkin @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = { 193720670a615590e37a7e85852527a590778e6f273Ilia Mirkin GET_META_DATA, 194720670a615590e37a7e85852527a590778e6f273Ilia Mirkin GET_RESOLVED_FILTER, 1957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_SHARED_LIBRARY_FILES, 1967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_ALL, 1977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DEBUG_TRIAGED_MISSING, 1987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DISABLED_COMPONENTS, 1997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DISABLED_UNTIL_USED_COMPONENTS, 2007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DEFAULT_ONLY, 2017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DIRECT_BOOT_AWARE, 2027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_DIRECT_BOOT_UNAWARE, 2037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_SYSTEM_ONLY, 2047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_UNINSTALLED_PACKAGES, 2057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke MATCH_INSTANT, 2067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_DISABLED_COMPONENTS, 2077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_DISABLED_UNTIL_USED_COMPONENTS, 2087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_UNINSTALLED_PACKAGES, 2097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke }) 2107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @Retention(RetentionPolicy.SOURCE) 2117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public @interface ResolveInfoFlags {} 2127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** @hide */ 2147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = { 2157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_META_DATA, 21656fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner }) 21756fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner @Retention(RetentionPolicy.SOURCE) 218ad14f44b3e89cf4d05d29f2aaf9f64fe0e42af3bIan Romanick public @interface PermissionInfoFlags {} 2199abbc4971264233a4b4f9ec6ddb88d0dc4c9a25eIlia Mirkin 2200beaf1cd9a9a882b4f896dc1865622d72488ff31Brian Paul /** @hide */ 22156fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = { 22256fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner GET_META_DATA, 22356fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner }) 2247988b4804f07b5cdb01cdca7dcbe75be30f1df9eMatt Turner @Retention(RetentionPolicy.SOURCE) 2257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public @interface PermissionGroupInfoFlags {} 2267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2278d3aa5926b73c67c7dbd4477b7177aaa00c533e5Matt Turner /** @hide */ 2287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = { 2297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke GET_META_DATA, 2307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke }) 2317988b4804f07b5cdb01cdca7dcbe75be30f1df9eMatt Turner @Retention(RetentionPolicy.SOURCE) 2327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public @interface InstrumentationInfoFlags {} 2337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2347988b4804f07b5cdb01cdca7dcbe75be30f1df9eMatt Turner /** 2357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInfo} flag: return information about 2367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * activities in the package in {@link PackageInfo#activities}. 2377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 2387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int GET_ACTIVITIES = 0x00000001; 2397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInfo} flag: return information about 2427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * intent receivers in the package in 2437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInfo#receivers}. 2447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 245e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin public static final int GET_RECEIVERS = 0x00000002; 246e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin 247e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin /** 248e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * {@link PackageInfo} flag: return information about 249e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * services in the package in {@link PackageInfo#services}. 250e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin */ 251e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin public static final int GET_SERVICES = 0x00000004; 252e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin 253e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin /** 254dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick * {@link PackageInfo} flag: return information about 255dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick * content providers in the package in 256dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick * {@link PackageInfo#providers}. 257dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick */ 258d49a231c330df1ed596137bdd2a3d69fcc99d48eIlia Mirkin public static final int GET_PROVIDERS = 0x00000008; 259dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick 260dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick /** 261dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick * {@link PackageInfo} flag: return information about 262dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick * instrumentation in the package in 263e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * {@link PackageInfo#instrumentation}. 264e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin */ 265e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin public static final int GET_INSTRUMENTATION = 0x00000010; 266e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin 267e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin /** 268e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * {@link PackageInfo} flag: return information about the 269cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * intent filters supported by the activity. 270cea605d373673878f6911906dce78b3c9bdce622Ian Romanick */ 271cea605d373673878f6911906dce78b3c9bdce622Ian Romanick public static final int GET_INTENT_FILTERS = 0x00000020; 272cea605d373673878f6911906dce78b3c9bdce622Ian Romanick 273cea605d373673878f6911906dce78b3c9bdce622Ian Romanick /** 274cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * {@link PackageInfo} flag: return information about the 2750e1655c6bdf2d8efa5e2030ea36e59c098f82540Ian Romanick * signatures included in the package. 2767988b4804f07b5cdb01cdca7dcbe75be30f1df9eMatt Turner * 2777988b4804f07b5cdb01cdca7dcbe75be30f1df9eMatt Turner * @deprecated use {@code GET_SIGNING_CERTIFICATES} instead 2780e1655c6bdf2d8efa5e2030ea36e59c098f82540Ian Romanick */ 2790e1655c6bdf2d8efa5e2030ea36e59c098f82540Ian Romanick @Deprecated 2807988b4804f07b5cdb01cdca7dcbe75be30f1df9eMatt Turner public static final int GET_SIGNATURES = 0x00000040; 2817988b4804f07b5cdb01cdca7dcbe75be30f1df9eMatt Turner 2827988b4804f07b5cdb01cdca7dcbe75be30f1df9eMatt Turner /** 28365b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * {@link ResolveInfo} flag: return the IntentFilter that 28465b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * was matched for a particular ResolveInfo in 28565b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * {@link ResolveInfo#filter}. 28665b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick */ 28765b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick public static final int GET_RESOLVED_FILTER = 0x00000040; 28865b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick 28965b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick /** 2903002296cb68ebc9705b29e024e5fc67d5565ed46Ilia Mirkin * {@link ComponentInfo} flag: return the {@link ComponentInfo#metaData} 291b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * data {@link android.os.Bundle}s that are associated with a component. 292b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * This applies for any API returning a ComponentInfo subclass. 2933002296cb68ebc9705b29e024e5fc67d5565ed46Ilia Mirkin */ 2943002296cb68ebc9705b29e024e5fc67d5565ed46Ilia Mirkin public static final int GET_META_DATA = 0x00000080; 2953002296cb68ebc9705b29e024e5fc67d5565ed46Ilia Mirkin 296b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes /** 297b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * {@link PackageInfo} flag: return the 298b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * {@link PackageInfo#gids group ids} that are associated with an 299b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * application. 30071ffac691b8423d823a4637a0542ccb4005cc996Paul Berry * This applies for any API returning a PackageInfo class, either 3017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * directly or nested inside of another. 30271ffac691b8423d823a4637a0542ccb4005cc996Paul Berry */ 3037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int GET_GIDS = 0x00000100; 3047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 3057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 3067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @deprecated replaced with {@link #MATCH_DISABLED_COMPONENTS} 3077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 3087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @Deprecated 309665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry public static final int GET_DISABLED_COMPONENTS = 0x00000200; 3107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 3117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 3127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInfo} flag: include disabled components in the returned info. 3137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 3147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int MATCH_DISABLED_COMPONENTS = 0x00000200; 3157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 3167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 3177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link ApplicationInfo} flag: return the 3187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link ApplicationInfo#sharedLibraryFiles paths to the shared libraries} 3197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * that are associated with an application. 3207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * This applies for any API returning an ApplicationInfo class, either 3217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * directly or nested inside of another. 32289759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli */ 32389759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli public static final int GET_SHARED_LIBRARY_FILES = 0x00000400; 32489759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli 32589759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli /** 32689759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli * {@link ProviderInfo} flag: return the 32789759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli * {@link ProviderInfo#uriPermissionPatterns URI permission patterns} 32889759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli * that are associated with a content provider. 329c2c64fd26999cedf4b63c754145f7258517f5bceTapani Pälli * This applies for any API returning a ProviderInfo class, either 330c2c64fd26999cedf4b63c754145f7258517f5bceTapani Pälli * directly or nested inside of another. 331c2c64fd26999cedf4b63c754145f7258517f5bceTapani Pälli */ 3327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int GET_URI_PERMISSION_PATTERNS = 0x00000800; 3337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 3347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInfo} flag: return information about 33506c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * permissions in the package in 33606c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * {@link PackageInfo#permissions}. 33706c56f443aa1850b2651df3636c42a8740cff847Ian Romanick */ 33806c56f443aa1850b2651df3636c42a8740cff847Ian Romanick public static final int GET_PERMISSIONS = 0x00001000; 33906c56f443aa1850b2651df3636c42a8740cff847Ian Romanick 34006c56f443aa1850b2651df3636c42a8740cff847Ian Romanick /** 34106c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * @deprecated replaced with {@link #MATCH_UNINSTALLED_PACKAGES} 34206c56f443aa1850b2651df3636c42a8740cff847Ian Romanick */ 34306c56f443aa1850b2651df3636c42a8740cff847Ian Romanick @Deprecated 34406c56f443aa1850b2651df3636c42a8740cff847Ian Romanick public static final int GET_UNINSTALLED_PACKAGES = 0x00002000; 34506c56f443aa1850b2651df3636c42a8740cff847Ian Romanick 34606c56f443aa1850b2651df3636c42a8740cff847Ian Romanick /** 34706c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * Flag parameter to retrieve some information about all applications (even 34806c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * uninstalled ones) which have data directories. This state could have 3497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * resulted if applications have been deleted with flag 3507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code DONT_DELETE_DATA} with a possibility of being replaced or 351665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry * reinstalled in future. 352ef5bad09c4623892a358046b7ece4dcb273ad700Ian Romanick * <p> 3537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Note: this flag may cause less information about currently installed 3547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications to be returned. 3557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 3567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int MATCH_UNINSTALLED_PACKAGES = 0x00002000; 3577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 358ef5bad09c4623892a358046b7ece4dcb273ad700Ian Romanick /** 3597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInfo} flag: return information about 3607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * hardware preferences in 3617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInfo#configPreferences PackageInfo.configPreferences}, 3627a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * and requested features in {@link PackageInfo#reqFeatures} and 3637a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * {@link PackageInfo#featureGroups}. 3647a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes */ 3657a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes public static final int GET_CONFIGURATIONS = 0x00004000; 3667a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes 3677a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes /** 3687a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * @deprecated replaced with {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS}. 3697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 3707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @Deprecated 371665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 0x00008000; 3727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 3737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 3747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInfo} flag: include disabled components which are in 37518002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * that state only because of {@link #COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED} 376dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick * in the returned info. Note that if you set this flag, applications 37718002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * that are in this disabled state will be reported as enabled. 378dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick */ 3797335bc7526478637db168128ad989539c8c0211eChris Forbes public static final int MATCH_DISABLED_UNTIL_USED_COMPONENTS = 0x00008000; 380dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick 381d49a231c330df1ed596137bdd2a3d69fcc99d48eIlia Mirkin /** 382dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick * Resolution and querying flag: if set, only filters that support the 38318002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * {@link android.content.Intent#CATEGORY_DEFAULT} will be considered for 38418002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * matching. This is a synonym for including the CATEGORY_DEFAULT in your 385cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * supplied Intent. 386cea605d373673878f6911906dce78b3c9bdce622Ian Romanick */ 387cea605d373673878f6911906dce78b3c9bdce622Ian Romanick public static final int MATCH_DEFAULT_ONLY = 0x00010000; 388cea605d373673878f6911906dce78b3c9bdce622Ian Romanick 389cea605d373673878f6911906dce78b3c9bdce622Ian Romanick /** 390cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * Querying flag: if set and if the platform is doing any filtering of the 391cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * results, then the filtering will not happen. This is a synonym for saying 392cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * that all results should be returned. 3934fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * <p> 3944fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * <em>This flag should be used with extreme care.</em> 3954fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes */ 3964fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes public static final int MATCH_ALL = 0x00020000; 397cea605d373673878f6911906dce78b3c9bdce622Ian Romanick 3984fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes /** 399e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * Querying flag: match components which are direct boot <em>unaware</em> in 4004fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * the returned info, regardless of the current user state. 401e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * <p> 402e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * When neither {@link #MATCH_DIRECT_BOOT_AWARE} nor 403cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * {@link #MATCH_DIRECT_BOOT_UNAWARE} are specified, the default behavior is 404cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * to match only runnable components based on the user state. For example, 4054fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * when a user is started but credentials have not been presented yet, the 4064fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * user is running "locked" and only {@link #MATCH_DIRECT_BOOT_AWARE} 4077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * components are returned. Once the user credentials have been presented, 4087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the user is running "unlocked" and both {@link #MATCH_DIRECT_BOOT_AWARE} 4097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * and {@link #MATCH_DIRECT_BOOT_UNAWARE} components are returned. 4107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 411665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry * @see UserManager#isUserUnlocked() 4121bd623316913fdefa3749809420db27291ef9f0eKenneth Graunke */ 4131bd623316913fdefa3749809420db27291ef9f0eKenneth Graunke public static final int MATCH_DIRECT_BOOT_UNAWARE = 0x00040000; 4147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 4157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 4167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Querying flag: match components which are direct boot <em>aware</em> in 417f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * the returned info, regardless of the current user state. 418f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * <p> 419f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * When neither {@link #MATCH_DIRECT_BOOT_AWARE} nor 420f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * {@link #MATCH_DIRECT_BOOT_UNAWARE} are specified, the default behavior is 421f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * to match only runnable components based on the user state. For example, 422f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * when a user is started but credentials have not been presented yet, the 423f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * user is running "locked" and only {@link #MATCH_DIRECT_BOOT_AWARE} 424f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * components are returned. Once the user credentials have been presented, 4257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the user is running "unlocked" and both {@link #MATCH_DIRECT_BOOT_AWARE} 4267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * and {@link #MATCH_DIRECT_BOOT_UNAWARE} components are returned. 4277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 4287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see UserManager#isUserUnlocked() 4297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 4307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int MATCH_DIRECT_BOOT_AWARE = 0x00080000; 4317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 4327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 4337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Querying flag: include only components from applications that are marked 4347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * with {@link ApplicationInfo#FLAG_SYSTEM}. 4357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 4367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int MATCH_SYSTEM_ONLY = 0x00100000; 4377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 4387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 4397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Internal {@link PackageInfo} flag: include only components on the system image. 4407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * This will not return information on any unbundled update to system components. 4417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 4427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 4437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 4447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int MATCH_FACTORY_ONLY = 0x00200000; 445665b8d7b6d8eae03c9dc0ef1a744fe59d9cc6cb6Paul Berry 4467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 4477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Allows querying of packages installed for any user, not just the specific one. This flag 4487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is only meant for use by apps that have INTERACT_ACROSS_USERS permission. 4497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 4507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 4517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 4527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int MATCH_ANY_USER = 0x00400000; 4537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 454bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez /** 455bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * Combination of MATCH_ANY_USER and MATCH_UNINSTALLED_PACKAGES to mean any known 456bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * package. 457bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * @hide 4586c9c317cafdaefdec01389778fd96300022c37abIan Romanick */ 459bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez public static final int MATCH_KNOWN_PACKAGES = MATCH_UNINSTALLED_PACKAGES | MATCH_ANY_USER; 460bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez 461cf70d2a7c0b8752001b7ed3a533aedb8c45759beMaxence Le Doré /** 462075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * Internal {@link PackageInfo} flag: include components that are part of an 463075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * instant app. By default, instant app components are not matched. 464075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @hide 465075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 466075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin @SystemApi 467075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin public static final int MATCH_INSTANT = 0x00800000; 468f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov 469f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov /** 470f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * Internal {@link PackageInfo} flag: include only components that are exposed to 471f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * instant apps. Matched components may have been either explicitly or implicitly 472f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * exposed. 473f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * @hide 474ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga */ 475ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga public static final int MATCH_VISIBLE_TO_INSTANT_APP_ONLY = 0x01000000; 476ccbb52ac1117aa99144785bc032dd459f24b8ba1Samuel Iglesias Gonsálvez 477ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga /** 478ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * Internal {@link PackageInfo} flag: include only components that have been 479ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * explicitly exposed to instant apps. 480cf70d2a7c0b8752001b7ed3a533aedb8c45759beMaxence Le Doré * @hide 481cf70d2a7c0b8752001b7ed3a533aedb8c45759beMaxence Le Doré */ 482cf70d2a7c0b8752001b7ed3a533aedb8c45759beMaxence Le Doré public static final int MATCH_EXPLICITLY_VISIBLE_ONLY = 0x02000000; 483cf70d2a7c0b8752001b7ed3a533aedb8c45759beMaxence Le Doré 484cf70d2a7c0b8752001b7ed3a533aedb8c45759beMaxence Le Doré /** 485e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Internal {@link PackageInfo} flag: include static shared libraries. 486e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Apps that depend on static shared libs can always access the version 487e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * of the lib they depend on. System/shell/root can access all shared 4886da187f80560b44b59551757c1322e921d8ca025Francisco Jerez * libs regardless of dependency but need to explicitly ask for them 489e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * via this flag. 490e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @hide 491e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 492e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga public static final int MATCH_STATIC_SHARED_LIBRARIES = 0x04000000; 49376a09c87c14f65d8ad8bd805ef03101f4455a24fFrancisco Jerez 49476a09c87c14f65d8ad8bd805ef03101f4455a24fFrancisco Jerez /** 49581c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * {@link PackageInfo} flag: return the signing certificates associated with 49681c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * this package. Each entry is a signing certificate that the package 49781c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * has proven it is authorized to use, usually a past signing certificate from 49881c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * which it has rotated. 49981c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez */ 50081c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez public static final int GET_SIGNING_CERTIFICATES = 0x08000000; 50181c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez 50281c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez /** 50381c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * Internal flag used to indicate that a system component has done their 5049abbc4971264233a4b4f9ec6ddb88d0dc4c9a25eIlia Mirkin * homework and verified that they correctly handle packages and components 50581c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * that come and go over time. In particular: 50676a09c87c14f65d8ad8bd805ef03101f4455a24fFrancisco Jerez * <ul> 50776a09c87c14f65d8ad8bd805ef03101f4455a24fFrancisco Jerez * <li>Apps installed on external storage, which will appear to be 50876a09c87c14f65d8ad8bd805ef03101f4455a24fFrancisco Jerez * uninstalled while the the device is ejected. 50958a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * <li>Apps with encryption unaware components, which will appear to not 51058a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * exist while the device is locked. 51158a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * </ul> 51258a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * 51358a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * @see #MATCH_UNINSTALLED_PACKAGES 51458a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * @see #MATCH_DIRECT_BOOT_AWARE 51558a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * @see #MATCH_DIRECT_BOOT_UNAWARE 5160c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * @hide 5170c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin */ 5180c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin public static final int MATCH_DEBUG_TRIAGED_MISSING = 0x10000000; 5190c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin 5200c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin /** 5210c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * Flag for {@link #addCrossProfileIntentFilter}: if this flag is set: when 5220c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * resolving an intent that matches the {@code CrossProfileIntentFilter}, 523e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * the current profile will be skipped. Only activities in the target user 524e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * can respond to the intent. 525e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * 526e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * @hide 527e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga */ 528e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int SKIP_CURRENT_PROFILE = 0x00000002; 529e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 530e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 531e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Flag for {@link #addCrossProfileIntentFilter}: if this flag is set: 532e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * activities in the other profiles can respond to the intent only if no activity with 533e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * non-negative priority in current profile can respond to the intent. 53486855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes * @hide 53591f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen */ 53691f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen public static final int ONLY_IF_NO_MATCH_FOUND = 0x00000004; 53791f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen 53891f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen /** @hide */ 53991f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen @IntDef(prefix = { "PERMISSION_" }, value = { 54091f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen PERMISSION_GRANTED, 54106128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio PERMISSION_DENIED 54206128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio }) 54306128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio @Retention(RetentionPolicy.SOURCE) 54406128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio public @interface PermissionResult {} 54506128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio 54606128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio /** 547f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * Permission check result: this is returned by {@link #checkPermission} 548f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * if the permission has been granted to the given package. 549f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen */ 550f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen public static final int PERMISSION_GRANTED = 0; 551f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen 552f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen /** 55386855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes * Permission check result: this is returned by {@link #checkPermission} 55486855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes * if the permission has not been granted to the given package. 55591f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen */ 556799afadf51ad1ff0775a1bf7b4f3954a8d368b09Marek Olšák public static final int PERMISSION_DENIED = -1; 55786855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes 55886855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes /** @hide */ 5595189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin @IntDef(prefix = { "SIGNATURE_" }, value = { 5605189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin SIGNATURE_MATCH, 5615189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin SIGNATURE_NEITHER_SIGNED, 5625189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin SIGNATURE_FIRST_NOT_SIGNED, 5635189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin SIGNATURE_SECOND_NOT_SIGNED, 5645189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin SIGNATURE_NO_MATCH, 5657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke SIGNATURE_UNKNOWN_PACKAGE, 5667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke }) 5677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @Retention(RetentionPolicy.SOURCE) 5687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public @interface SignatureResult {} 56910ef949424809d51c627008bb2feab5a067f8e08Eric Anholt 57010ef949424809d51c627008bb2feab5a067f8e08Eric Anholt /** 5717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Signature check result: this is returned by {@link #checkSignatures} 5727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if all signatures on the two packages match. 5737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 5747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int SIGNATURE_MATCH = 0; 5757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 5767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 5777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Signature check result: this is returned by {@link #checkSignatures} 5787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if neither of the two packages is signed. 5797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 5807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int SIGNATURE_NEITHER_SIGNED = 1; 5817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 5827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 5837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Signature check result: this is returned by {@link #checkSignatures} 5847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the first package is not signed but the second is. 5857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 5867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int SIGNATURE_FIRST_NOT_SIGNED = -1; 5877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 5887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 5897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Signature check result: this is returned by {@link #checkSignatures} 5907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the second package is not signed but the first is. 5917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 5927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int SIGNATURE_SECOND_NOT_SIGNED = -2; 5937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 5947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 5957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Signature check result: this is returned by {@link #checkSignatures} 5967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if not all signatures on both packages match. 5971b557b1606ffcf05d2612d66226306e876b6b937Kenneth Graunke */ 5981b557b1606ffcf05d2612d66226306e876b6b937Kenneth Graunke public static final int SIGNATURE_NO_MATCH = -3; 5991b557b1606ffcf05d2612d66226306e876b6b937Kenneth Graunke 6007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 60195629223761e076323faab93f72c955e61a38a75Francisco Jerez * Signature check result: this is returned by {@link #checkSignatures} 6027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if either of the packages are not valid. 6037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 6047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int SIGNATURE_UNKNOWN_PACKAGE = -4; 6057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 6067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** @hide */ 6077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @IntDef(prefix = { "COMPONENT_ENABLED_STATE_" }, value = { 6087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke COMPONENT_ENABLED_STATE_DEFAULT, 6097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke COMPONENT_ENABLED_STATE_ENABLED, 6107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke COMPONENT_ENABLED_STATE_DISABLED, 6117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke COMPONENT_ENABLED_STATE_DISABLED_USER, 6127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 6135561251b58c976a70125bb07dc1c6cc2bd2541f4Matt Turner }) 614249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner @Retention(RetentionPolicy.SOURCE) 6155561251b58c976a70125bb07dc1c6cc2bd2541f4Matt Turner public @interface EnabledState {} 6165561251b58c976a70125bb07dc1c6cc2bd2541f4Matt Turner 617e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 6187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag for {@link #setApplicationEnabledSetting(String, int, int)} and 6197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #setComponentEnabledSetting(ComponentName, int, int)}: This 6207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * component or application is in its default enabled state (as specified in 6217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * its manifest). 6227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 6232795fbcae302cd8821b23821ebf8a2b256ff10d5Kenneth Graunke * Explicitly setting the component state to this value restores it's 624326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * enabled state to whatever is set in the manifest. 6257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 62695629223761e076323faab93f72c955e61a38a75Francisco Jerez public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0; 62795629223761e076323faab93f72c955e61a38a75Francisco Jerez 62895629223761e076323faab93f72c955e61a38a75Francisco Jerez /** 62995629223761e076323faab93f72c955e61a38a75Francisco Jerez * Flag for {@link #setApplicationEnabledSetting(String, int, int)} 63095629223761e076323faab93f72c955e61a38a75Francisco Jerez * and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This 63195629223761e076323faab93f72c955e61a38a75Francisco Jerez * component or application has been explictily enabled, regardless of 63295629223761e076323faab93f72c955e61a38a75Francisco Jerez * what it has specified in its manifest. 63395629223761e076323faab93f72c955e61a38a75Francisco Jerez */ 6347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; 6357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 6367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 63758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * Flag for {@link #setApplicationEnabledSetting(String, int, int)} 63858a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This 63958a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * component or application has been explicitly disabled, regardless of 64058a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * what it has specified in its manifest. 641e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 642e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public static final int COMPONENT_ENABLED_STATE_DISABLED = 2; 643e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 644e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 645e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Flag for {@link #setApplicationEnabledSetting(String, int, int)} only: The 646e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * user has explicitly disabled the application, regardless of what it has 64758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * specified in its manifest. Because this is due to the user's request, 648e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * they may re-enable it if desired through the appropriate system UI. This 6495854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * option currently <strong>cannot</strong> be used with 6505854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * {@link #setComponentEnabledSetting(ComponentName, int, int)}. 651e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 652e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3; 653e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 654e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 655e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Flag for {@link #setApplicationEnabledSetting(String, int, int)} only: This 656e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * application should be considered, until the point where the user actually 657e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * wants to use it. This means that it will not normally show up to the user 658e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * (such as in the launcher), but various parts of the user interface can 659e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * use {@link #GET_DISABLED_UNTIL_USED_COMPONENTS} to still see it and allow 660e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * the user to select it (as for example an IME, device admin, etc). Such code, 6617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * once the user has selected the app, should at that point also make it enabled. 6627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * This option currently <strong>can not</strong> be used with 6637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #setComponentEnabledSetting(ComponentName, int, int)}. 6647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 6657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4; 6667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 6677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** @hide */ 6687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @IntDef(flag = true, prefix = { "INSTALL_" }, value = { 6697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_FORWARD_LOCK, 6707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_REPLACE_EXISTING, 6717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_ALLOW_TEST, 6727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_EXTERNAL, 6739e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner INSTALL_INTERNAL, 6749e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner INSTALL_FROM_ADB, 6757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_ALL_USERS, 6767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_ALLOW_DOWNGRADE, 6777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_GRANT_RUNTIME_PERMISSIONS, 6787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_FORCE_VOLUME_UUID, 6797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_FORCE_PERMISSION_PROMPT, 6807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_INSTANT_APP, 6817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_DONT_KILL_APP, 6827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_FORCE_SDK, 6837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_FULL_APP, 6847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke INSTALL_ALLOCATE_AGGRESSIVE, 6857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke }) 6867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @Retention(RetentionPolicy.SOURCE) 6877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public @interface InstallFlags {} 6887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 6897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 6907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #installPackage} to indicate that this package 6917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * should be installed as forward locked, i.e. only the app itself should 6927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * have access to its code and non-resource assets. 6937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 6947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @deprecated new installs into ASEC containers are no longer supported. 6957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 6967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 6977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @Deprecated 6987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FORWARD_LOCK = 0x00000001; 6997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 7007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 7017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #installPackage} to indicate that you want to 7027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * replace an already installed package, if one exists. 7037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 7047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 705e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 706e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_REPLACE_EXISTING = 0x00000002; 707e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 708e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 709e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Flag parameter for {@link #installPackage} to indicate that you want to 710e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * allow test packages (those that have set android:testOnly in their 711e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * manifest) to be installed. 712e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 713e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 714e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_ALLOW_TEST = 0x00000004; 71534c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin 716e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 7177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #installPackage} to indicate that this package 7187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * must be installed to an ASEC on a {@link VolumeInfo#TYPE_PUBLIC}. 7197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 720e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @deprecated new installs into ASEC containers are no longer supported; 72156fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * use adoptable storage instead. 72256fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * @hide 72356fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner */ 724e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @Deprecated 725e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_EXTERNAL = 0x00000008; 726e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 727e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 7287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #installPackage} to indicate that this package 7297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * must be installed to internal storage. 7307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 7317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 7327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 7337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_INTERNAL = 0x00000010; 7347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 7357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 7367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #installPackage} to indicate that this install 7377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * was initiated via ADB. 7387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 7397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 7407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 7417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FROM_ADB = 0x00000020; 742e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 743e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 744e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Flag parameter for {@link #installPackage} to indicate that this install 745e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * should immediately be visible to all users. 746e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 747e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 748e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 749e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_ALL_USERS = 0x00000040; 7507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 751e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 752e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Flag parameter for {@link #installPackage} to indicate that it is okay 753e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * to install an update to an app where the newly installed app has a lower 754e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * version code than the currently installed app. This is permitted only if 755e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * the currently installed app is marked debuggable. 756e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 757e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 758e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 759e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_ALLOW_DOWNGRADE = 0x00000080; 760e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 761e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 762e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Flag parameter for {@link #installPackage} to indicate that all runtime 7637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * permissions should be granted to the package. If {@link #INSTALL_ALL_USERS} 7647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is set the runtime permissions will be granted to all users, otherwise 7657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * only to the owner. 7667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 7677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 7687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 7697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_GRANT_RUNTIME_PERMISSIONS = 0x00000100; 7707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 7717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** {@hide} */ 7724a6a47ed056f37544083048287fec96c88e0e386Ilia Mirkin public static final int INSTALL_FORCE_VOLUME_UUID = 0x00000200; 7730c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin 7747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 7757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #installPackage} to indicate that we always want to force 7767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the prompt for permission approval. This overrides any special behaviour for internal 7777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * components. 77888ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * 7794fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * @hide 780a9de744a26bc575a1a269e133c550f813c95904fChris Forbes */ 7817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FORCE_PERMISSION_PROMPT = 0x00000400; 7827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 7837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 7847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #installPackage} to indicate that this package is 7857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * to be installed as a lightweight "ephemeral" app. 7867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 7877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 7887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 7897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_INSTANT_APP = 0x00000800; 7907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 7917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 7927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #installPackage} to indicate that this package contains 7937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * a feature split to an existing application and the existing application should not 7947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * be killed during the installation process. 7957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 7967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 797e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga */ 798e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga public static final int INSTALL_DONT_KILL_APP = 0x00001000; 799e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga 800e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga /** 80186855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes * Flag parameter for {@link #installPackage} to indicate that this package is an 8027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * upgrade to a package that refers to the SDK via release letter or is targeting an SDK via 803ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * release letter that the current build does not support. 8047a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * 80506c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * @hide 8067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 8077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FORCE_SDK = 0x00002000; 8087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 809f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin /** 810f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * Flag parameter for {@link #installPackage} to indicate that this package is 811f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * to be installed as a heavy weight app. This is fundamentally the opposite of 812f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * {@link #INSTALL_INSTANT_APP}. 813f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * 814f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * @hide 8157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 8167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FULL_APP = 0x00004000; 8177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 8187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 8197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #installPackage} to indicate that this package 8207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is critical to system health or security, meaning the system should use 8217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link StorageManager#FLAG_ALLOCATE_AGGRESSIVE} internally. 8227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 8237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 8247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 8257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_ALLOCATE_AGGRESSIVE = 0x00008000; 826e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 827b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner /** 828d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * Flag parameter for {@link #installPackage} to indicate that this package 829e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * is a virtual preload. 8306c125973f31addf903921647e8244abccb944e1aMatt Turner * 8316f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * @hide 83206e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner */ 833b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes public static final int INSTALL_VIRTUAL_PRELOAD = 0x00010000; 834b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes 835b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes /** @hide */ 836bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez @IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = { 8375854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick DONT_KILL_APP 8385854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick }) 8395854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick @Retention(RetentionPolicy.SOURCE) 8405854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick public @interface EnabledFlags {} 8415854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 8425854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 8432cacebaad3da88853e9b0d19522d24e11a7f4f91Iago Toral Quiroga * Flag parameter for 8442cacebaad3da88853e9b0d19522d24e11a7f4f91Iago Toral Quiroga * {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate 845075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * that you don't want to kill the app containing the component. Be careful when you set this 846075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * since changing component states can make the containing application's behavior unpredictable. 847075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 848075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin public static final int DONT_KILL_APP = 0x00000001; 849bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez 850a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen /** @hide */ 8515854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick @IntDef(prefix = { "INSTALL_REASON_" }, value = { 8525854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick INSTALL_REASON_UNKNOWN, 853a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen INSTALL_REASON_POLICY, 854a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen INSTALL_REASON_DEVICE_RESTORE, 855a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen INSTALL_REASON_DEVICE_SETUP, 856a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen INSTALL_REASON_USER 8575854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick }) 8585854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick @Retention(RetentionPolicy.SOURCE) 859a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen public @interface InstallReason {} 860a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen 861a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen /** 862ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * Code indicating that the reason for installing this package is unknown. 8636709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke */ 8646709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke public static final int INSTALL_REASON_UNKNOWN = 0; 8656709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke 866eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré /** 867e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Code indicating that this package was installed due to enterprise policy. 868e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 869e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public static final int INSTALL_REASON_POLICY = 1; 87058a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres 87158a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres /** 87258a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * Code indicating that this package was installed as part of restoring from another device. 87337c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin */ 87437c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin public static final int INSTALL_REASON_DEVICE_RESTORE = 2; 87537c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin 87658a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres /** 87758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * Code indicating that this package was installed as part of device setup. 878e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 879e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public static final int INSTALL_REASON_DEVICE_SETUP = 3; 8805854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 8815854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 882e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Code indicating that the package installation was initiated by the user. 883e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 8845854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick public static final int INSTALL_REASON_USER = 4; 8855854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 88691f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen /** 88791f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 888e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * on success. 889f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * 890f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * @hide 891f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov */ 892f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov @SystemApi 893f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov public static final int INSTALL_SUCCEEDED = 1; 8945189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin 8955189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin /** 8967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 8977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the package is already installed. 8987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 8997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 9007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 9017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 9027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_ALREADY_EXISTS = -1; 9037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 9047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 90581c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 90681c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * if the package archive file is invalid. 90781c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * 90881c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * @hide 90981c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez */ 91081c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez @SystemApi 91181c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez public static final int INSTALL_FAILED_INVALID_APK = -2; 91281c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez 91381c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez /** 91481c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 91581c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * if the URI passed in is invalid. 91681c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * 91710ef949424809d51c627008bb2feab5a067f8e08Eric Anholt * @hide 91810ef949424809d51c627008bb2feab5a067f8e08Eric Anholt */ 9197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 9207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_INVALID_URI = -3; 9217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 9227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 9237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 924f7a5c714b304b85fde606a716d47581384cdcf75Kenneth Graunke * if the package manager service found that the device didn't have enough storage space to 9257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * install the app. 9267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 9277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 9287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 9297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 9307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4; 9317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 9327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 9337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 9347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if a package is already installed with the same name. 9357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 9367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 9377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 9387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 9397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5; 9407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 9417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 9427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 9437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the requested shared user does not exist. 9447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 9455b331f6fcbf226f18e0c517ffdce30a39bb92982Kenneth Graunke * @hide 9467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 9477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 9487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_NO_SHARED_USER = -6; 9497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 9507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 95121129d4de300f1a934d02e30347c465520afef9eKenneth Graunke * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 95221129d4de300f1a934d02e30347c465520afef9eKenneth Graunke * if a previously installed package of the same name has a different signature than the new 9537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package (and the old package's data was not removed). 9547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 9557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 9567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 9577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 9587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7; 9597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 9607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 9617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 9627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the new package is requested a shared user which is already installed on the device and 9637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * does not have matching signature. 9647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 9657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 9667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 9677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 96895629223761e076323faab93f72c955e61a38a75Francisco Jerez public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8; 9697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 9707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 9717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 9727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the new package uses a shared library that is not available. 9737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 9747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 9757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 9767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 977d2d90d66d81d5f147b03628e1913bf7f9d2a0563Kenneth Graunke public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9; 978d2d90d66d81d5f147b03628e1913bf7f9d2a0563Kenneth Graunke 979d2d90d66d81d5f147b03628e1913bf7f9d2a0563Kenneth Graunke /** 9807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 9817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the new package uses a shared library that is not available. 9827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 9837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 9847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 9857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 9867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10; 9877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 9887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 989fd2b3da5c8cdbc5b00436185a3c03dfb7b7bd853Timothy Arceri * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 9907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the new package failed while optimizing and validating its dex files, either because there 9917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * was not enough storage or the validation failed. 9927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 9937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 9947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 9957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 99695629223761e076323faab93f72c955e61a38a75Francisco Jerez public static final int INSTALL_FAILED_DEXOPT = -11; 99795629223761e076323faab93f72c955e61a38a75Francisco Jerez 99895629223761e076323faab93f72c955e61a38a75Francisco Jerez /** 99995629223761e076323faab93f72c955e61a38a75Francisco Jerez * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 100095629223761e076323faab93f72c955e61a38a75Francisco Jerez * if the new package failed because the current SDK version is older than that required by the 100195629223761e076323faab93f72c955e61a38a75Francisco Jerez * package. 1002bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * 10035854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @hide 10045854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick */ 1005bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez @SystemApi 1006bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez public static final int INSTALL_FAILED_OLDER_SDK = -12; 10075854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 10085854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 1009bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 1010bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * if the new package failed because it contains a content provider with the same authority as a 10115854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * provider already installed in the system. 10125854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 1013bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * @hide 1014e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 1015a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 1016f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13; 10175854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 10185854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 1019f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 10205854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * if the new package failed because the current SDK version is newer than that required by the 10215854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * package. 10225854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 10235854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @hide 1024075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 1025a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 1026f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen public static final int INSTALL_FAILED_NEWER_SDK = -14; 10275854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 10285854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 1029f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 10305854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * if the new package failed because it has specified that it is a test-only package and the 10315854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * caller has not supplied the {@link #INSTALL_ALLOW_TEST} flag. 10325854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 10335854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @hide 1034a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen */ 1035a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 1036f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen public static final int INSTALL_FAILED_TEST_ONLY = -15; 10375854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 10385854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 1039f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 10405854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * if the package being installed contains native code, but none that is compatible with the 10415854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * device's CPU_ABI. 10425854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 10435854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @hide 1044a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen */ 1045a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 1046f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16; 10475854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 10485854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 1049f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 10505854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * if the new package uses a feature that is not available. 10515854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 10525854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @hide 10535854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick */ 1054a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 1055a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen public static final int INSTALL_FAILED_MISSING_FEATURE = -17; 1056f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen 10575854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick // ------ Errors related to sdcard 10585854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 1059f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * Installation return code: this is passed in the 10605854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if a secure container mount point couldn't be 10615854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * accessed on external media. 10625854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 10635854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @hide 1064a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen */ 1065a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 1066f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen public static final int INSTALL_FAILED_CONTAINER_ERROR = -18; 10675854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 10685854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 1069f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 10705854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * if the new package couldn't be installed in the specified install location. 10715854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 10725854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @hide 10735854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick */ 1074a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 1075a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19; 1076f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen 10775854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 10785854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 1079f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * if the new package couldn't be installed in the specified install location because the media 10805854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * is not available. 10815854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 10825854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @hide 10835854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick */ 1084a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 1085a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20; 1086f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen 10875854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 10885854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 1089f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * if the new package couldn't be installed because the verification timed out. 10905854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 10915854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @hide 10925854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick */ 10935854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick @SystemApi 1094ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21; 1095ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga 1096e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 1097e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 1098e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * if the new package couldn't be installed because the verification did not succeed. 10995854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 11005854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @hide 1101e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 110291f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen @SystemApi 11035854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22; 11045854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 110591f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen /** 110691f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 110706128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio * if the package changed from what the calling program expected. 11085854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 110991f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * @hide 111091f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen */ 111106128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio @SystemApi 11125854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23; 111391f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen 111491f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen /** 111506128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 11165854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * if the new package is assigned a different UID than it previously held. 111791f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * 111891f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * @hide 11195854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick */ 11205854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick public static final int INSTALL_FAILED_UID_CHANGED = -24; 112191f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen 1122f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov /** 1123f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 1124f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * if the new package has an older version code than the currently installed package. 1125f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * 1126f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * @hide 112795629223761e076323faab93f72c955e61a38a75Francisco Jerez */ 112895629223761e076323faab93f72c955e61a38a75Francisco Jerez public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25; 112995629223761e076323faab93f72c955e61a38a75Francisco Jerez 11307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 11317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 11327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the old package has target SDK high enough to support runtime permission and the new 11337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package has target SDK low enough to not support runtime permissions. 11347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 11357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 11367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 11377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 11387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26; 11397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 11407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 11417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} 11427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the new package attempts to downgrade the target sandbox version of the app. 11437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 11447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 1145e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1146e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @SystemApi 1147e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_FAILED_SANDBOX_VERSION_DOWNGRADE = -27; 1148e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1149e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1150e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Installation parse return code: this is passed in the 1151e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser was given a path that is not a 1152e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * file, or does not end with the expected '.apk' extension. 1153e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1154e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1155e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1156e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @SystemApi 1157e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_PARSE_FAILED_NOT_APK = -100; 1158e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1159e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1160e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Installation parse return code: this is passed in the 1161e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser was unable to retrieve the 1162e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * AndroidManifest.xml file. 1163e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1164e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1165e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1166e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @SystemApi 1167e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101; 1168e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1169e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1170e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Installation parse return code: this is passed in the 1171e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser encountered an unexpected 1172e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * exception. 1173e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * 1174e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * @hide 1175e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1176e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @SystemApi 1177e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102; 1178e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1179e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1180e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Installation parse return code: this is passed in the 11817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser did not find any certificates in 11827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the .apk. 11837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 11847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 11857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 11867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 11877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103; 11887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 11897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 11907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation parse return code: this is passed in the 11917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser found inconsistent certificates on 11927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the files in the .apk. 1193e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1194e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1195e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1196e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @SystemApi 1197e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104; 1198e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1199e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1200e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Installation parse return code: this is passed in the 1201e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser encountered a 1202e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * CertificateEncodingException in one of the files in the .apk. 1203e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1204e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1205e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1206e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @SystemApi 1207e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105; 1208e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 120941b1d9a558d620df339738aa4aa569fe14298b83Boyan Ding /** 12107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation parse return code: this is passed in the 12117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser encountered a bad or missing 12127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package name in the manifest. 12137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 12147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 12157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 12167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 12177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106; 12187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 12197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 12207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation parse return code: tthis is passed in the 12217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser encountered a bad shared user id 1222e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * name in the manifest. 1223e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1224e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 12257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 12267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 12277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107; 12287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 12297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 12307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation parse return code: this is passed in the 12317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser encountered some structural 12327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * problem in the manifest. 12337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 12347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 12357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 12367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 12377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108; 12387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 12397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 124041b1d9a558d620df339738aa4aa569fe14298b83Boyan Ding * Installation parse return code: this is passed in the 12417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser did not find any actionable tags 12427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * (instrumentation or application) in the manifest. 12437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 12447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 12457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 12467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 12477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109; 12487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 12497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 12507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation failed return code: this is passed in the 12517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the system failed to install the package 12527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * because of system issues. 12537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 12547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 12557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 12567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 1257e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INSTALL_FAILED_INTERNAL_ERROR = -110; 1258e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1259e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1260e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Installation failed return code: this is passed in the 12617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the system failed to install the package 12627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * because the user is restricted from installing apps. 1263e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 12647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 12657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 12667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_USER_RESTRICTED = -111; 12677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 12687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 12697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation failed return code: this is passed in the 12707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the system failed to install the package 12717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * because it is attempting to define a permission that is already defined by some existing 12727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package. 12737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 12747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The package name of the app which has already defined the permission is passed to a 12757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstallObserver}, if any, as the {@link #EXTRA_FAILURE_EXISTING_PACKAGE} string 12767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * extra; and the name of the permission being redefined is passed in the 12777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #EXTRA_FAILURE_EXISTING_PERMISSION} string extra. 12787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 12797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 12807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 12817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_DUPLICATE_PERMISSION = -112; 12827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 12837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 12847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation failed return code: this is passed in the 12857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the system failed to install the package 12867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * because its packaged native code did not match any of the ABIs supported by the system. 12877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 12887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 12897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 12907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_NO_MATCHING_ABIS = -113; 1291e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1292e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1293e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Internal return code for NativeLibraryHelper methods to indicate that the package 1294e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * being processed did not contain any native code. This is placed here only so that 1295e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * it can belong to the same value space as the other install failure codes. 1296e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1297e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1298e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 12997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int NO_NATIVE_LIBRARIES = -114; 13007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 13017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** {@hide} */ 13027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_ABORTED = -115; 13037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 13047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 13057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation failed return code: instant app installs are incompatible with some 13067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * other installation flags supplied for the operation; or other circumstances such 13077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * as trying to upgrade a system app via an instant app install. 13087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 13097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 13107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_INSTANT_APP_INVALID = -116; 13117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 13127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 13137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Installation parse return code: this is passed in the 13147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the dex metadata file is invalid or 13157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if there was no matching apk file for a dex metadata file. 13167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 13177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 13187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 13197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INSTALL_FAILED_BAD_DEX_METADATA = -117; 13207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 13217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** @hide */ 13227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @IntDef(flag = true, prefix = { "DELETE_" }, value = { 13237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke DELETE_KEEP_DATA, 13247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke DELETE_ALL_USERS, 13257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke DELETE_SYSTEM_APP, 13267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke DELETE_DONT_KILL_APP, 13277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke DELETE_CHATTY, 13287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke }) 13297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @Retention(RetentionPolicy.SOURCE) 13307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public @interface DeleteFlags {} 1331e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1332e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1333e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Flag parameter for {@link #deletePackage} to indicate that you don't want to delete the 1334e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * package's data directory. 1335e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1336e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1337e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1338e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int DELETE_KEEP_DATA = 0x00000001; 1339e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1340e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 13417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #deletePackage} to indicate that you want the 13427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package deleted for all users. 134334c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * 134434c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * @hide 134534c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin */ 134634c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin public static final int DELETE_ALL_USERS = 0x00000002; 13477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 134834c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin /** 134934c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * Flag parameter for {@link #deletePackage} to indicate that, if you are calling 135034c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * uninstall on a system that has been updated, then don't do the normal process 1351e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * of uninstalling the update and rolling back to the older system version (which 135234c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * needs to happen for all users); instead, just mark the app as uninstalled for 135334c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * the current user. 135434c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * 135534c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * @hide 1356e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 135734c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin public static final int DELETE_SYSTEM_APP = 0x00000004; 135834c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin 135934c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin /** 13607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Flag parameter for {@link #deletePackage} to indicate that, if you are calling 13617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * uninstall on a package that is replaced to provide new feature splits, the 1362e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * existing application should not be killed during the removal process. 13637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 1364e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1365e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1366e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int DELETE_DONT_KILL_APP = 0x00000008; 13677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 13687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1369e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Flag parameter for {@link #deletePackage} to indicate that package deletion 1370e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * should be chatty. 1371e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1372e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 13737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 1374e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int DELETE_CHATTY = 0x80000000; 1375e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1376e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1377e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Return code for when package deletion succeeds. This is passed to the 1378e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link IPackageDeleteObserver} if the system succeeded in deleting the 1379e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * package. 1380e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1381e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1382e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1383e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int DELETE_SUCCEEDED = 1; 1384e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1385e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 13867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Deletion failed return code: this is passed to the 138756fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * {@link IPackageDeleteObserver} if the system failed to delete the package 138856fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * for an unspecified reason. 138956fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * 139056fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * @hide 139156fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner */ 1392e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int DELETE_FAILED_INTERNAL_ERROR = -1; 1393e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1394e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1395e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Deletion failed return code: this is passed to the 1396e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link IPackageDeleteObserver} if the system failed to delete the package 139756fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * because it is the active DevicePolicy manager. 139856fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * 139956fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * @hide 140056fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner */ 140156fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner public static final int DELETE_FAILED_DEVICE_POLICY_MANAGER = -2; 140256fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner 140356fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner /** 140456fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * Deletion failed return code: this is passed to the 140556fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * {@link IPackageDeleteObserver} if the system failed to delete the package 140656fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * since the user is restricted. 140756fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * 140856fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * @hide 140956fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner */ 141056fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner public static final int DELETE_FAILED_USER_RESTRICTED = -3; 14117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 14127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 14137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Deletion failed return code: this is passed to the 1414e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link IPackageDeleteObserver} if the system failed to delete the package 1415e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * because a profile or device owner has marked the package as 1416e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * uninstallable. 1417e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1418e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1419e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1420e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int DELETE_FAILED_OWNER_BLOCKED = -4; 1421e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1422e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** {@hide} */ 1423e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int DELETE_FAILED_ABORTED = -5; 1424e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1425e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1426e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Deletion failed return code: this is passed to the 1427e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link IPackageDeleteObserver} if the system failed to delete the package 1428e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * because the packge is a shared library used by other installed packages. 1429e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@hide} */ 14307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int DELETE_FAILED_USED_SHARED_LIBRARY = -6; 14317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 14327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1433e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Return code that is passed to the {@link IPackageMoveObserver} when the 1434e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * package has been successfully moved by the system. 1435e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1436e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1437e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1438e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int MOVE_SUCCEEDED = -100; 1439e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1440e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1441e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Error code that is passed to the {@link IPackageMoveObserver} when the 1442e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * package hasn't been successfully moved by the system because of 1443e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * insufficient memory on specified media. 1444e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1445e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1446e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1447e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int MOVE_FAILED_INSUFFICIENT_STORAGE = -1; 1448e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 14497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 14501af0d9d93910de2e482a7891a16ddfd6d6b0855cIago Toral Quiroga * Error code that is passed to the {@link IPackageMoveObserver} if the 1451e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * specified package doesn't exist. 1452e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 14537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 14547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 14557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int MOVE_FAILED_DOESNT_EXIST = -2; 14567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 14577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 14587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Error code that is passed to the {@link IPackageMoveObserver} if the 14597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * specified package cannot be moved since its a system package. 14607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 14617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 14627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 14637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int MOVE_FAILED_SYSTEM_PACKAGE = -3; 14647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 14657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 14667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Error code that is passed to the {@link IPackageMoveObserver} if the 14677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * specified package cannot be moved since its forward locked. 14687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 14697988b4804f07b5cdb01cdca7dcbe75be30f1df9eMatt Turner * @hide 14709a9eaaa79a43e5fb249ff56a06c3f845e6a28a41Matt Turner */ 14710e1655c6bdf2d8efa5e2030ea36e59c098f82540Ian Romanick public static final int MOVE_FAILED_FORWARD_LOCKED = -4; 14720e1655c6bdf2d8efa5e2030ea36e59c098f82540Ian Romanick 14737988b4804f07b5cdb01cdca7dcbe75be30f1df9eMatt Turner /** 14749a9eaaa79a43e5fb249ff56a06c3f845e6a28a41Matt Turner * Error code that is passed to the {@link IPackageMoveObserver} if the 14750e1655c6bdf2d8efa5e2030ea36e59c098f82540Ian Romanick * specified package cannot be moved to the specified location. 14760e1655c6bdf2d8efa5e2030ea36e59c098f82540Ian Romanick * 14779a9eaaa79a43e5fb249ff56a06c3f845e6a28a41Matt Turner * @hide 14789a9eaaa79a43e5fb249ff56a06c3f845e6a28a41Matt Turner */ 1479e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int MOVE_FAILED_INVALID_LOCATION = -5; 1480e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1481e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 14827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Error code that is passed to the {@link IPackageMoveObserver} if the 1483e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * specified package cannot be moved to the specified location. 1484e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1485e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 14867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 14871af0d9d93910de2e482a7891a16ddfd6d6b0855cIago Toral Quiroga public static final int MOVE_FAILED_INTERNAL_ERROR = -6; 1488e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 14897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1490e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Error code that is passed to the {@link IPackageMoveObserver} if the 14917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * specified package already has an operation pending in the queue. 1492e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1493e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1494e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 14957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int MOVE_FAILED_OPERATION_PENDING = -7; 14967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 1497e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1498e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Error code that is passed to the {@link IPackageMoveObserver} if the 1499e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * specified package cannot be moved since it contains a device admin. 1500e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1501e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1502e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1503e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int MOVE_FAILED_DEVICE_ADMIN = -8; 1504e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1505e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1506e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Error code that is passed to the {@link IPackageMoveObserver} if system does not allow 1507e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * non-system apps to be moved to internal storage. 1508e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1509e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1510e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1511e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int MOVE_FAILED_3RD_PARTY_NOT_ALLOWED_ON_INTERNAL = -9; 1512e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1513e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** @hide */ 1514e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int MOVE_FAILED_LOCKED_USER = -10; 15157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 15167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1517e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Flag parameter for {@link #movePackage} to indicate that 1518e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * the package should be moved to internal storage if its 1519e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * been installed on external media. 1520e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1521e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1522e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @Deprecated 1523e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int MOVE_INTERNAL = 0x00000001; 1524e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1525e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1526e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Flag parameter for {@link #movePackage} to indicate that 1527e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * the package should be moved to external media. 1528e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1529e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1530e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @Deprecated 1531e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int MOVE_EXTERNAL_MEDIA = 0x00000002; 1532e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1533e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** {@hide} */ 1534e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final String EXTRA_MOVE_ID = "android.content.pm.extra.MOVE_ID"; 15357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 15367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1537e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Usable by the required verifier as the {@code verificationCode} argument 1538e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * for {@link PackageManager#verifyPendingInstall} to indicate that it will 1539e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * allow the installation to proceed without any of the optional verifiers 1540e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * needing to vote. 1541e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1542e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1543e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 15447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int VERIFICATION_ALLOW_WITHOUT_SUFFICIENT = 2; 15457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 15464a5cff24d77df6070656b501514d8c304fdbabdfKenneth Graunke /** 15474a5cff24d77df6070656b501514d8c304fdbabdfKenneth Graunke * Used as the {@code verificationCode} argument for 15484a5cff24d77df6070656b501514d8c304fdbabdfKenneth Graunke * {@link PackageManager#verifyPendingInstall} to indicate that the calling 1549e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * package verifier allows the installation to proceed. 1550e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1551e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int VERIFICATION_ALLOW = 1; 15527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 15537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1554e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Used as the {@code verificationCode} argument for 1555e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link PackageManager#verifyPendingInstall} to indicate the calling 1556e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * package verifier does not vote to allow the installation to proceed. 1557e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1558e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int VERIFICATION_REJECT = -1; 1559e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1560e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1561e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Used as the {@code verificationCode} argument for 1562e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link PackageManager#verifyIntentFilter} to indicate that the calling 1563e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * IntentFilter Verifier confirms that the IntentFilter is verified. 1564e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 1565e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 1566e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 1567e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @SystemApi 1568e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public static final int INTENT_FILTER_VERIFICATION_SUCCESS = 1; 1569e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 1570e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 1571e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Used as the {@code verificationCode} argument for 15727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageManager#verifyIntentFilter} to indicate that the calling 157341b1d9a558d620df339738aa4aa569fe14298b83Boyan Ding * IntentFilter Verifier confirms that the IntentFilter is NOT verified. 157441b1d9a558d620df339738aa4aa569fe14298b83Boyan Ding * 157541b1d9a558d620df339738aa4aa569fe14298b83Boyan Ding * @hide 157641b1d9a558d620df339738aa4aa569fe14298b83Boyan Ding */ 157741b1d9a558d620df339738aa4aa569fe14298b83Boyan Ding @SystemApi 157841b1d9a558d620df339738aa4aa569fe14298b83Boyan Ding public static final int INTENT_FILTER_VERIFICATION_FAILURE = -1; 15797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 15807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 15817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Internal status code to indicate that an IntentFilter verification result is not specified. 15827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 15837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 15847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 15857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 15867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED = 0; 15877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 15887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 15897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Used as the {@code status} argument for 15907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #updateIntentVerificationStatusAsUser} to indicate that the User 15917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * will always be prompted the Intent Disambiguation Dialog if there are two 15927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * or more Intent resolved for the IntentFilter's domain(s). 15937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 15947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 15957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 15967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 15977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK = 1; 15987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 15997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 16007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Used as the {@code status} argument for 16017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #updateIntentVerificationStatusAsUser} to indicate that the User 16027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * will never be prompted the Intent Disambiguation Dialog if there are two 16037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * or more resolution of the Intent. The default App for the domain(s) 16047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * specified in the IntentFilter will also ALWAYS be used. 16057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 16067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 16077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 16087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 16097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS = 2; 16107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 16117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 16127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Used as the {@code status} argument for 16137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #updateIntentVerificationStatusAsUser} to indicate that the User 16147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * may be prompted the Intent Disambiguation Dialog if there are two or more 16157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Intent resolved. The default App for the domain(s) specified in the 16167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * IntentFilter will also NEVER be presented to the User. 16177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 16187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 16197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 16207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 16217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER = 3; 16227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 16237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 16247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Used as the {@code status} argument for 16257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #updateIntentVerificationStatusAsUser} to indicate that this app 16267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * should always be considered as an ambiguous candidate for handling the 16277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * matching Intent even if there are other candidate apps in the "always" 16287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * state. Put another way: if there are any 'always ask' apps in a set of 16297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * more than one candidate app, then a disambiguation is *always* presented 16307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * even if there is another candidate app with the 'always' state. 16317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 16327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 16337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 16347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 16357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK = 4; 16367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 16377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 16387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Can be used as the {@code millisecondsToDelay} argument for 1639720670a615590e37a7e85852527a590778e6f273Ilia Mirkin * {@link PackageManager#extendVerificationTimeout}. This is the 1640720670a615590e37a7e85852527a590778e6f273Ilia Mirkin * maximum time {@code PackageManager} waits for the verification 1641720670a615590e37a7e85852527a590778e6f273Ilia Mirkin * agent to return (in milliseconds). 16427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 16437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final long MAXIMUM_VERIFICATION_TIMEOUT = 60*60*1000; 16447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 16457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 164689759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device's 164789759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli * audio pipeline is low-latency, more suitable for audio applications sensitive to delays or 164889759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli * lag in sound input or output. 16497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 16507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 16510c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin public static final String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency"; 16520c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin 16530c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin /** 16540c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 16550c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * {@link #hasSystemFeature}: The device includes at least one form of audio 16560c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * output, such as speakers, audio jack or streaming over bluetooth 16570c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin */ 16580c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 16590c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin public static final String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output"; 16600c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin 16617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1662c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 1663c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * The device has professional audio level of functionality and performance. 1664c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 16657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1666c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_AUDIO_PRO = "android.hardware.audio.pro"; 1667c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1668c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 16697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1670c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device is capable of communicating with 1671c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * other devices via Bluetooth. 1672c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 16737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1674c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_BLUETOOTH = "android.hardware.bluetooth"; 1675c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1676c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 16777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1678c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device is capable of communicating with 1679c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * other devices via Bluetooth Low Energy radio. 1680c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 16817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1682c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le"; 1683c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1684c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 16857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1686c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device has a camera facing away 1687c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * from the screen. 1688c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 16897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1690c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CAMERA = "android.hardware.camera"; 1691c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1692c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 16937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1694c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device's camera supports auto-focus. 1695c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 16967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1697fd249c803e3ae2acb83f5e3b7152728e73228b7bIlia Mirkin public static final String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus"; 16987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 16997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 17007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1701c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device has at least one camera pointing in 1702c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * some direction, or can support an external camera being connected to it. 1703c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 17047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1705c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CAMERA_ANY = "android.hardware.camera.any"; 17067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 1707c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1708c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1709c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device can support having an external camera connected to it. 17107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The external camera may not always be connected or available to applications to use. 1711c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1712c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1713c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CAMERA_EXTERNAL = "android.hardware.camera.external"; 17147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 1715c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1716c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1717c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device's camera supports flash. 17187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 1719c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1720c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash"; 1721c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 17227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1723c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1724c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device has a front facing camera. 1725c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 17267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1727c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CAMERA_FRONT = "android.hardware.camera.front"; 1728c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1729c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 17307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one 1731c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * of the cameras on the device supports the 1732c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL full hardware} 1733c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * capability level. 17347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 1735c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1736c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full"; 1737c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 17387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1739c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one 17407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * of the cameras on the device supports the 17417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR manual sensor} 17427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * capability level. 1743c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1744c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1745c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR = 17467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke "android.hardware.camera.capability.manual_sensor"; 1747c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1748c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1749c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one 17507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * of the cameras on the device supports the 1751c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING manual post-processing} 1752c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * capability level. 1753c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 17547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1755c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING = 1756c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke "android.hardware.camera.capability.manual_post_processing"; 1757c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 17587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1759c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one 1760c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * of the cameras on the device supports the 17617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW RAW} 1762c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * capability level. 1763c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1764c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 17657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_CAMERA_CAPABILITY_RAW = 1766c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke "android.hardware.camera.capability.raw"; 1767c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1768c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 17697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one 1770c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * of the cameras on the device supports the 1771c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING 1772c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * MOTION_TRACKING} capability level. 17737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 1774c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 17757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_CAMERA_AR = 17767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke "android.hardware.camera.ar"; 17777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 1778c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1779c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1780c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device is capable of communicating with 17817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * consumer IR devices. 1782c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1783c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1784c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CONSUMER_IR = "android.hardware.consumerir"; 17857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 1786c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** {@hide} */ 1787c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1788c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CTS = "android.software.cts"; 17897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 1790c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1791c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1792c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device supports one or more methods of 17937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * reporting current location. 1794c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 17957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1796c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_LOCATION = "android.hardware.location"; 1797c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 17987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1799c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1800c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device has a Global Positioning System 1801c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * receiver and can report precise location. 18027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 1803c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1804c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_LOCATION_GPS = "android.hardware.location.gps"; 1805c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 18067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1807c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 18080295db2a8ba9ceccffc0195e93e2657103c3c233Roland Scheidegger * {@link #hasSystemFeature}: The device can report location with coarse 18090295db2a8ba9ceccffc0195e93e2657103c3c233Roland Scheidegger * accuracy using a network-based geolocation system. 18100295db2a8ba9ceccffc0195e93e2657103c3c233Roland Scheidegger */ 18110295db2a8ba9ceccffc0195e93e2657103c3c233Roland Scheidegger @SdkConstant(SdkConstantType.FEATURE) 18120295db2a8ba9ceccffc0195e93e2657103c3c233Roland Scheidegger public static final String FEATURE_LOCATION_NETWORK = "android.hardware.location.network"; 18130295db2a8ba9ceccffc0195e93e2657103c3c233Roland Scheidegger 1814f30f48476fd2f441c7aaf001bd8456fe2d5432bfKenneth Graunke /** 18157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1816c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device's 1817c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link ActivityManager#isLowRamDevice() ActivityManager.isLowRamDevice()} method returns 1818c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * true. 18197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 1820c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1821c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_RAM_LOW = "android.hardware.ram.low"; 1822c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 18237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 1824c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1825c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device's 1826c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link ActivityManager#isLowRamDevice() ActivityManager.isLowRamDevice()} method returns 18277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * false. 1828c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1829c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 18307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_RAM_NORMAL = "android.hardware.ram.normal"; 1831c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1832c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1833c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 18347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: The device can record audio via a 1835c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * microphone. 1836c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1837c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 18387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_MICROPHONE = "android.hardware.microphone"; 1839c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 18407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 18417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 18427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: The device can communicate using Near-Field 1843c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Communications (NFC). 1844c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1845c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1846c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_NFC = "android.hardware.nfc"; 1847c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1848c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1849c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1850c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device supports host- 1851c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * based NFC card emulation. 1852c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * 1853c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * TODO remove when depending apps have moved to new constant. 1854c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * @hide 1855c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * @deprecated 1856c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1857c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @Deprecated 1858c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1859c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_NFC_HCE = "android.hardware.nfc.hce"; 1860c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1861c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1862c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1863c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device supports host- 1864c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * based NFC card emulation. 1865c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1866c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1867c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce"; 1868c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1869c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1870c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1871c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device supports host- 1872c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * based NFC-F card emulation. 18730d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin */ 18740d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 18750d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin public static final String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef"; 18760d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin 18770d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin /** 18780d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 18790d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * {@link #hasSystemFeature}: The device supports any 18800d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * one of the {@link #FEATURE_NFC}, {@link #FEATURE_NFC_HOST_CARD_EMULATION}, 18810d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * or {@link #FEATURE_NFC_HOST_CARD_EMULATION_NFCF} features. 18820d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * 18830d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * @hide 18840d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin */ 18850d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 18860d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin public static final String FEATURE_NFC_ANY = "android.hardware.nfc.any"; 18870d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin 18880d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin /** 18890d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 18900d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * {@link #hasSystemFeature}: The device supports the OpenGL ES 18910d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * <a href="http://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt"> 18920d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * Android Extension Pack</a>. 18937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 18947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 18957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep"; 18967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 18977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 18987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 18997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature(String, int)}: If this feature is supported, the Vulkan native API 19007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * will enumerate at least one {@code VkPhysicalDevice}, and the feature version will indicate 19017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * what level of optional hardware features limits it supports. 19027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 19037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Level 0 includes the base Vulkan requirements as well as: 19047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <ul><li>{@code VkPhysicalDeviceFeatures::textureCompressionETC2}</li></ul> 19057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 19067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Level 1 additionally includes: 19077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <ul> 19087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::fullDrawIndexUint32}</li> 19097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::imageCubeArray}</li> 19107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::independentBlend}</li> 19117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::geometryShader}</li> 19127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::tessellationShader}</li> 19137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::sampleRateShading}</li> 19147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::textureCompressionASTC_LDR}</li> 19157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::fragmentStoresAndAtomics}</li> 19167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::shaderImageGatherExtended}</li> 19177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::shaderUniformBufferArrayDynamicIndexing}</li> 19187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceFeatures::shaderSampledImageArrayDynamicIndexing}</li> 19197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * </ul> 1920720670a615590e37a7e85852527a590778e6f273Ilia Mirkin */ 1921720670a615590e37a7e85852527a590778e6f273Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 1922720670a615590e37a7e85852527a590778e6f273Ilia Mirkin public static final String FEATURE_VULKAN_HARDWARE_LEVEL = "android.hardware.vulkan.level"; 19237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 19247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 19257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 19267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature(String, int)}: If this feature is supported, the Vulkan native API 19277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * will enumerate at least one {@code VkPhysicalDevice}, and the feature version will indicate 192889759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli * what level of optional compute features that device supports beyond the Vulkan 1.0 192989759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli * requirements. 193089759381dbfe3784bc780a3ab6e0fe13e77e06efTapani Pälli * <p> 19317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Compute level 0 indicates: 19327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <ul> 19337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>The {@code VK_KHR_variable_pointers} extension and 19347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code VkPhysicalDeviceVariablePointerFeaturesKHR::variablePointers} feature are 19357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke supported.</li> 19367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>{@code VkPhysicalDeviceLimits::maxPerStageDescriptorStorageBuffers} is at least 16.</li> 19377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * </ul> 19387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 19397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 19407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_VULKAN_HARDWARE_COMPUTE = "android.hardware.vulkan.compute"; 19417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 19427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 19437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 19447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature(String, int)}: The version of this feature indicates the highest 19457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code VkPhysicalDeviceProperties::apiVersion} supported by the physical devices that support 19467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the hardware level indicated by {@link #FEATURE_VULKAN_HARDWARE_LEVEL}. The feature version 19477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * uses the same encoding as Vulkan version numbers: 19487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <ul> 19497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>Major version number in bits 31-22</li> 19507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>Minor version number in bits 21-12</li> 19517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li>Patch version number in bits 11-0</li> 19527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * </ul> 19537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 19547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 19557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version"; 19567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 19577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 19587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 19597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: The device includes broadcast radio tuner. 19607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 1961c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1962c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SystemApi 1963c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1964c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_BROADCAST_RADIO = "android.hardware.broadcastradio"; 1965c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1966c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1967c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1968c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device includes an accelerometer. 1969c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1970c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1971c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer"; 1972c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1973c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1974c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1975c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device includes a barometer (air 1976c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * pressure sensor.) 1977c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1978c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1979c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_SENSOR_BAROMETER = "android.hardware.sensor.barometer"; 1980c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1981c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1982c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1983c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device includes a magnetometer (compass). 1984c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 1985c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 1986c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass"; 1987c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 1988c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 1989c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 1990c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device includes a gyroscope. 19910d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin */ 19920d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 19930d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin public static final String FEATURE_SENSOR_GYROSCOPE = "android.hardware.sensor.gyroscope"; 19940d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin 19950d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin /** 19960d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 19970d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * {@link #hasSystemFeature}: The device includes a light sensor. 19980d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin */ 19990d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 20000d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin public static final String FEATURE_SENSOR_LIGHT = "android.hardware.sensor.light"; 20010d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin 20020d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin /** 20030d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 20040d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * {@link #hasSystemFeature}: The device includes a proximity sensor. 20050d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin */ 20060d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 20070d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin public static final String FEATURE_SENSOR_PROXIMITY = "android.hardware.sensor.proximity"; 20080d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin 20090d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin /** 20100d8e850195704f5b3bc81bae4b73556a407465f2Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 20117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: The device includes a hardware step counter. 20127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 20137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2014c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_SENSOR_STEP_COUNTER = "android.hardware.sensor.stepcounter"; 2015c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2016c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 20177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2018c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device includes a hardware step detector. 2019c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2020c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 20217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_SENSOR_STEP_DETECTOR = "android.hardware.sensor.stepdetector"; 2022c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2023c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2024c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 20257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: The device includes a heart rate monitor. 2026c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2027c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 20287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_SENSOR_HEART_RATE = "android.hardware.sensor.heartrate"; 2029c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2030c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2031c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 20327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: The heart rate sensor on this device is an Electrocardiogram. 2033c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2034c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2035c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_SENSOR_HEART_RATE_ECG = 20367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke "android.hardware.sensor.heartrate.ecg"; 2037c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 20387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 20397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 20407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: The device includes a relative humidity sensor. 2041c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2042c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2043c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_SENSOR_RELATIVE_HUMIDITY = 2044c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke "android.hardware.sensor.relative_humidity"; 2045c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2046c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 20477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2048c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device includes an ambient temperature sensor. 2049c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2050c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2051c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_SENSOR_AMBIENT_TEMPERATURE = 2052c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke "android.hardware.sensor.ambient_temperature"; 2053c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 20547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2055c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2056c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device supports high fidelity sensor processing 2057c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * capabilities. 20587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 2059c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2060c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_HIFI_SENSORS = 20617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke "android.hardware.sensor.hifi_sensors"; 20627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 20637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2064c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2065c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device has a telephony radio with data 2066c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * communication support. 2067c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2068c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2069c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_TELEPHONY = "android.hardware.telephony"; 20707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2071c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2072c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2073c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device has a CDMA telephony stack. 2074c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2075c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2076c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma"; 20777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2078c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2079c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2080c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device has a GSM telephony stack. 20817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 2082c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2083c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm"; 20847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 20857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 20867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 2087c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * The device supports telephony carrier restriction mechanism. 2088c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * 2089c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * <p>Devices declaring this feature must have an implementation of the 20907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.telephony.TelephonyManager#getAllowedCarriers} and 2091c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link android.telephony.TelephonyManager#setAllowedCarriers}. 2092c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * @hide 2093c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 20947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 2095c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2096c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_TELEPHONY_CARRIERLOCK = 2097c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke "android.hardware.telephony.carrierlock"; 20987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2099c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2100c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device 2101c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * supports embedded subscriptions on eUICCs. 21027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * TODO(b/35851809): Make this public. 2103c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * @hide 2104c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2105c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 21067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_TELEPHONY_EUICC = "android.hardware.telephony.euicc"; 2107c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 21087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2109c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device 2110c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * supports cell-broadcast reception using the MBMS APIs. 2111c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 21127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2113c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_TELEPHONY_MBMS = "android.hardware.telephony.mbms"; 2114c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2115c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 21167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2117c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device supports connecting to USB devices 2118c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * as the USB host. 2119c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 21207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2121c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_USB_HOST = "android.hardware.usb.host"; 2122c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2123c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 21247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2125c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device supports connecting to USB accessories. 2126c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 21277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 21287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory"; 21297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2130c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2131c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2132c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The SIP API is enabled on the device. 21337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 2134c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2135c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_SIP = "android.software.sip"; 2136c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 21377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2138c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2139c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device supports SIP-based VOIP. 2140c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 21417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2142c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_SIP_VOIP = "android.software.sip.voip"; 2143c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2144c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 21457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2146c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The Connection Service API is enabled on the device. 21477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 2148c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2149c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice"; 21507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2151c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2152c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2153c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device's display has a touch screen. 21547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 2155c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2156c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_TOUCHSCREEN = "android.hardware.touchscreen"; 2157c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 21587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2159c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2160c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device's touch screen supports 21617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * multitouch sufficient for basic two-finger gesture detection. 21627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 21637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2164c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_TOUCHSCREEN_MULTITOUCH = "android.hardware.touchscreen.multitouch"; 2165c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2166c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2167c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2168c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device's touch screen is capable of 2169c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * tracking two or more fingers fully independently. 21707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 2171c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2172c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT = "android.hardware.touchscreen.multitouch.distinct"; 2173c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2174c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2175c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2176c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device's touch screen is capable of 21777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * tracking a full hand of fingers fully independently -- that is, 5 or 2178c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * more simultaneous independent pointers. 2179c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2180c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 21817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND = "android.hardware.touchscreen.multitouch.jazzhand"; 2182c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2183c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2184c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2185c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device does not have a touch screen, but 2186c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * does support touch emulation for basic events. For instance, the 2187c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * device might use a mouse or remote control to drive a cursor, and 21887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * emulate basic touch pointer events like down, up, drag, etc. All 2189c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * devices that support android.hardware.touchscreen or a sub-feature are 21907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * presumed to also support faketouch. 2191c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2192c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 21937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_FAKETOUCH = "android.hardware.faketouch"; 21947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 21957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2196c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2197c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device does not have a touch screen, but 2198c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * does support touch emulation for basic events that supports distinct 2199c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * tracking of two or more fingers. This is an extension of 2200c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #FEATURE_FAKETOUCH} for input devices with this capability. Note 2201c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * that unlike a distinct multitouch screen as defined by 22027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT}, these kinds of input 2203c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * devices will not actually provide full two-finger gestures since the 2204c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * input is being transformed to cursor movement on the screen. That is, 2205c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * single finger gestures will move a cursor; two-finger swipes will 2206c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * result in single-finger touch events; other two-finger gestures will 2207c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * result in the corresponding two-finger touch event. 2208c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 22097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2210c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = "android.hardware.faketouch.multitouch.distinct"; 2211c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2212c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 22137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2214c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device does not have a touch screen, but 2215c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * does support touch emulation for basic events that supports tracking 2216c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * a hand of fingers (5 or more fingers) fully independently. 2217c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * This is an extension of 2218c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #FEATURE_FAKETOUCH} for input devices with this capability. Note 2219c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * that unlike a multitouch screen as defined by 22207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND}, not all two finger 2221c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * gestures can be detected due to the limitations described for 22227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT}. 2223c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2224c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 22257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = "android.hardware.faketouch.multitouch.jazzhand"; 22267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 22277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 22287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2229e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link #hasSystemFeature}: The device has biometric hardware to detect a fingerprint. 2230e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga */ 2231e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga @SdkConstant(SdkConstantType.FEATURE) 2232e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga public static final String FEATURE_FINGERPRINT = "android.hardware.fingerprint"; 2233e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga 2234e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga /** 2235e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * Feature for {@link #getSystemAvailableFeatures} and 2236e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link #hasSystemFeature}: The device supports portrait orientation 223786855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes * screens. For backwards compatibility, you can assume that if neither 22387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * this nor {@link #FEATURE_SCREEN_LANDSCAPE} is set then the device supports 22397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * both portrait and landscape. 2240ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin */ 2241ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 2242ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin public static final String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait"; 2243ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin 2244ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin /** 2245ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 2246ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * {@link #hasSystemFeature}: The device supports landscape orientation 2247ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * screens. For backwards compatibility, you can assume that if neither 2248ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * this nor {@link #FEATURE_SCREEN_PORTRAIT} is set then the device supports 2249ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * both portrait and landscape. 2250ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin */ 2251ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 2252ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin public static final String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape"; 2253ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin 2254ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin /** 2255ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 2256ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * {@link #hasSystemFeature}: The device supports live wallpapers. 2257ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin */ 2258ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 2259ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin public static final String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper"; 2260ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin /** 2261ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 2262ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * {@link #hasSystemFeature}: The device supports app widgets. 2263ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin */ 2264ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 2265ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin public static final String FEATURE_APP_WIDGETS = "android.software.app_widgets"; 2266ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin 2267ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin /** 2268ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * @hide 2269ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 2270ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * {@link #hasSystemFeature}: The device supports 2271ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * {@link android.service.voice.VoiceInteractionService} and 2272ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * {@link android.app.VoiceInteractor}. 2273ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin */ 2274ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 2275ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin public static final String FEATURE_VOICE_RECOGNIZERS = "android.software.voice_recognizers"; 2276ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin 2277ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin 2278ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin /** 2279ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 2280ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * {@link #hasSystemFeature}: The device supports a home screen that is replaceable 2281ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * by third party applications. 2282ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin */ 2283ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 2284ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin public static final String FEATURE_HOME_SCREEN = "android.software.home_screen"; 2285ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin 2286ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin /** 2287ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 2288ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * {@link #hasSystemFeature}: The device supports adding new input methods implemented 2289ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * with the {@link android.inputmethodservice.InputMethodService} API. 2290ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin */ 2291ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 2292ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin public static final String FEATURE_INPUT_METHODS = "android.software.input_methods"; 2293ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin 2294ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin /** 2295ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 2296ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * {@link #hasSystemFeature}: The device supports device policy enforcement via device admins. 2297ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin */ 2298ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 2299ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin public static final String FEATURE_DEVICE_ADMIN = "android.software.device_admin"; 2300ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin 2301ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin /** 2302ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * Feature for {@link #getSystemAvailableFeatures} and 2303ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * {@link #hasSystemFeature}: The device supports leanback UI. This is 2304ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * typically used in a living room television experience, but is a software 2305ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * feature unlike {@link #FEATURE_TELEVISION}. Devices running with this 2306ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * feature will use resources associated with the "television" UI mode. 2307ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin */ 2308ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin @SdkConstant(SdkConstantType.FEATURE) 2309ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin public static final String FEATURE_LEANBACK = "android.software.leanback"; 2310ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin 23117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 23127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 23137a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * {@link #hasSystemFeature}: The device supports only leanback UI. Only 23147a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * applications designed for this experience should be run, though this is 23157a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * not enforced by the system. 23167a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes */ 23177a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes @SdkConstant(SdkConstantType.FEATURE) 23187a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes public static final String FEATURE_LEANBACK_ONLY = "android.software.leanback_only"; 23197a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes 23207a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes /** 23217a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * Feature for {@link #getSystemAvailableFeatures} and 23227a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * {@link #hasSystemFeature}: The device supports live TV and can display 23237a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * contents from TV inputs implemented with the 23247a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * {@link android.media.tv.TvInputService} API. 23257a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes */ 23267a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes @SdkConstant(SdkConstantType.FEATURE) 23277a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes public static final String FEATURE_LIVE_TV = "android.software.live_tv"; 23287a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes 23297a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes /** 23307a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * Feature for {@link #getSystemAvailableFeatures} and 23317a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * {@link #hasSystemFeature}: The device supports WiFi (802.11) networking. 23327a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes */ 23337a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes @SdkConstant(SdkConstantType.FEATURE) 23347a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes public static final String FEATURE_WIFI = "android.hardware.wifi"; 23357a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes 23367a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes /** 23377a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * Feature for {@link #getSystemAvailableFeatures} and 23387a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * {@link #hasSystemFeature}: The device supports Wi-Fi Direct networking. 23397a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes */ 23407a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes @SdkConstant(SdkConstantType.FEATURE) 23417a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes public static final String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct"; 23427a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes 23437a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes /** 23447a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * Feature for {@link #getSystemAvailableFeatures} and 23457a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * {@link #hasSystemFeature}: The device supports Wi-Fi Aware. 234606c56f443aa1850b2651df3636c42a8740cff847Ian Romanick */ 234706c56f443aa1850b2651df3636c42a8740cff847Ian Romanick @SdkConstant(SdkConstantType.FEATURE) 234806c56f443aa1850b2651df3636c42a8740cff847Ian Romanick public static final String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware"; 234906c56f443aa1850b2651df3636c42a8740cff847Ian Romanick 235006c56f443aa1850b2651df3636c42a8740cff847Ian Romanick /** 235106c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * Feature for {@link #getSystemAvailableFeatures} and 235206c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * {@link #hasSystemFeature}: The device supports Wi-Fi Passpoint and all 235306c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * Passpoint related APIs in {@link WifiManager} are supported. Refer to 235406c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * {@link WifiManager#addOrUpdatePasspointConfiguration} for more info. 235506c56f443aa1850b2651df3636c42a8740cff847Ian Romanick */ 23567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2357c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_WIFI_PASSPOINT = "android.hardware.wifi.passpoint"; 2358c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 23597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 23607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 23617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: The device supports Wi-Fi RTT (IEEE 802.11mc). 2362c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2363c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 23647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_WIFI_RTT = "android.hardware.wifi.rtt"; 23657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 23667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2367c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2368c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2369c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device supports LoWPAN networking. 2370c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * @hide 23717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 23727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 23737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_LOWPAN = "android.hardware.lowpan"; 2374c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 23757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 23767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 23777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: This is a device dedicated to showing UI 237871ffac691b8423d823a4637a0542ccb4005cc996Paul Berry * on a vehicle headunit. A headunit here is defined to be inside a 23797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * vehicle that may or may not be moving. A headunit uses either a 23807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * primary display in the center console and/or additional displays in 23817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the instrument cluster or elsewhere in the vehicle. Headunit display(s) 2382c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * have limited size and resolution. The user will likely be focused on 2383c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * driving so limiting driver distraction is a primary concern. User input 23847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * can be a variety of hard buttons, touch, rotary controllers and even mouse- 23857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * like interfaces. 23867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 2387c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2388c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive"; 2389c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 23907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 23917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 23927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: This is a device dedicated to showing UI 2393c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * on a television. Television here is defined to be a typical living 2394c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * room television experience: displayed on a big screen, where the user 23957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is sitting far away from it, and the dominant form of input will be 23967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * something like a DPAD, not through touch or mouse. 23977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @deprecated use {@link #FEATURE_LEANBACK} instead. 2398c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2399c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @Deprecated 2400c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2401c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_TELEVISION = "android.hardware.type.television"; 2402c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2403c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 24047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 24057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: This is a device dedicated to showing UI 24067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * on a watch. A watch here is defined to be a device worn on the body, perhaps on 2407c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * the wrist. The user is very close when interacting with the device. 24087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 24097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 24107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_WATCH = "android.hardware.type.watch"; 241171ffac691b8423d823a4637a0542ccb4005cc996Paul Berry 24127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 24137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 24147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: This is a device for IoT and may not have an UI. An embedded 241566a2fe4cf95f6d4f5bdbfd740314113e87e5649bKalyan Kondapally * device is defined as a full stack Android device with or without a display and no 241666a2fe4cf95f6d4f5bdbfd740314113e87e5649bKalyan Kondapally * user-installable apps. 24177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 24187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 24197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_EMBEDDED = "android.hardware.type.embedded"; 2420c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2421c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 24227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 24237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: This is a device dedicated to be primarily used 24247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * with keyboard, mouse or touchpad. This includes traditional desktop 2425c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * computers, laptops and variants such as convertibles or detachables. 2426c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Due to the larger screen, the device will most likely use the 24277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #FEATURE_FREEFORM_WINDOW_MANAGEMENT} feature as well. 24287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 24297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2430c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_PC = "android.hardware.type.pc"; 24317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 24327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 24337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 2434c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * The device supports printing. 24357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 24367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 24377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_PRINTING = "android.software.print"; 2438c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 2439c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 24407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 24417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The device supports {@link android.companion.CompanionDeviceManager#associate associating} 24427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * with devices via {@link android.companion.CompanionDeviceManager}. 244366a2fe4cf95f6d4f5bdbfd740314113e87e5649bKalyan Kondapally */ 24447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 24457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_COMPANION_DEVICE_SETUP 24467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke = "android.software.companion_device_setup"; 2447c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 24487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 24497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 24507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The device can perform backup and restore operations on installed applications. 2451c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2452c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 24537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_BACKUP = "android.software.backup"; 24547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 24557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2456c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2457c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: The device supports freeform window management. 24587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Windows have title bars and can be moved and resized. 24597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 24607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke // If this feature is present, you also need to set 2461c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke // com.android.internal.R.config_freeformWindowManagement to true in your configuration overlay. 2462c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 24637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_FREEFORM_WINDOW_MANAGEMENT 24647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke = "android.software.freeform_window_management"; 24657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2466c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2467c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 24687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The device supports picture-in-picture multi-window mode. 24697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 24707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2471c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture"; 2472c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 24737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 24747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 24757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The device supports running activities on secondary displays. 2476c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2477c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 24787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS 24797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke = "android.software.activities_on_secondary_displays"; 24807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2481c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 2482c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 24837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The device supports creating secondary users and managed profiles via 24847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link DevicePolicyManager}. 24857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 2486c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 24877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_MANAGED_USERS = "android.software.managed_users"; 24887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 24897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2490c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * @hide 24917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * TODO: Remove after dependencies updated b/17392243 24927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 24937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_MANAGED_PROFILES = "android.software.managed_users"; 249471ffac691b8423d823a4637a0542ccb4005cc996Paul Berry 24957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 24967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 24977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The device supports verified boot. 2498c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 24997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 25007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_VERIFIED_BOOT = "android.software.verified_boot"; 25017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2502c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 25037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 25047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The device supports secure removal of users. When a user is deleted the data associated 25057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * with that user is securely deleted and no longer available. 2506c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 25077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 25087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_SECURELY_REMOVES_USERS 25097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke = "android.software.securely_removes_users"; 2510c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 25117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** {@hide} */ 25127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @TestApi 25137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2514c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_FILE_BASED_ENCRYPTION 25157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke = "android.software.file_based_encryption"; 25167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 25177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** {@hide} */ 2518c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @TestApi 2519c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 25207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_ADOPTABLE_STORAGE 25217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke = "android.software.adoptable_storage"; 25227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 2523c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 25247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 25257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The device has a full implementation of the android.webkit.* APIs. Devices 25267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * lacking this feature will not have a functioning WebView implementation. 2527c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke */ 2528c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 25297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_WEBVIEW = "android.software.webview"; 25307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 25317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2532c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 25337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #hasSystemFeature}: This device supports ethernet. 25347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 25357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2536c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_ETHERNET = "android.hardware.ethernet"; 25377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 25387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 25397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and 2540c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * {@link #hasSystemFeature}: This device supports HDMI-CEC. 25417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 25427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 25437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2544c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_HDMI_CEC = "android.hardware.hdmi.cec"; 25457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 25467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 25477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 2548c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * The device has all of the inputs necessary to be considered a compatible game controller, or 25497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * includes a compatible game controller in the box. 25507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 25517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2552c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_GAMEPAD = "android.hardware.gamepad"; 25537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 25547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 25557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 2556c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * The device has a full implementation of the android.media.midi.* APIs. 25577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 25587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 25597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String FEATURE_MIDI = "android.software.midi"; 2560c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke 25617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 25627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 25637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The device implements an optimized mode for virtual reality (VR) applications that handles 2564c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * stereoscopic rendering of notifications, and disables most monocular system UI components 2565c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * while a VR application has user focus. 25667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Devices declaring this feature must include an application implementing a 25677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.service.vr.VrListenerService} that can be targeted by VR applications via 25687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.app.Activity#setVrModeEnabled}. 2569c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke * @deprecated use {@link #FEATURE_VR_MODE_HIGH_PERFORMANCE} instead. 25707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 25717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @Deprecated 25727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SdkConstant(SdkConstantType.FEATURE) 2573c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke public static final String FEATURE_VR_MODE = "android.software.vr.mode"; 25747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 257518002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré /** 257618002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 2577cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * The device implements an optimized mode for virtual reality (VR) applications that handles 2578cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * stereoscopic rendering of notifications, disables most monocular system UI components 2579cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * while a VR application has user focus and meets extra CDD requirements to provide a 258018002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * high-quality VR experience. 25817335bc7526478637db168128ad989539c8c0211eChris Forbes * Devices declaring this feature must include an application implementing a 25827335bc7526478637db168128ad989539c8c0211eChris Forbes * {@link android.service.vr.VrListenerService} that can be targeted by VR applications via 25837335bc7526478637db168128ad989539c8c0211eChris Forbes * {@link android.app.Activity#setVrModeEnabled}. 25847335bc7526478637db168128ad989539c8c0211eChris Forbes * and must meet CDD requirements to provide a high-quality VR experience. 2585cea605d373673878f6911906dce78b3c9bdce622Ian Romanick */ 2586cea605d373673878f6911906dce78b3c9bdce622Ian Romanick @SdkConstant(SdkConstantType.FEATURE) 2587cea605d373673878f6911906dce78b3c9bdce622Ian Romanick public static final String FEATURE_VR_MODE_HIGH_PERFORMANCE 258818002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré = "android.hardware.vr.high_performance"; 2589cea605d373673878f6911906dce78b3c9bdce622Ian Romanick 2590cea605d373673878f6911906dce78b3c9bdce622Ian Romanick /** 2591cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 259218002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * The device supports autofill of user credentials, addresses, credit cards, etc 2593dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick * via integration with {@link android.service.autofill.AutofillService autofill 2594dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick * providers}. 2595dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick */ 25967335bc7526478637db168128ad989539c8c0211eChris Forbes @SdkConstant(SdkConstantType.FEATURE) 2597cea605d373673878f6911906dce78b3c9bdce622Ian Romanick public static final String FEATURE_AUTOFILL = "android.software.autofill"; 2598cea605d373673878f6911906dce78b3c9bdce622Ian Romanick 2599cea605d373673878f6911906dce78b3c9bdce622Ian Romanick /** 26007335bc7526478637db168128ad989539c8c0211eChris Forbes * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 26017335bc7526478637db168128ad989539c8c0211eChris Forbes * The device implements headtracking suitable for a VR device. 26027335bc7526478637db168128ad989539c8c0211eChris Forbes */ 26037335bc7526478637db168128ad989539c8c0211eChris Forbes @SdkConstant(SdkConstantType.FEATURE) 26047335bc7526478637db168128ad989539c8c0211eChris Forbes public static final String FEATURE_VR_HEADTRACKING = "android.hardware.vr.headtracking"; 2605cea605d373673878f6911906dce78b3c9bdce622Ian Romanick 2606cea605d373673878f6911906dce78b3c9bdce622Ian Romanick /** 2607cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: 26087335bc7526478637db168128ad989539c8c0211eChris Forbes * The device has a StrongBox hardware-backed Keystore. 2609cea605d373673878f6911906dce78b3c9bdce622Ian Romanick */ 2610cea605d373673878f6911906dce78b3c9bdce622Ian Romanick @SdkConstant(SdkConstantType.FEATURE) 2611cea605d373673878f6911906dce78b3c9bdce622Ian Romanick public static final String FEATURE_STRONGBOX_KEYSTORE = 26127335bc7526478637db168128ad989539c8c0211eChris Forbes "android.hardware.strongbox_keystore"; 2613dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick 2614dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick /** 2615dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick * Action to external storage service to clean out removed apps. 261643e3ae112f170f33e435fcabb899c6f9e13ddf99Chris Forbes * @hide 2617cea605d373673878f6911906dce78b3c9bdce622Ian Romanick */ 2618cea605d373673878f6911906dce78b3c9bdce622Ian Romanick public static final String ACTION_CLEAN_EXTERNAL_STORAGE 2619cea605d373673878f6911906dce78b3c9bdce622Ian Romanick = "android.content.pm.CLEAN_EXTERNAL_STORAGE"; 2620dc4f53b68308bbd79932470cf4613037f7e95fb7Ian Romanick 262143e3ae112f170f33e435fcabb899c6f9e13ddf99Chris Forbes /** 262218002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * Extra field name for the URI to a verification file. Passed to a package 262318002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * verifier. 262418002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * 2625cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * @hide 2626cea605d373673878f6911906dce78b3c9bdce622Ian Romanick */ 2627cea605d373673878f6911906dce78b3c9bdce622Ian Romanick public static final String EXTRA_VERIFICATION_URI = "android.content.pm.extra.VERIFICATION_URI"; 2628cea605d373673878f6911906dce78b3c9bdce622Ian Romanick 2629cea605d373673878f6911906dce78b3c9bdce622Ian Romanick /** 2630cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * Extra field name for the ID of a package pending verification. Passed to 2631cea605d373673878f6911906dce78b3c9bdce622Ian Romanick * a package verifier and is used to call back to 26324fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * {@link PackageManager#verifyPendingInstall(int, int)} 2633e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin */ 2634e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin public static final String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID"; 2635e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin 2636cea605d373673878f6911906dce78b3c9bdce622Ian Romanick /** 2637e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * Extra field name for the package identifier which is trying to install 2638e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * the package. 2639e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * 26404fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * @hide 2641e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin */ 2642e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin public static final String EXTRA_VERIFICATION_INSTALLER_PACKAGE 2643e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin = "android.content.pm.extra.VERIFICATION_INSTALLER_PACKAGE"; 264418002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré 2645e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin /** 2646e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * Extra field name for the requested install flags for a package pending 2647e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * verification. Passed to a package verifier. 264800235402a0a341426c0ef292209489e0922309ebChris Forbes * 26494fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * @hide 26504fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes */ 26514fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes public static final String EXTRA_VERIFICATION_INSTALL_FLAGS 265200235402a0a341426c0ef292209489e0922309ebChris Forbes = "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS"; 2653e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin 2654e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin /** 2655e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * Extra field name for the uid of who is requesting to install 265600235402a0a341426c0ef292209489e0922309ebChris Forbes * the package. 2657e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * 2658e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * @hide 2659e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin */ 266000235402a0a341426c0ef292209489e0922309ebChris Forbes public static final String EXTRA_VERIFICATION_INSTALLER_UID 26614fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes = "android.content.pm.extra.VERIFICATION_INSTALLER_UID"; 26624fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes 26634fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes /** 266443e3ae112f170f33e435fcabb899c6f9e13ddf99Chris Forbes * Extra field name for the package name of a package pending verification. 2665e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * 2666e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * @hide 266743e3ae112f170f33e435fcabb899c6f9e13ddf99Chris Forbes */ 2668cea605d373673878f6911906dce78b3c9bdce622Ian Romanick public static final String EXTRA_VERIFICATION_PACKAGE_NAME 2669e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin = "android.content.pm.extra.VERIFICATION_PACKAGE_NAME"; 2670e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin /** 267118002d9eda56801794cf471b30cfb9cd79fd167bMaxence Le Doré * Extra field name for the result of a verification, either 26727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #VERIFICATION_ALLOW}, or {@link #VERIFICATION_REJECT}. 2673de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes * Passed to package verifiers after a package is verified. 2674e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin */ 2675e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin public static final String EXTRA_VERIFICATION_RESULT 2676e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin = "android.content.pm.extra.VERIFICATION_RESULT"; 2677de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes 2678e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin /** 2679e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * Extra field name for the version code of a package pending verification. 2680e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * @deprecated Use {@link #EXTRA_VERIFICATION_LONG_VERSION_CODE} instead. 2681de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes * @hide 2682e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin */ 2683e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin @Deprecated 2684e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin public static final String EXTRA_VERIFICATION_VERSION_CODE 2685de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes = "android.content.pm.extra.VERIFICATION_VERSION_CODE"; 2686e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin 2687e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin /** 2688e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * Extra field name for the long version code of a package pending verification. 2689de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes * 2690de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes * @hide 2691de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes */ 2692de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes public static final String EXTRA_VERIFICATION_LONG_VERSION_CODE = 2693de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes "android.content.pm.extra.VERIFICATION_LONG_VERSION_CODE"; 2694de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes 2695de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes /** 2696de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes * Extra field name for the ID of a intent filter pending verification. 2697de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes * Passed to an intent filter verifier and is used to call back to 2698e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * {@link #verifyIntentFilter} 2699e2dce1a340c89d8c910eb7a632160097389c9735Ilia Mirkin * 2700de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes * @hide 2701de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes */ 2702de8948a0b6675a70ed035ef75267e2bb8c6814ceChris Forbes public static final String EXTRA_INTENT_FILTER_VERIFICATION_ID 27037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_ID"; 27047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 27057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 2706f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * Extra field name for the scheme used for an intent filter pending verification. Passed to 2707f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * an intent filter verifier and is used to construct the URI to verify against. 2708f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * 2709f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * Usually this is "https" 2710f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * 2711f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * @hide 27127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 27137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static final String EXTRA_INTENT_FILTER_VERIFICATION_URI_SCHEME 27147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_URI_SCHEME"; 27157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 27167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 27177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Extra field name for the host names to be used for an intent filter pending verification. 27187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Passed to an intent filter verifier and is used to construct the URI to verify the 27197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * intent filter. 27207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 27217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * This is a space delimited list of hosts. 27227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 2723e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 2724b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner */ 2725b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner public static final String EXTRA_INTENT_FILTER_VERIFICATION_HOSTS 2726b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_HOSTS"; 2727b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner 2728b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner /** 2729b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner * Extra field name for the package name to be used for an intent filter pending verification. 2730e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Passed to an intent filter verifier and is used to check the verification responses coming 2731e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * from the hosts. Each host response will need to include the package name of APK containing 2732e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * the intent filter. 2733e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 2734b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner * @hide 2735d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner */ 2736d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner public static final String EXTRA_INTENT_FILTER_VERIFICATION_PACKAGE_NAME 2737d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner = "android.content.pm.extra.INTENT_FILTER_VERIFICATION_PACKAGE_NAME"; 2738d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner 2739d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner /** 2740d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * The action used to request that the user approve a permission request 2741e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * from the application. 2742e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 2743e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 2744e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 2745d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner @SystemApi 27466c125973f31addf903921647e8244abccb944e1aMatt Turner public static final String ACTION_REQUEST_PERMISSIONS = 27476c125973f31addf903921647e8244abccb944e1aMatt Turner "android.content.pm.action.REQUEST_PERMISSIONS"; 27486c125973f31addf903921647e8244abccb944e1aMatt Turner 27496c125973f31addf903921647e8244abccb944e1aMatt Turner /** 27506c125973f31addf903921647e8244abccb944e1aMatt Turner * The names of the requested permissions. 27516c125973f31addf903921647e8244abccb944e1aMatt Turner * <p> 27526f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * <strong>Type:</strong> String[] 27536f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * </p> 27546f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * 27556f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * @hide 27566f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner */ 27576f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner @SystemApi 275806e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner public static final String EXTRA_REQUEST_PERMISSIONS_NAMES = 275906e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner "android.content.pm.extra.REQUEST_PERMISSIONS_NAMES"; 276006e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner 276106e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner /** 276206e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * The results from the permissions request. 276306e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * <p> 276406e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * <strong>Type:</strong> int[] of #PermissionResult 276506e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * </p> 276606e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * 276706e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * @hide 276806e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner */ 276906e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner @SystemApi 2770b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes public static final String EXTRA_REQUEST_PERMISSIONS_RESULTS 2771b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes = "android.content.pm.extra.REQUEST_PERMISSIONS_RESULTS"; 2772b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes 2773b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes /** 2774b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * String extra for {@link PackageInstallObserver} in the 'extras' Bundle in case of 2775b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}. This extra names the package which provides 2776b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * the existing definition for the permission. 2777b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * @hide 2778b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes */ 2779b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes public static final String EXTRA_FAILURE_EXISTING_PACKAGE 2780b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes = "android.content.pm.extra.FAILURE_EXISTING_PACKAGE"; 2781b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes 2782b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes /** 2783b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * String extra for {@link PackageInstallObserver} in the 'extras' Bundle in case of 2784b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}. This extra names the permission that is 2785b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * being redundantly defined by the package being installed. 2786b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * @hide 2787b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes */ 2788bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez public static final String EXTRA_FAILURE_EXISTING_PERMISSION 2789bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez = "android.content.pm.extra.FAILURE_EXISTING_PERMISSION"; 27902cacebaad3da88853e9b0d19522d24e11a7f4f91Iago Toral Quiroga 27912cacebaad3da88853e9b0d19522d24e11a7f4f91Iago Toral Quiroga /** 2792bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * Permission flag: The permission is set in its current state 2793bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * by the user and apps can still request it at runtime. 27942cacebaad3da88853e9b0d19522d24e11a7f4f91Iago Toral Quiroga * 27952cacebaad3da88853e9b0d19522d24e11a7f4f91Iago Toral Quiroga * @hide 2796bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez */ 2797bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez @SystemApi 27982cacebaad3da88853e9b0d19522d24e11a7f4f91Iago Toral Quiroga public static final int FLAG_PERMISSION_USER_SET = 1 << 0; 27992cacebaad3da88853e9b0d19522d24e11a7f4f91Iago Toral Quiroga 2800bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez /** 2801bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * Permission flag: The permission is set in its current state 2802075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * by the user and it is fixed, i.e. apps can no longer request 2803075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * this permission. 2804075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * 2805075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @hide 2806075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 2807075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin @SystemApi 2808075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin public static final int FLAG_PERMISSION_USER_FIXED = 1 << 1; 2809075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin 2810075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin /** 2811075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * Permission flag: The permission is set in its current state 2812075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * by device policy and neither apps nor the user can change 2813075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * its state. 2814075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * 2815075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @hide 2816075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 2817075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin @SystemApi 2818075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin public static final int FLAG_PERMISSION_POLICY_FIXED = 1 << 2; 2819075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin 2820075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin /** 2821075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * Permission flag: The permission is set in a granted state but 2822075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * access to resources it guards is restricted by other means to 2823075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * enable revoking a permission on legacy apps that do not support 2824075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * runtime permissions. If this permission is upgraded to runtime 2825075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * because the app was updated to support runtime permissions, the 2826075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * the permission will be revoked in the upgrade process. 2827075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * 2828075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @hide 2829075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 2830075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin @SystemApi 2831075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 1 << 3; 2832075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin 2833075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin /** 2834075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * Permission flag: The permission is set in its current state 2835075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * because the app is a component that is a part of the system. 2836075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * 2837075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @hide 2838075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 2839ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga @SystemApi 2840a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen public static final int FLAG_PERMISSION_SYSTEM_FIXED = 1 << 4; 2841f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen 2842a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen /** 2843a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * Permission flag: The permission is granted by default because it 2844f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * enables app functionality that is expected to work out-of-the-box 2845a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * for providing a smooth user experience. For example, the phone app 2846ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * is expected to have the phone permission. 2847ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * 2848a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * @hide 2849f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen */ 2850a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 2851a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 1 << 5; 2852f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen 2853a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen /** 2854ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * Permission flag: The permission has to be reviewed before any of 2855ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * the app components can run. 2856a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * 2857f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * @hide 2858a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen */ 2859a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 2860f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen public static final int FLAG_PERMISSION_REVIEW_REQUIRED = 1 << 6; 2861a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen 2862ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga /** 2863ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * Mask for all permission flags. 2864a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * 2865f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * @hide 2866a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen */ 2867a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen @SystemApi 2868f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen public static final int MASK_PERMISSION_FLAGS = 0xFF; 2869a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen 2870ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga /** 2871ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * This is a library that contains components apps can invoke. For 2872a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * example, a services for apps to bind to, or standard chooser UI, 2873f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * etc. This library is versioned and backwards compatible. Clients 2874a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * should check its version via {@link android.ext.services.Version 2875a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * #getVersionCode()} and avoid calling APIs added in later versions. 2876f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * 2877a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * @hide 2878ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga */ 2879ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga public static final String SYSTEM_SHARED_LIBRARY_SERVICES = "android.ext.services"; 2880a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen 2881f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen /** 2882a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * This is a library that contains components apps can dynamically 2883a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * load. For example, new widgets, helper classes, etc. This library 2884f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * is versioned and backwards compatible. Clients should check its 2885a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * version via {@link android.ext.shared.Version#getVersionCode()} 2886ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * and avoid calling APIs added in later versions. 2887ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * 2888a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * @hide 2889f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen */ 2890a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen public static final String SYSTEM_SHARED_LIBRARY_SHARED = "android.ext.shared"; 2891a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen 2892f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen /** 2893a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * Used when starting a process for an Activity. 2894ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * 2895ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * @hide 2896a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen */ 2897f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen public static final int NOTIFY_PACKAGE_USE_ACTIVITY = 0; 2898a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen 2899a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen /** 2900f821a3ec4f8dda55722f326f26855c2b24ca186cJordan Justen * Used when starting a process for a Service. 2901a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * 2902ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * @hide 2903ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga */ 2904ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré public static final int NOTIFY_PACKAGE_USE_SERVICE = 1; 29056709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke 29066709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke /** 29076709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * Used when moving a Service to the foreground. 29086709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * 29096709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * @hide 29106709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke */ 29116709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke public static final int NOTIFY_PACKAGE_USE_FOREGROUND_SERVICE = 2; 29126709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke 29136709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke /** 29146709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * Used when starting a process for a BroadcastReceiver. 29156709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * 29166709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * @hide 29176709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke */ 29186709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke public static final int NOTIFY_PACKAGE_USE_BROADCAST_RECEIVER = 3; 2919ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré 2920ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré /** 292173c74515879335625909d70e229e80caaac86aa3Maxence Le Doré * Used when starting a process for a ContentProvider. 29226709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * 29236709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * @hide 29246709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke */ 29256709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke public static final int NOTIFY_PACKAGE_USE_CONTENT_PROVIDER = 4; 29266709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke 29276709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke /** 29286709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * Used when starting a process for a BroadcastReceiver. 29296709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * 29306709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * @hide 29316709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke */ 29326709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke public static final int NOTIFY_PACKAGE_USE_BACKUP = 5; 29336709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke 29346709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke /** 29356709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * Used with Context.getClassLoader() across Android packages. 293673c74515879335625909d70e229e80caaac86aa3Maxence Le Doré * 293773c74515879335625909d70e229e80caaac86aa3Maxence Le Doré * @hide 2938eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré */ 29396709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke public static final int NOTIFY_PACKAGE_USE_CROSS_PACKAGE = 6; 29406709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke 29416709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke /** 29426709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * Used when starting a package within a process for Instrumentation. 29436709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * 29446709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * @hide 29456709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke */ 29466709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke public static final int NOTIFY_PACKAGE_USE_INSTRUMENTATION = 7; 29476709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke 29486709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke /** 29496709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * Total number of usage reasons. 29506709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * 29516709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * @hide 29526709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke */ 2953eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré public static final int NOTIFY_PACKAGE_USE_REASONS_COUNT = 8; 2954eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré 2955e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 2956e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Constant for specifying the highest installed package version code. 2957e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 295891f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen public static final int VERSION_CODE_HIGHEST = -1; 295991f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen 296091f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen /** 296191f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * Retrieve overall information about an application package that is 296291f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * installed on the system. 296391f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * 296491f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * @param packageName The full name (i.e. com.google.apps.contacts) of the 296591f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * desired package. 296691f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * @param flags Additional option flags to modify the data returned. 296706128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio * @return A PackageInfo object containing information about the package. If 296891f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the package 296991f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * is not found in the list of installed applications, the package 297091f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * information is retrieved from the list of uninstalled 297106128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio * applications (which includes installed applications as well as 297291f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * applications with data directory i.e. applications which had been 297391f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * deleted with {@code DONT_DELETE_DATA} flag set). 297491f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen * @throws NameNotFoundException if a package with the given name cannot be 297506128bdc212778f0471f65a421cf2a1df3616ff8Marc Di Luzio * found on the system. 297691f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen */ 297791f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen public abstract PackageInfo getPackageInfo(String packageName, @PackageInfoFlags int flags) 297891f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen throws NameNotFoundException; 297991f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen 2980e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 2981e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Retrieve overall information about an application package that is 2982f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * installed on the system. This method can be used for retrieving 2983f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * information about packages for which multiple versions can be installed 2984f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * at the time. Currently only packages hosting static shared libraries can 2985f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * have multiple installed versions. The method can also be used to get info 2986f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov * for a package that has a single version installed by passing 29875189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin * {@link #VERSION_CODE_HIGHEST} in the {@link VersionedPackage} 29885189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin * constructor. 29895189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin * 29905189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin * @param versionedPackage The versioned package for which to query. 29917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 29927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A PackageInfo object containing information about the package. If 299341b1d9a558d620df339738aa4aa569fe14298b83Boyan Ding * flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the package 299441b1d9a558d620df339738aa4aa569fe14298b83Boyan Ding * is not found in the list of installed applications, the package 29957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * information is retrieved from the list of uninstalled 29967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications (which includes installed applications as well as 29977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications with data directory i.e. applications which had been 29987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * deleted with {@code DONT_DELETE_DATA} flag set). 29997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name cannot be 30007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 30017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 30027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract PackageInfo getPackageInfo(VersionedPackage versionedPackage, 30037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @PackageInfoFlags int flags) throws NameNotFoundException; 30047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 30057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 30067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve overall information about an application package that is 30077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * installed on the system. 30087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 30097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The full name (i.e. com.google.apps.contacts) of the 30107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * desired package. 30117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 30127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user id. 30137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A PackageInfo object containing information about the package. If 30147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the package 30157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is not found in the list of installed applications, the package 30167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * information is retrieved from the list of uninstalled 30177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications (which includes installed applications as well as 30187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications with data directory i.e. applications which had been 3019787ac4207e30a18b4286faa2140d06b6fb8daf36Vinson Lee * deleted with {@code DONT_DELETE_DATA} flag set). 30207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name cannot be 30217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 30227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 30237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 3024e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS) 3025e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract PackageInfo getPackageInfoAsUser(String packageName, 3026e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez @PackageInfoFlags int flags, @UserIdInt int userId) throws NameNotFoundException; 302758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres 3028e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 30295854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * Map from the current package names in use on the device to whatever 30305854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * the current canonical name of that package is. 3031e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param names Array of current names to be mapped. 3032e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @return Returns an array of the same size as the original, containing 3033e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * the canonical name for each package. 3034e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 3035e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract String[] currentToCanonicalPackageNames(String[] names); 3036e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 3037e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 3038e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Map from a packages canonical name to the current name in use on the device. 3039e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param names Array of new names to be mapped. 3040e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @return Returns an array of the same size as the original, containing 3041e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * the current name for each package. 3042e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 3043e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract String[] canonicalToCurrentPackageNames(String[] names); 3044e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 3045e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 3046e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Returns a "good" intent to launch a front-door activity in a package. 3047e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * This is used, for example, to implement an "open" button when browsing 3048e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * through packages. The current implementation looks first for a main 3049e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * activity in the category {@link Intent#CATEGORY_INFO}, and next for a 3050e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * main activity in the category {@link Intent#CATEGORY_LAUNCHER}. Returns 3051e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * <code>null</code> if neither are found. 3052e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * 3053e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param packageName The name of the package to inspect. 3054e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * 3055e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @return A fully-qualified {@link Intent} that can be used to launch the 3056e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * main activity in the package. Returns <code>null</code> if the package 3057e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * does not contain such an activity, or if <em>packageName</em> is not 3058e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * recognized. 3059e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 3060e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract @Nullable Intent getLaunchIntentForPackage(@NonNull String packageName); 3061e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 3062e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 3063e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Return a "good" intent to launch a front-door Leanback activity in a 3064e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * package, for use for example to implement an "open" button when browsing 3065e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * through packages. The current implementation will look for a main 3066e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * activity in the category {@link Intent#CATEGORY_LEANBACK_LAUNCHER}, or 306758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * return null if no main leanback activities are found. 3068e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * 3069e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param packageName The name of the package to inspect. 3070c16c719647664abf7531896770c31eda1dbe7a58Brian Paul * @return Returns either a fully-qualified Intent that can be used to launch 3071ac089126b9b647f930ee2657aa16ea8e8f6a5dd7Jason Ekstrand * the main Leanback activity in the package, or null if the package 307237c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * does not contain such an activity. 307337c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin */ 307437c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin public abstract @Nullable Intent getLeanbackLaunchIntentForPackage(@NonNull String packageName); 307558a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres 30765854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 3077e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Return a "good" intent to launch a front-door Car activity in a 3078e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * package, for use for example to implement an "open" button when browsing 3079e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * through packages. The current implementation will look for a main 3080e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * activity in the category {@link Intent#CATEGORY_CAR_LAUNCHER}, or 3081e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * return null if no main car activities are found. 3082e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * 3083e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param packageName The name of the package to inspect. 3084e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @return Returns either a fully-qualified Intent that can be used to launch 3085e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * the main Car activity in the package, or null if the package 3086e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * does not contain such an activity. 3087e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @hide 308858a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres */ 308958a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres public abstract @Nullable Intent getCarLaunchIntentForPackage(@NonNull String packageName); 309058a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres 3091e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 30925854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * Return an array of all of the POSIX secondary group IDs that have been 30935854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * assigned to the given package. 3094e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * <p> 3095e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Note that the same package may have different GIDs under different 309658a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * {@link UserHandle} on the same device. 309758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * 3098e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param packageName The full name (i.e. com.google.apps.contacts) of the 3099e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * desired package. 3100e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @return Returns an int array of the assigned GIDs, or null if there are 31015854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * none. 31025854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @throws NameNotFoundException if a package with the given name cannot be 3103e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * found on the system. 310476a09c87c14f65d8ad8bd805ef03101f4455a24fFrancisco Jerez */ 310576a09c87c14f65d8ad8bd805ef03101f4455a24fFrancisco Jerez public abstract int[] getPackageGids(@NonNull String packageName) 3106e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez throws NameNotFoundException; 310758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres 31085854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 31095854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * Return an array of all of the POSIX secondary group IDs that have been 3110e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * assigned to the given package. 3111e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * <p> 311258a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * Note that the same package may have different GIDs under different 31135854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * {@link UserHandle} on the same device. 31145854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 3115e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param packageName The full name (i.e. com.google.apps.contacts) of the 3116e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * desired package. 311758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * @return Returns an int array of the assigned gids, or null if there are 31185854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * none. 31195854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @throws NameNotFoundException if a package with the given name cannot be 3120e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * found on the system. 3121e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 312258a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres public abstract int[] getPackageGids(String packageName, @PackageInfoFlags int flags) 31235854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick throws NameNotFoundException; 31245854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 3125e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 3126e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Return the UID associated with the given package name. 312758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * <p> 31285854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * Note that the same package will have different UIDs under different 31295854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * {@link UserHandle} on the same device. 3130e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * 3131e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param packageName The full name (i.e. com.google.apps.contacts) of the 313258a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * desired package. 31335854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @return Returns an integer UID who owns the given package name. 31345854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @throws NameNotFoundException if a package with the given name can not be 3135e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * found on the system. 3136e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 3137e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract int getPackageUid(String packageName, @PackageInfoFlags int flags) 313858a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres throws NameNotFoundException; 313981c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez 314081c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez /** 31415854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * Return the UID associated with the given package name. 31425854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * <p> 3143e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Note that the same package will have different UIDs under different 3144e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * {@link UserHandle} on the same device. 3145e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * 314658a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * @param packageName The full name (i.e. com.google.apps.contacts) of the 31475854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * desired package. 31485854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @param userId The user handle identifier to look up the package under. 314958a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * @return Returns an integer UID who owns the given package name. 315058a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * @throws NameNotFoundException if a package with the given name can not be 315158a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * found on the system. 3152f142e64b2938ab3ebc42fd40436a1de74e3ed2e2Martin Peres * @hide 31535854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick */ 31545854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick public abstract int getPackageUidAsUser(String packageName, @UserIdInt int userId) 315537c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin throws NameNotFoundException; 315637c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin 315737c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin /** 315837c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * Return the UID associated with the given package name. 315937c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * <p> 31605854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * Note that the same package will have different UIDs under different 31615854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * {@link UserHandle} on the same device. 3162e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * 3163e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param packageName The full name (i.e. com.google.apps.contacts) of the 31647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * desired package. 31657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user handle identifier to look up the package under. 31667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns an integer UID who owns the given package name. 31677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name can not be 31687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 31697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 31707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 31717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract int getPackageUidAsUser(String packageName, @PackageInfoFlags int flags, 31727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @UserIdInt int userId) throws NameNotFoundException; 31737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 31747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 31757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all of the information we know about a particular permission. 31767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 3177249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner * @param name The fully qualified name (i.e. com.google.permission.LOGIN) 3178249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner * of the permission you are interested in. 3179249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner * @param flags Additional option flags to modify the data returned. 3180249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner * @return Returns a {@link PermissionInfo} containing information about the 3181249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner * permission. 3182249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner * @throws NameNotFoundException if a package with the given name cannot be 31835561251b58c976a70125bb07dc1c6cc2bd2541f4Matt Turner * found on the system. 31847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 31855561251b58c976a70125bb07dc1c6cc2bd2541f4Matt Turner public abstract PermissionInfo getPermissionInfo(String name, @PermissionInfoFlags int flags) 31867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 31877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 31887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 31895561251b58c976a70125bb07dc1c6cc2bd2541f4Matt Turner * Query for all of the permissions associated with a particular group. 31907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 31915561251b58c976a70125bb07dc1c6cc2bd2541f4Matt Turner * @param group The fully qualified name (i.e. com.google.permission.LOGIN) 31927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * of the permission group you are interested in. Use null to 31937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * find all of the permissions not associated with a group. 31947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 31955561251b58c976a70125bb07dc1c6cc2bd2541f4Matt Turner * @return Returns a list of {@link PermissionInfo} containing information 31967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * about all of the permissions in the given group. 31975561251b58c976a70125bb07dc1c6cc2bd2541f4Matt Turner * @throws NameNotFoundException if a package with the given name cannot be 31987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 31997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 32007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<PermissionInfo> queryPermissionsByGroup(String group, 3201e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @PermissionInfoFlags int flags) throws NameNotFoundException; 3202e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 3203e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 3204e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Returns true if Permission Review Mode is enabled, false otherwise. 3205e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 3206e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 32077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 32087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @TestApi 32097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract boolean isPermissionReviewModeEnabled(); 32107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 32117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 3212e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Retrieve all of the information we know about a particular group of 3213e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * permissions. 32147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 32157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param name The fully qualified name (i.e. 32167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * com.google.permission_group.APPS) of the permission you are 32177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * interested in. 32187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 32197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a {@link PermissionGroupInfo} containing information 32207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * about the permission. 32217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name cannot be 32227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 32237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 32247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract PermissionGroupInfo getPermissionGroupInfo(String name, 32257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @PermissionGroupInfoFlags int flags) throws NameNotFoundException; 32267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 32277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 32287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all of the known permission groups in the system. 32297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 32307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 32317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a list of {@link PermissionGroupInfo} containing 32327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * information about all of the known permission groups. 32337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 32347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<PermissionGroupInfo> getAllPermissionGroups( 32357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @PermissionGroupInfoFlags int flags); 32367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 32377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 32387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all of the information we know about a particular 32397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package/application. 32407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 32417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The full name (i.e. com.google.apps.contacts) of an 32427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * application. 32437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 32447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return An {@link ApplicationInfo} containing information about the 32457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package. If flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if 32467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the package is not found in the list of installed applications, 32477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the application information is retrieved from the list of 32487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * uninstalled applications (which includes installed applications 32497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * as well as applications with data directory i.e. applications 32507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * which had been deleted with {@code DONT_DELETE_DATA} flag set). 32517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name cannot be 32527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 32537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 32547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract ApplicationInfo getApplicationInfo(String packageName, 32557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ApplicationInfoFlags int flags) throws NameNotFoundException; 32567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 32577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** {@hide} */ 32587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract ApplicationInfo getApplicationInfoAsUser(String packageName, 3259395b9410860371a64d6b5f2d50679f29eb41729eBrian Paul @ApplicationInfoFlags int flags, @UserIdInt int userId) throws NameNotFoundException; 32607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 3261395b9410860371a64d6b5f2d50679f29eb41729eBrian Paul /** 326295629223761e076323faab93f72c955e61a38a75Francisco Jerez * Retrieve all of the information we know about a particular activity 326395629223761e076323faab93f72c955e61a38a75Francisco Jerez * class. 326495629223761e076323faab93f72c955e61a38a75Francisco Jerez * 32655854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @param component The full component name (i.e. 326695629223761e076323faab93f72c955e61a38a75Francisco Jerez * com.google.apps.contacts/com.google.apps.contacts. 326795629223761e076323faab93f72c955e61a38a75Francisco Jerez * ContactsList) of an Activity class. 32685854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @param flags Additional option flags to modify the data returned. 32697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return An {@link ActivityInfo} containing information about the 32707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * activity. 32717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name cannot be 32727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 32737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 32747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract ActivityInfo getActivityInfo(ComponentName component, 32757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ComponentInfoFlags int flags) throws NameNotFoundException; 32767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 32777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 32787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all of the information we know about a particular receiver 32797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * class. 32807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 32817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param component The full component name (i.e. 32827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * com.google.apps.calendar/com.google.apps.calendar. 32837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * CalendarAlarm) of a Receiver class. 32847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 32857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return An {@link ActivityInfo} containing information about the 32867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * receiver. 32877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name cannot be 32887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 3289e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 3290e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract ActivityInfo getReceiverInfo(ComponentName component, 3291e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @ComponentInfoFlags int flags) throws NameNotFoundException; 3292e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 3293e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 3294e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Retrieve all of the information we know about a particular service class. 3295e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 32967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param component The full component name (i.e. 32979e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * com.google.apps.media/com.google.apps.media. 32989e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * BackgroundPlayback) of a Service class. 32997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 33007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A {@link ServiceInfo} object containing information about the 33017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * service. 33027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name cannot be 33037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 33047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 33057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract ServiceInfo getServiceInfo(ComponentName component, 33067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ComponentInfoFlags int flags) throws NameNotFoundException; 33077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 33087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 33097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all of the information we know about a particular content 33107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * provider class. 33117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 33127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param component The full component name (i.e. 33137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * com.google.providers.media/com.google.providers.media. 33147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * MediaProvider) of a ContentProvider class. 33157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 33167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A {@link ProviderInfo} object containing information about the 33177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * provider. 33187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name cannot be 33197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 33207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 33217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract ProviderInfo getProviderInfo(ComponentName component, 33227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ComponentInfoFlags int flags) throws NameNotFoundException; 33237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 33247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 33257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Return a List of all packages that are installed on the device. 33267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 33277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 33287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A List of PackageInfo objects, one for each installed package, 33297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * containing information about the package. In the unlikely case 33307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * there are no installed packages, an empty list is returned. If 33317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * flag {@code MATCH_UNINSTALLED_PACKAGES} is set, the package 33327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * information is retrieved from the list of uninstalled 33337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications (which includes installed applications as well as 33347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications with data directory i.e. applications which had been 33357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * deleted with {@code DONT_DELETE_DATA} flag set). 33367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 33377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<PackageInfo> getInstalledPackages(@PackageInfoFlags int flags); 33387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 33397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 33407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Return a List of all installed packages that are currently holding any of 33417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the given permissions. 33427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 33437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 33447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A List of PackageInfo objects, one for each installed package 33457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * that holds any of the permissions that were provided, containing 33467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * information about the package. If no installed packages hold any 33477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * of the permissions, an empty list is returned. If flag 33487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code MATCH_UNINSTALLED_PACKAGES} is set, the package 33497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * information is retrieved from the list of uninstalled 33507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications (which includes installed applications as well as 33517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications with data directory i.e. applications which had been 33527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * deleted with {@code DONT_DELETE_DATA} flag set). 33537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 33542795fbcae302cd8821b23821ebf8a2b256ff10d5Kenneth Graunke public abstract List<PackageInfo> getPackagesHoldingPermissions( 33557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke String[] permissions, @PackageInfoFlags int flags); 33567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 3357d877c643bea7a40e37d13d8a967c06fd006d1622Matt Turner /** 33587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Return a List of all packages that are installed on the device, for a 3359d877c643bea7a40e37d13d8a967c06fd006d1622Matt Turner * specific user. 33607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 3361d877c643bea7a40e37d13d8a967c06fd006d1622Matt Turner * @param flags Additional option flags to modify the data returned. 33627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user for whom the installed packages are to be listed 33632795fbcae302cd8821b23821ebf8a2b256ff10d5Kenneth Graunke * @return A List of PackageInfo objects, one for each installed package, 33642795fbcae302cd8821b23821ebf8a2b256ff10d5Kenneth Graunke * containing information about the package. In the unlikely case 33657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * there are no installed packages, an empty list is returned. If 33667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * flag {@code MATCH_UNINSTALLED_PACKAGES} is set, the package 3367c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * information is retrieved from the list of uninstalled 3368c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * applications (which includes installed applications as well as 3369c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * applications with data directory i.e. applications which had been 3370c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * deleted with {@code DONT_DELETE_DATA} flag set). 3371c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @hide 3372c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick */ 3373c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick @SystemApi 3374c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) 337595629223761e076323faab93f72c955e61a38a75Francisco Jerez public abstract List<PackageInfo> getInstalledPackagesAsUser(@PackageInfoFlags int flags, 337695629223761e076323faab93f72c955e61a38a75Francisco Jerez @UserIdInt int userId); 337795629223761e076323faab93f72c955e61a38a75Francisco Jerez 337895629223761e076323faab93f72c955e61a38a75Francisco Jerez /** 337995629223761e076323faab93f72c955e61a38a75Francisco Jerez * Check whether a particular package has been granted a particular 3380c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * permission. 3381c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * 3382c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @param permName The name of the permission you are checking for. 3383c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @param pkgName The name of the package you are checking against. 3384c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * 3385c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @return If the package has the permission, PERMISSION_GRANTED is 3386c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * returned. If it does not have the permission, PERMISSION_DENIED 3387c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * is returned. 3388c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * 3389c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @see #PERMISSION_GRANTED 339095629223761e076323faab93f72c955e61a38a75Francisco Jerez * @see #PERMISSION_DENIED 339195629223761e076323faab93f72c955e61a38a75Francisco Jerez */ 339295629223761e076323faab93f72c955e61a38a75Francisco Jerez @CheckResult 339395629223761e076323faab93f72c955e61a38a75Francisco Jerez public abstract @PermissionResult int checkPermission(String permName, String pkgName); 339495629223761e076323faab93f72c955e61a38a75Francisco Jerez 339595629223761e076323faab93f72c955e61a38a75Francisco Jerez /** 339695629223761e076323faab93f72c955e61a38a75Francisco Jerez * Checks whether a particular permissions has been revoked for a 339795629223761e076323faab93f72c955e61a38a75Francisco Jerez * package by policy. Typically the device owner or the profile owner 339895629223761e076323faab93f72c955e61a38a75Francisco Jerez * may apply such a policy. The user cannot grant policy revoked 339995629223761e076323faab93f72c955e61a38a75Francisco Jerez * permissions, hence the only way for an app to get such a permission 340095629223761e076323faab93f72c955e61a38a75Francisco Jerez * is by a policy change. 340195629223761e076323faab93f72c955e61a38a75Francisco Jerez * 34027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param permName The name of the permission you are checking for. 34037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param pkgName The name of the package you are checking against. 34047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 34057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Whether the permission is restricted by policy. 34067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 34077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @CheckResult 34087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract boolean isPermissionRevokedByPolicy(@NonNull String permName, 34092795fbcae302cd8821b23821ebf8a2b256ff10d5Kenneth Graunke @NonNull String pkgName); 34107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 34117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 34127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Gets the package name of the component controlling runtime permissions. 34137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 34147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return The package name. 34157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 34167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 34177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 34187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @TestApi 34197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract String getPermissionControllerPackageName(); 3420a6046d217d14130a46f6ffe42992fd745551a928Francisco Jerez 34217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 34227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Add a new dynamic permission to the system. For this to work, your 34237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package must have defined a permission tree through the 34247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.R.styleable#AndroidManifestPermissionTree 34257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <permission-tree>} tag in its manifest. A package can only add 34267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * permissions to trees that were defined by either its own package or 34277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * another with the same user id; a permission is in a tree if it 34287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * matches the name of the permission tree + ".": for example, 34297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * "com.foo.bar" is a member of the permission tree "com.foo". 34307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 34317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p>It is good to make your permission tree name descriptive, because you 34327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * are taking possession of that entire set of permission names. Thus, it 34337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * must be under a domain you control, with a suffix that will not match 34347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * any normal permissions that may be declared in any applications that 34357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * are part of that domain. 34367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 34377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p>New permissions must be added before 34387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * any .apks are installed that use those permissions. Permissions you 34397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * add through this method are remembered across reboots of the device. 34407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If the given permission already exists, the info you supply here 34417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * will be used to update it. 34427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 34437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param info Description of the permission to be added. 34447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 34457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns true if a new permission was created, false if an 34467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * existing one was updated. 3447ae9f73ea40094fe3010b3a774595f72fe87a10dbKenneth Graunke * 34487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws SecurityException if you are not allowed to add the 34497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * given permission name. 34507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 34517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #removePermission(String) 34527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 3453d877c643bea7a40e37d13d8a967c06fd006d1622Matt Turner public abstract boolean addPermission(PermissionInfo info); 3454d877c643bea7a40e37d13d8a967c06fd006d1622Matt Turner 34557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 34567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Like {@link #addPermission(PermissionInfo)} but asynchronously 34577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * persists the package manager state after returning from the call, 34587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * allowing it to return quicker and batch a series of adds at the 3459d877c643bea7a40e37d13d8a967c06fd006d1622Matt Turner * expense of no guarantee the added permission will be retained if 34607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the device is rebooted before it is written. 34617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 34627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract boolean addPermissionAsync(PermissionInfo info); 34637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 34647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 34657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Removes a permission that was previously added with 34667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #addPermission(PermissionInfo)}. The same ownership rules apply 34677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * -- you are only allowed to remove permissions that you are allowed 34687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * to add. 34697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 3470326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * @param name The name of the permission to remove. 3471326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * 3472326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * @throws SecurityException if you are not allowed to remove the 3473326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * given permission name. 3474326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * 3475326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * @see #addPermission(PermissionInfo) 3476326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund */ 3477326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund public abstract void removePermission(String name); 3478326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund 3479326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund /** 3480326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * Permission flags set when granting or revoking a permission. 3481326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * 3482326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * @hide 3483326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund */ 3484326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund @SystemApi 3485326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund @IntDef(prefix = { "FLAG_PERMISSION_" }, value = { 3486326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund FLAG_PERMISSION_USER_SET, 3487326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund FLAG_PERMISSION_USER_FIXED, 3488326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund FLAG_PERMISSION_POLICY_FIXED, 3489326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund FLAG_PERMISSION_REVOKE_ON_UPGRADE, 3490326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund FLAG_PERMISSION_SYSTEM_FIXED, 3491326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund FLAG_PERMISSION_GRANTED_BY_DEFAULT 3492326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund }) 3493326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund @Retention(RetentionPolicy.SOURCE) 3494326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund public @interface PermissionFlags {} 3495326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund 3496326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund /** 3497326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * Grant a runtime permission to an application which the application does not 3498326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * already have. The permission must have been requested by the application. 3499326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * If the application is not allowed to hold the permission, a {@link 3500326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * java.lang.SecurityException} is thrown. If the package or permission is 3501326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * invalid, a {@link java.lang.IllegalArgumentException} is thrown. 3502326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * <p> 3503326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * <strong>Note: </strong>Using this API requires holding 3504326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * android.permission.GRANT_RUNTIME_PERMISSIONS and if the user id is 3505326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * not the current user android.permission.INTERACT_ACROSS_USERS_FULL. 3506326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * </p> 3507326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * 3508326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * @param packageName The package to which to grant the permission. 3509326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * @param permissionName The permission name to grant. 3510326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * @param user The user for which to grant the permission. 3511326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * 3512326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * @see #revokeRuntimePermission(String, String, android.os.UserHandle) 3513326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * 3514326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * @hide 3515326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund */ 3516326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund @SystemApi 3517326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) 3518326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund public abstract void grantRuntimePermission(@NonNull String packageName, 3519326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund @NonNull String permissionName, @NonNull UserHandle user); 35207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 35217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 35227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Revoke a runtime permission that was previously granted by {@link 35237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * #grantRuntimePermission(String, String, android.os.UserHandle)}. The 35247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * permission must have been requested by and granted to the application. 35257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If the application is not allowed to hold the permission, a {@link 3526326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * java.lang.SecurityException} is thrown. If the package or permission is 3527326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * invalid, a {@link java.lang.IllegalArgumentException} is thrown. 3528326e303175ab700d59602f0e344e8d84e15f1aa8Erik Faye-Lund * <p> 35297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <strong>Note: </strong>Using this API requires holding 35307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * android.permission.REVOKE_RUNTIME_PERMISSIONS and if the user id is 35317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * not the current user android.permission.INTERACT_ACROSS_USERS_FULL. 35327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * </p> 35337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 35347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The package from which to revoke the permission. 35357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param permissionName The permission name to revoke. 35367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param user The user for which to revoke the permission. 35377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 35387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #grantRuntimePermission(String, String, android.os.UserHandle) 35397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 35407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 35417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 35427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 35437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) 35447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void revokeRuntimePermission(@NonNull String packageName, 35457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @NonNull String permissionName, @NonNull UserHandle user); 35467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 35477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 35487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Gets the state flags associated with a permission. 35497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 35507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param permissionName The permission for which to get the flags. 35517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The package name for which to get the flags. 35527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param user The user for which to get permission flags. 35537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return The permission flags. 35547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 35557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 35567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 35577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 35587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(anyOf = { 35597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, 35607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS 35617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke }) 35627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @PermissionFlags int getPermissionFlags(String permissionName, 35639807f502eb7a023be619a14119388b2a43271b0eJason Ekstrand String packageName, @NonNull UserHandle user); 35649807f502eb7a023be619a14119388b2a43271b0eJason Ekstrand 35659807f502eb7a023be619a14119388b2a43271b0eJason Ekstrand /** 35669807f502eb7a023be619a14119388b2a43271b0eJason Ekstrand * Updates the flags associated with a permission by replacing the flags in 35679807f502eb7a023be619a14119388b2a43271b0eJason Ekstrand * the specified mask with the provided flag values. 35689807f502eb7a023be619a14119388b2a43271b0eJason Ekstrand * 35699807f502eb7a023be619a14119388b2a43271b0eJason Ekstrand * @param permissionName The permission for which to update the flags. 3570d4983390a869c3051929858a8b783be53d46b722Haixia Shi * @param packageName The package name for which to update the flags. 3571d4983390a869c3051929858a8b783be53d46b722Haixia Shi * @param flagMask The flags which to replace. 35729807f502eb7a023be619a14119388b2a43271b0eJason Ekstrand * @param flagValues The flags with which to replace. 3573d4983390a869c3051929858a8b783be53d46b722Haixia Shi * @param user The user for which to update the permission flags. 35749807f502eb7a023be619a14119388b2a43271b0eJason Ekstrand * 35759807f502eb7a023be619a14119388b2a43271b0eJason Ekstrand * @hide 35767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 35777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 35787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(anyOf = { 35797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, 35807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS 35817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke }) 35827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void updatePermissionFlags(String permissionName, 35837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke String packageName, @PermissionFlags int flagMask, @PermissionFlags int flagValues, 35847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @NonNull UserHandle user); 35857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 35867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 35877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Gets whether you should show UI with rationale for requesting a permission. 35887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * You should do this only if you do not have the permission and the context in 35897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * which the permission is requested does not clearly communicate to the user 35907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * what would be the benefit from grating this permission. 35917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 35927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param permission A permission your app wants to request. 35937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Whether you can show permission rationale UI. 35947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 35957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 35967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 35977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract boolean shouldShowRequestPermissionRationale(String permission); 35987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 35997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 36007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Returns an {@link android.content.Intent} suitable for passing to 36017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.app.Activity#startActivityForResult(android.content.Intent, int)} 36027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * which prompts the user to grant permissions to this application. 36037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 36047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NullPointerException if {@code permissions} is {@code null} or empty. 36057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 36067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 36077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 36087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public Intent buildRequestPermissionsIntent(@NonNull String[] permissions) { 36097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke if (ArrayUtils.isEmpty(permissions)) { 36107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throw new IllegalArgumentException("permission cannot be null or empty"); 36117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 36127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke Intent intent = new Intent(ACTION_REQUEST_PERMISSIONS); 36137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke intent.putExtra(EXTRA_REQUEST_PERMISSIONS_NAMES, permissions); 36147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke intent.setPackage(getPermissionControllerPackageName()); 36157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke return intent; 36167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 36177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 36187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 36197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Compare the signatures of two packages to determine if the same 36209e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * signature appears in both of them. If they do contain the same 36217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * signature, then they are allowed special privileges when working 36227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * with each other: they can share the same user-id, run instrumentation 36237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * against each other, etc. 36247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 36257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param pkg1 First package name whose signature will be compared. 36267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param pkg2 Second package name whose signature will be compared. 3627e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 3628e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @return Returns an integer indicating whether all signatures on the 36297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * two packages match. The value is >= 0 ({@link #SIGNATURE_MATCH}) if 36307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * all signatures match or < 0 if there is not a match ({@link 36317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * #SIGNATURE_NO_MATCH} or {@link #SIGNATURE_UNKNOWN_PACKAGE}). 3632e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 3633e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @see #checkSignatures(int, int) 3634e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 3635e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @CheckResult 3636e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract @SignatureResult int checkSignatures(String pkg1, String pkg2); 3637e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 3638e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 3639e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Like {@link #checkSignatures(String, String)}, but takes UIDs of 36407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the two packages to be checked. This can be useful, for example, 36417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * when doing the check in an IPC, where the UID is the only identity 364234c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * available. It is functionally identical to determining the package 364334c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * associated with the UIDs and checking their signatures. 36447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 364534c2c7c61e738a080451cd78bd5e7bc760bee854Ilia Mirkin * @param uid1 First UID whose signature will be compared. 36467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param uid2 Second UID whose signature will be compared. 36477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 36487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns an integer indicating whether all signatures on the 3649e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * two packages match. The value is >= 0 ({@link #SIGNATURE_MATCH}) if 36507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * all signatures match or < 0 if there is not a match ({@link 36517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * #SIGNATURE_NO_MATCH} or {@link #SIGNATURE_UNKNOWN_PACKAGE}). 36527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 3653e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @see #checkSignatures(String, String) 36547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 36557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @CheckResult 36567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @SignatureResult int checkSignatures(int uid1, int uid2); 36577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 36587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 36597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the names of all packages that are associated with a particular 36607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * user id. In most cases, this will be a single package name, the package 36617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * that has been assigned that user id. Where there are multiple packages 36627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * sharing the same user id through the "sharedUserId" mechanism, all 36637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * packages with that id will be returned. 36647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 36657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param uid The user id for which you would like to retrieve the 36667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * associated packages. 36679e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * 36687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns an array of one or more packages assigned to the user 36697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * id, or null if there are no known packages with the given id. 36707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 36717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @Nullable String[] getPackagesForUid(int uid); 36727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 36737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 36749e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * Retrieve the official name associated with a uid. This name is 36757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * guaranteed to never change, though it is possible for the underlying 36767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * uid to be changed. That is, if you are storing information about 36777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * uids in persistent storage, you should use the string returned 36787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * by this function instead of the raw uid. 36797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 36807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param uid The uid for which you would like to retrieve a name. 36817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a unique name for the given uid, or null if the 36827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * uid is not currently assigned. 36837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 36847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @Nullable String getNameForUid(int uid); 36857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 36867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 36877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieves the official names associated with each given uid. 36887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getNameForUid(int) 36897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 36907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 36917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 3692e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract @Nullable String[] getNamesForUids(int[] uids); 36937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 36947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 36957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Return the user id associated with a shared user name. Multiple 36967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications can specify a shared user name in their manifest and thus 3697e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * end up using a common uid. This might be used for new applications 36987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * that use an existing shared user name and need to know the uid of the 36997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * shared user. 37007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 37017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param sharedUserName The shared user name whose uid is to be retrieved. 37027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the UID associated with the shared user. 37037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name cannot be 37047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 370556fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * @hide 370656fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner */ 370756fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner public abstract int getUidForSharedUser(String sharedUserName) 37087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 37097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 37107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 37117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Return a List of all application packages that are installed on the 371256fff7063dd05232cf86aef9d2ae1c04c52a8360Matt Turner * device. If flag GET_UNINSTALLED_PACKAGES has been set, a list of all 37137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications including those deleted with {@code DONT_DELETE_DATA} 3714fd183fa02c4430e439faf6a5195f5008d34db987Matt Turner * (partially installed apps with data directory) will be returned. 3715fd183fa02c4430e439faf6a5195f5008d34db987Matt Turner * 3716fd183fa02c4430e439faf6a5195f5008d34db987Matt Turner * @param flags Additional option flags to modify the data returned. 3717fd183fa02c4430e439faf6a5195f5008d34db987Matt Turner * @return A List of ApplicationInfo objects, one for each installed 3718fd183fa02c4430e439faf6a5195f5008d34db987Matt Turner * application. In the unlikely case there are no installed 3719fd183fa02c4430e439faf6a5195f5008d34db987Matt Turner * packages, an empty list is returned. If flag 3720fd183fa02c4430e439faf6a5195f5008d34db987Matt Turner * {@code MATCH_UNINSTALLED_PACKAGES} is set, the application 3721fd183fa02c4430e439faf6a5195f5008d34db987Matt Turner * information is retrieved from the list of uninstalled 37227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications (which includes installed applications as well as 37237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * applications with data directory i.e. applications which had been 37247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * deleted with {@code DONT_DELETE_DATA} flag set). 37257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 37267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<ApplicationInfo> getInstalledApplications(@ApplicationInfoFlags int flags); 3727e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 37287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 37297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Return a List of all application packages that are installed on the 37307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * device, for a specific user. If flag GET_UNINSTALLED_PACKAGES has been 3731e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * set, a list of all applications including those deleted with 37327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code DONT_DELETE_DATA} (partially installed apps with data directory) 37337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * will be returned. 37347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 37357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 3736e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param userId The user for whom the installed applications are to be 3737e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * listed 3738e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @return A List of ApplicationInfo objects, one for each installed 3739e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * application. In the unlikely case there are no installed 37407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * packages, an empty list is returned. If flag 37417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code MATCH_UNINSTALLED_PACKAGES} is set, the application 37427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * information is retrieved from the list of uninstalled 3743e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * applications (which includes installed applications as well as 3744e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * applications with data directory i.e. applications which had been 3745e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * deleted with {@code DONT_DELETE_DATA} flag set). 3746e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 37477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 37487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<ApplicationInfo> getInstalledApplicationsAsUser( 37497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ApplicationInfoFlags int flags, @UserIdInt int userId); 37507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 3751e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 3752e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Gets the instant applications the user recently used. 3753e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 3754e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @return The instant app list. 3755e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 3756e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 3757e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 37587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 37597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(Manifest.permission.ACCESS_INSTANT_APPS) 37607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @NonNull List<InstantAppInfo> getInstantApps(); 37617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 37627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 37637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Gets the icon for an instant application. 37647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 37657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The app package name. 3766e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 37677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 37687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 37697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 37707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(Manifest.permission.ACCESS_INSTANT_APPS) 3771e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract @Nullable Drawable getInstantAppIcon(String packageName); 37727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 37737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 37747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Gets whether this application is an instant app. 37757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 37767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Whether caller is an instant app. 37777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 37787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #isInstantApp(String) 37797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #updateInstantAppCookie(byte[]) 37807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getInstantAppCookie() 37817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getInstantAppCookieMaxBytes() 3782e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 37837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract boolean isInstantApp(); 3784e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 37857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 37867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Gets whether the given package is an instant app. 37877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 37887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The package to check 37897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Whether the given package is an instant app. 3790e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 37917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #isInstantApp() 37927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #updateInstantAppCookie(byte[]) 3793e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @see #getInstantAppCookie() 37947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getInstantAppCookieMaxBytes() 37957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #clearInstantAppCookie() 37967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 37977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract boolean isInstantApp(String packageName); 37987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 37997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 38007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Gets the maximum size in bytes of the cookie data an instant app 3801e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * can store on the device. 38027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return The max cookie size in bytes. 3804e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 38057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #isInstantApp() 38067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #isInstantApp(String) 38077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #updateInstantAppCookie(byte[]) 380884ed3819a42042757a32cae4260c26c4fb3b673cConnor Abbott * @see #getInstantAppCookie() 380984ed3819a42042757a32cae4260c26c4fb3b673cConnor Abbott * @see #clearInstantAppCookie() 381084ed3819a42042757a32cae4260c26c4fb3b673cConnor Abbott */ 381184ed3819a42042757a32cae4260c26c4fb3b673cConnor Abbott public abstract int getInstantAppCookieMaxBytes(); 381284ed3819a42042757a32cae4260c26c4fb3b673cConnor Abbott 381384ed3819a42042757a32cae4260c26c4fb3b673cConnor Abbott /** 381484ed3819a42042757a32cae4260c26c4fb3b673cConnor Abbott * deprecated 381584ed3819a42042757a32cae4260c26c4fb3b673cConnor Abbott * @hide 381684ed3819a42042757a32cae4260c26c4fb3b673cConnor Abbott */ 381784ed3819a42042757a32cae4260c26c4fb3b673cConnor Abbott public abstract int getInstantAppCookieMaxSize(); 38187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 38197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 38207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Gets the instant application cookie for this app. Non 38217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * instant apps and apps that were instant but were upgraded 38227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * to normal apps can still access this API. For instant apps 38237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * this cookie is cached for some time after uninstall while for 38247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * normal apps the cookie is deleted after the app is uninstalled. 38257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The cookie is always present while the app is installed. 38267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return The cookie. 38287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #isInstantApp() 38307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #isInstantApp(String) 38317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #updateInstantAppCookie(byte[]) 38327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getInstantAppCookieMaxBytes() 38337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #clearInstantAppCookie() 38347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 38357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @NonNull byte[] getInstantAppCookie(); 38367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 38377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 38387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Clears the instant application cookie for the calling app. 38397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #isInstantApp() 38417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #isInstantApp(String) 38427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getInstantAppCookieMaxBytes() 38437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getInstantAppCookie() 38447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #clearInstantAppCookie() 38457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 38467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void clearInstantAppCookie(); 38477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 38487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 38497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Updates the instant application cookie for the calling app. Non 38507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * instant apps and apps that were instant but were upgraded 38517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * to normal apps can still access this API. For instant apps 38527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * this cookie is cached for some time after uninstall while for 38537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * normal apps the cookie is deleted after the app is uninstalled. 38547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The cookie is always present while the app is installed. The 38557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * cookie size is limited by {@link #getInstantAppCookieMaxBytes()}. 38567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Passing <code>null</code> or an empty array clears the cookie. 38577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * </p> 38587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param cookie The cookie data. 38607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #isInstantApp() 38627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #isInstantApp(String) 38637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getInstantAppCookieMaxBytes() 38647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getInstantAppCookie() 38657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #clearInstantAppCookie() 38667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws IllegalArgumentException if the array exceeds max cookie size. 38687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 38697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void updateInstantAppCookie(@Nullable byte[] cookie); 38707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 38717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 38727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @removed 38737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 38747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract boolean setInstantAppCookie(@Nullable byte[] cookie); 38757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 38767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 38777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Get a list of shared libraries that are available on the 38787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * system. 38797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return An array of shared library names that are 38817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * available on the system, or null if none are installed. 38827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 38847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract String[] getSystemSharedLibraryNames(); 38857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 38867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 38877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Get a list of shared libraries on the device. 38887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags To filter the libraries to return. 38907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return The shared library list. 38917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 38927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #MATCH_UNINSTALLED_PACKAGES 38937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 38947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @NonNull List<SharedLibraryInfo> getSharedLibraries( 38957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @InstallFlags int flags); 38967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 38977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 38987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Get a list of shared libraries on the device. 38997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 39007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags To filter the libraries to return. 39017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user to query for. 39027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return The shared library list. 39037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 39047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #MATCH_FACTORY_ONLY 39057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #MATCH_KNOWN_PACKAGES 39067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #MATCH_ANY_USER 39077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #MATCH_UNINSTALLED_PACKAGES 39087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 39097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 39107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 39117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @NonNull List<SharedLibraryInfo> getSharedLibrariesAsUser( 39127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @InstallFlags int flags, @UserIdInt int userId); 39137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 39147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 39157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Get the name of the package hosting the services shared library. 39167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 39177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return The library host package. 39187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 39197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 39207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 39217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @NonNull String getServicesSystemSharedLibraryPackageName(); 39227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 39237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 39247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Get the name of the package hosting the shared components shared library. 39257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 39267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return The library host package. 39277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 39287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 39297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 39307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @NonNull String getSharedSystemSharedLibraryPackageName(); 39317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 39327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 39337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Returns the names of the packages that have been changed 39347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * [eg. added, removed or updated] since the given sequence 39357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * number. 39367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p>If no packages have been changed, returns <code>null</code>. 39377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p>The sequence number starts at <code>0</code> and is 39387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * reset every boot. 39397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param sequenceNumber The first sequence number for which to retrieve package changes. 39407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see Settings.Global#BOOT_COUNT 39417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 39427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract @Nullable ChangedPackages getChangedPackages( 39437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @IntRange(from=0) int sequenceNumber); 39447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 39457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 39467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Get a list of features that are available on the 39477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * system. 39487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 39497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return An array of FeatureInfo classes describing the features 39507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * that are available on the system, or null if there are none(!!). 39517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 39527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract FeatureInfo[] getSystemAvailableFeatures(); 3953e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 3954e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 3955e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Check whether the given feature name is one of the available features as 3956e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * returned by {@link #getSystemAvailableFeatures()}. This tests for the 3957e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * presence of <em>any</em> version of the given feature name; use 3958e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link #hasSystemFeature(String, int)} to check for a minimum version. 3959e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 3960e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @return Returns true if the devices supports the feature, else false. 3961e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 3962e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract boolean hasSystemFeature(String name); 3963e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 3964e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 3965e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Check whether the given feature name and version is one of the available 3966e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * features as returned by {@link #getSystemAvailableFeatures()}. Since 3967e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * features are defined to always be backwards compatible, this returns true 3968e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * if the available feature version is greater than or equal to the 3969e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * requested version. 3970e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 3971e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @return Returns true if the devices supports the feature, else false. 39727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 39737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract boolean hasSystemFeature(String name, int version); 3974e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 39757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 3976c049dd4396d1639859810d6124faa863dae61d1bMatt Turner * Determine the best action to perform for a given Intent. This is how 39777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link Intent#resolveActivity} finds an activity if a class has not been 39787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * explicitly specified. 39797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 39807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <em>Note:</em> if using an implicit Intent (without an explicit 39817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * ComponentName specified), be sure to consider whether to set the 3982e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link #MATCH_DEFAULT_ONLY} only flag. You need to do so to resolve the 39837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * activity in the same way that 39847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.Context#startActivity(Intent)} and 39857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.Intent#resolveActivity(PackageManager) 3986e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Intent.resolveActivity(PackageManager)} do. 39877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * </p> 39887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 39897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent An intent containing all of the desired specification 39907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * (action, data, type, category, and/or component). 39917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. The 39927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * most important is {@link #MATCH_DEFAULT_ONLY}, to limit the 39937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * resolution to only those activities that support the 39947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.Intent#CATEGORY_DEFAULT}. 39957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a ResolveInfo object containing the final activity intent 39967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * that was determined to be the best action. Returns null if no 39977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * matching activity was found. If multiple matching activities are 39987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found and there is no default set, returns a ResolveInfo object 39997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * containing something else, such as the activity resolver. 4000e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 40017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract ResolveInfo resolveActivity(Intent intent, @ResolveInfoFlags int flags); 40027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 40039e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner /** 40047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Determine the best action to perform for a given Intent for a given user. 40059e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * This is how {@link Intent#resolveActivity} finds an activity if a class 4006e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * has not been explicitly specified. 40077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 40087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <em>Note:</em> if using an implicit Intent (without an explicit 40097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * ComponentName specified), be sure to consider whether to set the 4010e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link #MATCH_DEFAULT_ONLY} only flag. You need to do so to resolve the 40117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * activity in the same way that 40127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.Context#startActivity(Intent)} and 40137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.Intent#resolveActivity(PackageManager) 4014e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Intent.resolveActivity(PackageManager)} do. 40157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * </p> 40167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 40177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent An intent containing all of the desired specification 40187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * (action, data, type, category, and/or component). 40197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. The 40207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * most important is {@link #MATCH_DEFAULT_ONLY}, to limit the 40217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * resolution to only those activities that support the 40227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.Intent#CATEGORY_DEFAULT}. 40237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user id. 40247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a ResolveInfo object containing the final activity intent 40257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * that was determined to be the best action. Returns null if no 4026e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * matching activity was found. If multiple matching activities are 40277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found and there is no default set, returns a ResolveInfo object 40287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * containing something else, such as the activity resolver. 4029e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 40307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 40317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract ResolveInfo resolveActivityAsUser(Intent intent, @ResolveInfoFlags int flags, 40327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @UserIdInt int userId); 40337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 40347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 40357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all activities that can be performed for the given intent. 40367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 40377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent The desired intent as per resolveActivity(). 40387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. The 40397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * most important is {@link #MATCH_DEFAULT_ONLY}, to limit the 40407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * resolution to only those activities that support the 40417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.Intent#CATEGORY_DEFAULT}. Or, set 40427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #MATCH_ALL} to prevent any filtering of the results. 40437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a List of ResolveInfo objects containing one entry for 40447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * each matching activity, ordered from best to worst. In other 4045f7a5c714b304b85fde606a716d47581384cdcf75Kenneth Graunke * words, the first item is what would be returned by 4046f7a5c714b304b85fde606a716d47581384cdcf75Kenneth Graunke * {@link #resolveActivity}. If there are no matching activities, an 4047f7a5c714b304b85fde606a716d47581384cdcf75Kenneth Graunke * empty list is returned. 40487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 40497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<ResolveInfo> queryIntentActivities(Intent intent, 40507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ResolveInfoFlags int flags); 40517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 40527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 4053e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Retrieve all activities that can be performed for the given intent, for a 40547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * specific user. 40557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 40567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent The desired intent as per resolveActivity(). 40577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. The 4058e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * most important is {@link #MATCH_DEFAULT_ONLY}, to limit the 40597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * resolution to only those activities that support the 4060e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link android.content.Intent#CATEGORY_DEFAULT}. Or, set 40617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #MATCH_ALL} to prevent any filtering of the results. 40627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a List of ResolveInfo objects containing one entry for 40637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * each matching activity, ordered from best to worst. In other 40647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * words, the first item is what would be returned by 40657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #resolveActivity}. If there are no matching activities, an 40667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * empty list is returned. 4067e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 40687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 40697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, 40707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ResolveInfoFlags int flags, @UserIdInt int userId); 4071e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 40727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 40737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve a set of activities that should be presented to the user as 4074e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * similar options. This is like {@link #queryIntentActivities}, except it 40757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * also allows you to supply a list of more explicit Intents that you would 40767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * like to resolve to particular options, and takes care of returning the 40777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * final ResolveInfo list in a reasonable order, with no duplicates, based 40787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * on those inputs. 40797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 4080e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param caller The class name of the activity that is making the request. 40817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * This activity will never appear in the output list. Can be 40827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * null. 40837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param specifics An array of Intents that should be resolved to the first 4084e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * specific results. Can be null. 4085e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param intent The desired intent as per resolveActivity(). 40867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. The 4087e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * most important is {@link #MATCH_DEFAULT_ONLY}, to limit the 4088c049dd4396d1639859810d6124faa863dae61d1bMatt Turner * resolution to only those activities that support the 40897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.Intent#CATEGORY_DEFAULT}. 40907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a List of ResolveInfo objects containing one entry for 40917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * each matching activity. The list is ordered first by all of the 40927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * intents resolved in <var>specifics</var> and then any additional 40937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * activities that can handle <var>intent</var> but did not get 40947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * included by one of the <var>specifics</var> intents. If there are 40957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * no matching activities, an empty list is returned. 40967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 4097e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract List<ResolveInfo> queryIntentActivityOptions(@Nullable ComponentName caller, 4098e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @Nullable Intent[] specifics, Intent intent, @ResolveInfoFlags int flags); 4099e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 41007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 4101e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Retrieve all receivers that can handle a broadcast of the given intent. 41027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 41037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent The desired intent as per resolveActivity(). 41047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 41057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a List of ResolveInfo objects containing one entry for 41067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * each matching receiver, ordered from best to worst. If there are 41077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * no matching receivers, an empty list or null is returned. 41087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 41097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<ResolveInfo> queryBroadcastReceivers(Intent intent, 4110e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @ResolveInfoFlags int flags); 41117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 41127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 41137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all receivers that can handle a broadcast of the given intent, 4114e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * for a specific user. 41157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 41167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent The desired intent as per resolveActivity(). 41177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 41187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userHandle UserHandle of the user being queried. 41197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a List of ResolveInfo objects containing one entry for 41207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * each matching receiver, ordered from best to worst. If there are 41217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * no matching receivers, an empty list or null is returned. 41227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 41237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 41247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 41257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS) 4126e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent, 41277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ResolveInfoFlags int flags, UserHandle userHandle) { 4128e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie return queryBroadcastReceiversAsUser(intent, flags, userHandle.getIdentifier()); 4129e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie } 4130e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 4131e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 4132e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 4133e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 4134e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent, 4135e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @ResolveInfoFlags int flags, @UserIdInt int userId); 4136e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 4137e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 4138e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** {@hide} */ 41397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @Deprecated 41407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public List<ResolveInfo> queryBroadcastReceivers(Intent intent, 41417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ResolveInfoFlags int flags, @UserIdInt int userId) { 41427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke final String msg = "Shame on you for calling the hidden API " 41437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke + "queryBroadcastReceivers(). Shame!"; 41447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke if (VMRuntime.getRuntime().getTargetSdkVersion() >= Build.VERSION_CODES.O) { 41457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throw new UnsupportedOperationException(msg); 41467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } else { 41477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke Log.d(TAG, msg); 41487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke return queryBroadcastReceiversAsUser(intent, flags, userId); 41497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 4150e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie } 41517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 41527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 4153e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Determine the best service to handle for a given Intent. 41547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 41557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent An intent containing all of the desired specification 41567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * (action, data, type, category, and/or component). 41577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 4158e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @return Returns a ResolveInfo object containing the final service intent 41597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * that was determined to be the best action. Returns null if no 41607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * matching service was found. 41617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 41627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract ResolveInfo resolveService(Intent intent, @ResolveInfoFlags int flags); 41637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 41647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 41657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all services that can match the given intent. 41667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 41677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent The desired intent as per resolveService(). 41687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 41697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a List of ResolveInfo objects containing one entry for 41707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * each matching service, ordered from best to worst. In other 41717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * words, the first item is what would be returned by 41727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #resolveService}. If there are no matching services, an 41737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * empty list or null is returned. 4174e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 41757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<ResolveInfo> queryIntentServices(Intent intent, 4176e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @ResolveInfoFlags int flags); 4177e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 41787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 41797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all services that can match the given intent for a given user. 41807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 41817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent The desired intent as per resolveService(). 41827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 41837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user id. 41847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a List of ResolveInfo objects containing one entry for 41857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * each matching service, ordered from best to worst. In other 4186e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * words, the first item is what would be returned by 41877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #resolveService}. If there are no matching services, an 4188e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * empty list or null is returned. 4189e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @hide 41907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 41917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<ResolveInfo> queryIntentServicesAsUser(Intent intent, 41927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ResolveInfoFlags int flags, @UserIdInt int userId); 41937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 41947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 41957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all providers that can match the given intent. 41967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 41977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent An intent containing all of the desired specification 41987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * (action, data, type, category, and/or component). 41997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 42007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user id. 42017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a List of ResolveInfo objects containing one entry for 42027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * each matching provider, ordered from best to worst. If there are 42037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * no matching services, an empty list or null is returned. 42047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 42057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 42067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<ResolveInfo> queryIntentContentProvidersAsUser( 42077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke Intent intent, @ResolveInfoFlags int flags, @UserIdInt int userId); 42087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 42097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 42107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve all providers that can match the given intent. 4211e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 4212e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param intent An intent containing all of the desired specification 4213e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * (action, data, type, category, and/or component). 4214e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param flags Additional option flags to modify the data returned. 4215e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @return Returns a List of ResolveInfo objects containing one entry for 4216e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * each matching provider, ordered from best to worst. If there are 4217e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * no matching services, an empty list or null is returned. 4218e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 4219e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract List<ResolveInfo> queryIntentContentProviders(Intent intent, 4220e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @ResolveInfoFlags int flags); 4221e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 4222e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 4223e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Find a single content provider by its base path name. 4224e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 4225e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param name The name of the provider to find. 4226e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param flags Additional option flags to modify the data returned. 4227e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @return A {@link ProviderInfo} object containing information about the 4228e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * provider. If a provider was not found, returns null. 4229e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 4230e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract ProviderInfo resolveContentProvider(String name, 4231e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie @ComponentInfoFlags int flags); 4232e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 4233e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 4234e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Find a single content provider by its base path name. 4235e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 42367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param name The name of the provider to find. 42377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 42387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user id. 42397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A {@link ProviderInfo} object containing information about the 42407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * provider. If a provider was not found, returns null. 42417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 42427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 42437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract ProviderInfo resolveContentProviderAsUser(String name, 42447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @ComponentInfoFlags int flags, @UserIdInt int userId); 42457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 42467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 42477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve content provider information. 42487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 42497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <em>Note: unlike most other methods, an empty result set is indicated 42507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * by a null return instead of an empty list.</em> 42517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 42527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param processName If non-null, limits the returned providers to only 42537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * those that are hosted by the given process. If null, all 42547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * content providers are returned. 42557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param uid If <var>processName</var> is non-null, this is the required 42567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * uid owning the requested content providers. 4257e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param flags Additional option flags to modify the data returned. 42587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A list of {@link ProviderInfo} objects containing one entry for 42597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * each provider either matching <var>processName</var> or, if 42607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <var>processName</var> is null, all known content providers. 42617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <em>If there are no matching providers, null is returned.</em> 42627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 42637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<ProviderInfo> queryContentProviders( 42647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke String processName, int uid, @ComponentInfoFlags int flags); 42657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 42667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 42677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Same as {@link #queryContentProviders}, except when {@code metaDataKey} is not null, 42687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * it only returns providers which have metadata with the {@code metaDataKey} key. 42697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 42707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p>DO NOT USE the {@code metaDataKey} parameter, unless you're the contacts provider. 42717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * You really shouldn't need it. Other apps should use {@link #queryIntentContentProviders} 42727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * instead. 42737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 42747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p>The {@code metaDataKey} parameter was added to allow the contacts provider to quickly 42757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * scan the GAL providers on the device. Unfortunately the discovery protocol used metadata 42767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * to mark GAL providers, rather than intent filters, so we can't use 42777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #queryIntentContentProviders} for that. 42787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 42797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 42807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 42817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public List<ProviderInfo> queryContentProviders( 42827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke String processName, int uid, @ComponentInfoFlags int flags, String metaDataKey) { 42837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke // Provide the default implementation for mocks. 42847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke return queryContentProviders(processName, uid, flags); 42857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 4286e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 42877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 4288e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Retrieve all of the information we know about a particular 4289e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * instrumentation class. 42907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 4291e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param className The full name (i.e. 42927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * com.google.apps.contacts.InstrumentList) of an Instrumentation 42937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * class. 42947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 42957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return An {@link InstrumentationInfo} object containing information 42967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * about the instrumentation. 42977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException if a package with the given name cannot be 42987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found on the system. 42997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 43007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract InstrumentationInfo getInstrumentationInfo(ComponentName className, 43017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @InstrumentationInfoFlags int flags) throws NameNotFoundException; 43027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 43037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 43047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve information about available instrumentation code. May be used to 43057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * retrieve either all instrumentation code, or only the code targeting a 4306e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * particular package. 43077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 4308e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param targetPackage If null, all instrumentation is returned; only the 4309e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * instrumentation targeting this package name is returned. 4310e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param flags Additional option flags to modify the data returned. 43117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A list of {@link InstrumentationInfo} objects containing one 4312e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * entry for each matching instrumentation. If there are no 4313e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * instrumentation available, returns an empty list. 4314e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 43157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<InstrumentationInfo> queryInstrumentation(String targetPackage, 43167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @InstrumentationInfoFlags int flags); 43177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 43187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 43197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve an image from a package. This is a low-level API used by 43207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the various package manager info structures (such as 43217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link ComponentInfo} to implement retrieval of their associated 43227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * icon. 43237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 43247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The name of the package that this icon is coming from. 43257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Cannot be null. 4326e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param resid The resource identifier of the desired image. Cannot be 0. 43277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param appInfo Overall information about <var>packageName</var>. This 43287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * may be null, in which case the application information will be retrieved 43297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * for you if needed; if you already have this information around, it can 43307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * be much more efficient to supply it here. 43317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 43327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a Drawable holding the requested image. Returns null if 43337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * an image could not be found for any reason. 43347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 43357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getDrawable(String packageName, @DrawableRes int resid, 43367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke ApplicationInfo appInfo); 43377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 43387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 43397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the icon associated with an activity. Given the full name of 43407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * an activity, retrieves the information about it and calls 43417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link ComponentInfo#loadIcon ComponentInfo.loadIcon()} to return its icon. 43427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If the activity cannot be found, NameNotFoundException is thrown. 43437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 43447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param activityName Name of the activity whose icon is to be retrieved. 43457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 43467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the icon, or the default activity icon if 43477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * it could not be found. Does not return null. 43487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException Thrown if the resources for the given 43497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * activity could not be loaded. 43507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 43517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getActivityIcon(Intent) 43527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 43537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getActivityIcon(ComponentName activityName) 43547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 43557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 43567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 43577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the icon associated with an Intent. If intent.getClassName() is 43587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * set, this simply returns the result of 43597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * getActivityIcon(intent.getClassName()). Otherwise it resolves the intent's 43607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * component and returns the icon associated with the resolved component. 43617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If intent.getClassName() cannot be found or the Intent cannot be resolved 43627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * to a component, NameNotFoundException is thrown. 43637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 43647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent The intent for which you would like to retrieve an icon. 43657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 43667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the icon, or the default activity icon if 43677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * it could not be found. Does not return null. 4368e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @throws NameNotFoundException Thrown if the resources for application 4369e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * matching the given intent could not be loaded. 4370e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 4371e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @see #getActivityIcon(ComponentName) 4372e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 4373e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract Drawable getActivityIcon(Intent intent) 4374e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie throws NameNotFoundException; 4375e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 4376e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 4377e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * Retrieve the banner associated with an activity. Given the full name of 4378e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * an activity, retrieves the information about it and calls 4379e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * {@link ComponentInfo#loadIcon ComponentInfo.loadIcon()} to return its 4380e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * banner. If the activity cannot be found, NameNotFoundException is thrown. 4381e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 4382e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param activityName Name of the activity whose banner is to be retrieved. 4383e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @return Returns the image of the banner, or null if the activity has no 4384e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * banner specified. 4385e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @throws NameNotFoundException Thrown if the resources for the given 4386e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * activity could not be loaded. 4387e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @see #getActivityBanner(Intent) 4388e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 4389e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie public abstract Drawable getActivityBanner(ComponentName activityName) 4390e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie throws NameNotFoundException; 4391e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie 4392e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** 43937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the banner associated with an Intent. If intent.getClassName() 43947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is set, this simply returns the result of 43957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * getActivityBanner(intent.getClassName()). Otherwise it resolves the 43967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * intent's component and returns the banner associated with the resolved 43977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * component. If intent.getClassName() cannot be found or the Intent cannot 43987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * be resolved to a component, NameNotFoundException is thrown. 43997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 44007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent The intent for which you would like to retrieve a banner. 44017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the banner, or null if the activity has no 44027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * banner specified. 44037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException Thrown if the resources for application 44047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * matching the given intent could not be loaded. 44057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getActivityBanner(ComponentName) 44067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 44077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getActivityBanner(Intent intent) 44087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 44097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 44107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 44117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Return the generic icon for an activity that is used when no specific 44127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * icon is defined. 44137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 4414e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @return Drawable Image of the icon. 44157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 44167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getDefaultActivityIcon(); 44177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 44187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 44197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the icon associated with an application. If it has not defined 44207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * an icon, the default app icon is returned. Does not return null. 44217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 44227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param info Information about application being queried. 44237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 44247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the icon, or the default application icon 44257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if it could not be found. 44267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 44277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getApplicationIcon(String) 44287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 44297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getApplicationIcon(ApplicationInfo info); 44307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 44317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 44327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the icon associated with an application. Given the name of the 44337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * application's package, retrieves the information about it and calls 44347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * getApplicationIcon() to return its icon. If the application cannot be 44357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found, NameNotFoundException is thrown. 44367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 44377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName Name of the package whose application icon is to be 44387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * retrieved. 44397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 44407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the icon, or the default application icon 44417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if it could not be found. Does not return null. 44427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException Thrown if the resources for the given 44437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * application could not be loaded. 44447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 44457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getApplicationIcon(ApplicationInfo) 44467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 44477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getApplicationIcon(String packageName) 44487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 44497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 44507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 44517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the banner associated with an application. 44527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 44537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param info Information about application being queried. 44547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the banner or null if the application has no 44557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * banner specified. 44567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getApplicationBanner(String) 44577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 44587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getApplicationBanner(ApplicationInfo info); 44597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 44607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 44617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the banner associated with an application. Given the name of the 44627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * application's package, retrieves the information about it and calls 44637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * getApplicationIcon() to return its banner. If the application cannot be 44647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * found, NameNotFoundException is thrown. 44657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 44667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName Name of the package whose application banner is to be 44677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * retrieved. 44687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the banner or null if the application has no 44697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * banner specified. 44707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException Thrown if the resources for the given 44717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * application could not be loaded. 44727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getApplicationBanner(ApplicationInfo) 44737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 44747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getApplicationBanner(String packageName) 44757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 44767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 44777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 44787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the logo associated with an activity. Given the full name of an 44797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * activity, retrieves the information about it and calls 44807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link ComponentInfo#loadLogo ComponentInfo.loadLogo()} to return its 44817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * logo. If the activity cannot be found, NameNotFoundException is thrown. 44827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 44837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param activityName Name of the activity whose logo is to be retrieved. 44847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the logo or null if the activity has no logo 44857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * specified. 44867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException Thrown if the resources for the given 44877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * activity could not be loaded. 44887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getActivityLogo(Intent) 44897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 44907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getActivityLogo(ComponentName activityName) 44917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 44927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 44937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 44947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the logo associated with an Intent. If intent.getClassName() is 44957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * set, this simply returns the result of 44967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * getActivityLogo(intent.getClassName()). Otherwise it resolves the intent's 44977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * component and returns the logo associated with the resolved component. 44987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If intent.getClassName() cannot be found or the Intent cannot be resolved 44997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * to a component, NameNotFoundException is thrown. 45007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param intent The intent for which you would like to retrieve a logo. 45027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the logo, or null if the activity has no 45047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * logo specified. 45057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException Thrown if the resources for application 45077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * matching the given intent could not be loaded. 45087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getActivityLogo(ComponentName) 45107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 45117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getActivityLogo(Intent intent) 45127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 45137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 45147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 45159e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * Retrieve the logo associated with an application. If it has not specified 45167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * a logo, this method returns null. 45177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param info Information about application being queried. 45197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the logo, or null if no logo is specified 45217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * by the application. 45227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45239e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * @see #getApplicationLogo(String) 45247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 45257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getApplicationLogo(ApplicationInfo info); 45267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 45277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 45287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the logo associated with an application. Given the name of the 45297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * application's package, retrieves the information about it and calls 45307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * getApplicationLogo() to return its logo. If the application cannot be 45319e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * found, NameNotFoundException is thrown. 45327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName Name of the package whose application logo is to be 45347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * retrieved. 45357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the image of the logo, or null if no application logo 45377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * has been specified. 45387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45399e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * @throws NameNotFoundException Thrown if the resources for the given 45407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * application could not be loaded. 45417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getApplicationLogo(ApplicationInfo) 45437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 45447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getApplicationLogo(String packageName) 45457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 45467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 45479e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner /** 45487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If the target user is a managed profile, then this returns a badged copy of the given icon 45497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * to be able to distinguish it from the original icon. For badging an arbitrary drawable use 45507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #getUserBadgedDrawableForDensity( 45517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * android.graphics.drawable.Drawable, UserHandle, android.graphics.Rect, int)}. 45527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 45537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If the original drawable is a BitmapDrawable and the backing bitmap is 45547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging 45559e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * is performed in place and the original drawable is returned. 45567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * </p> 45577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param icon The icon to badge. 45597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param user The target user. 45607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A drawable that combines the original icon and a badge as 45617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * determined by the system. 4562249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner */ 4563249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner public abstract Drawable getUserBadgedIcon(Drawable icon, UserHandle user); 4564249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner 4565249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner /** 4566249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner * If the target user is a managed profile of the calling user or the caller 4567249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner * is itself a managed profile, then this returns a badged copy of the given 4568249bb8961726fe98ea6f3ba625487f6935a9f093Matt Turner * drawable allowing the user to distinguish it from the original drawable. 45697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * The caller can specify the location in the bounds of the drawable to be 45707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * badged where the badge should be applied as well as the density of the 45717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * badge to be used. 45727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <p> 45737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If the original drawable is a BitmapDrawable and the backing bitmap is 45747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging 45757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is performed in place and the original drawable is returned. 45767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * </p> 457721cd298aec1c6cb1d6853ccd3de53e45c617fd0aMatt Turner * 457821cd298aec1c6cb1d6853ccd3de53e45c617fd0aMatt Turner * @param drawable The drawable to badge. 45797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param user The target user. 45807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param badgeLocation Where in the bounds of the badged drawable to place 45817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the badge. If it's {@code null}, the badge is applied on top of the entire 45827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * drawable being badged. 45837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param badgeDensity The optional desired density for the badge as per 45847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.util.DisplayMetrics#densityDpi}. If it's not positive, 45857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the density of the display is used. 45867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A drawable that combines the original drawable and a badge as 45877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * determined by the system. 45887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 45897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getUserBadgedDrawableForDensity(Drawable drawable, 45907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke UserHandle user, Rect badgeLocation, int badgeDensity); 45917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 45927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 45937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If the target user is a managed profile of the calling user or the caller 45947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is itself a managed profile, then this returns a drawable to use as a small 45957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * icon to include in a view to distinguish it from the original icon. 45967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 45977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param user The target user. 45987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param density The optional desired density for the badge as per 45997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.util.DisplayMetrics#densityDpi}. If not provided 46007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the density of the current display is used. 46017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return the drawable or null if no drawable is required. 46027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 46037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 46047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getUserBadgeForDensity(UserHandle user, int density); 46057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 46067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 46077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If the target user is a managed profile of the calling user or the caller 46087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is itself a managed profile, then this returns a drawable to use as a small 46097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * icon to include in a view to distinguish it from the original icon. This version 46107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * doesn't have background protection and should be used over a light background instead of 46117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * a badge. 46127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 46137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param user The target user. 46147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param density The optional desired density for the badge as per 46157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.util.DisplayMetrics#densityDpi}. If not provided 46167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the density of the current display is used. 46177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return the drawable or null if no drawable is required. 46187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 46197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 46207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Drawable getUserBadgeForDensityNoBackground(UserHandle user, int density); 46217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 46227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 46237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If the target user is a managed profile of the calling user or the caller 46247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is itself a managed profile, then this returns a copy of the label with 46257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * badging for accessibility services like talkback. E.g. passing in "Email" 46260c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * and it might return "Work Email" for Email in the work profile. 46270c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * 46280c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * @param label The label to change. 46290c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * @param user The target user. 46300c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * @return A label that combines the original label and a badge as 46310c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * determined by the system. 46320c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin */ 46330c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin public abstract CharSequence getUserBadgedLabel(CharSequence label, UserHandle user); 46340c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin 46350c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin /** 46360c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * Retrieve text from a package. This is a low-level API used by 46370c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * the various package manager info structures (such as 46380c7fbcb84403ec318c77a51c98addd653529ae48Ilia Mirkin * {@link ComponentInfo} to implement retrieval of their associated 46397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * labels and other text. 46407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 46417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The name of the package that this text is coming from. 46427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Cannot be null. 46437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param resid The resource identifier of the desired text. Cannot be 0. 46447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param appInfo Overall information about <var>packageName</var>. This 46457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * may be null, in which case the application information will be retrieved 46467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * for you if needed; if you already have this information around, it can 46477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * be much more efficient to supply it here. 46487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 46497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns a CharSequence holding the requested text. Returns null 46507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if the text could not be found for any reason. 46517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 46527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract CharSequence getText(String packageName, @StringRes int resid, 46537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke ApplicationInfo appInfo); 4654107d03a6d5b63687361b2b4d2876ef52b082cbb5Francisco Jerez 4655c59659ca08cd567f826b14e26e1277e9746bb097Kenneth Graunke /** 46567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve an XML file from a package. This is a low-level API used to 46577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * retrieve XML meta data. 46587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 4659fd249c803e3ae2acb83f5e3b7152728e73228b7bIlia Mirkin * @param packageName The name of the package that this xml is coming from. 46607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Cannot be null. 46617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param resid The resource identifier of the desired xml. Cannot be 0. 46627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param appInfo Overall information about <var>packageName</var>. This 46637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * may be null, in which case the application information will be retrieved 46647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * for you if needed; if you already have this information around, it can 46657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * be much more efficient to supply it here. 46667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 46677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns an XmlPullParser allowing you to parse out the XML 46687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * data. Returns null if the xml resource could not be found for any 4669af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes * reason. 4670af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes */ 4671af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes public abstract XmlResourceParser getXml(String packageName, @XmlRes int resid, 4672af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes ApplicationInfo appInfo); 4673af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes 4674af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes /** 4675af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes * Return the label to use for this application. 4676fd249c803e3ae2acb83f5e3b7152728e73228b7bIlia Mirkin * 4677af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes * @return Returns the label associated with this application, or null if 4678fd249c803e3ae2acb83f5e3b7152728e73228b7bIlia Mirkin * it could not be found for any reason. 4679af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes * @param info The application to get the label of. 4680af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes */ 4681fd249c803e3ae2acb83f5e3b7152728e73228b7bIlia Mirkin public abstract CharSequence getApplicationLabel(ApplicationInfo info); 4682af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes 4683af1dfd99b7119e0d074fa111e5d2ebeddd5dff93Chris Forbes /** 46847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the resources associated with an activity. Given the full 46857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * name of an activity, retrieves the information about it and calls 46867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * getResources() to return its application's resources. If the activity 46877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * cannot be found, NameNotFoundException is thrown. 46887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 46897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param activityName Name of the activity whose resources are to be 46907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * retrieved. 46917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 46927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the application's Resources. 46937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws NameNotFoundException Thrown if the resources for the given 46947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * application could not be loaded. 46957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 46967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @see #getResourcesForApplication(ApplicationInfo) 46977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 46987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Resources getResourcesForActivity(ComponentName activityName) 46994fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes throws NameNotFoundException; 47007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 47017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 47024fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * Retrieve the resources for an application. Throws NameNotFoundException 47034fa123deac19aa40616cdca3b373d7c4ecdeed94Chris Forbes * if the package is no longer installed. 47047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 47057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param app Information about the desired application. 47067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 47077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return Returns the application's Resources. 4708a9de744a26bc575a1a269e133c550f813c95904fChris Forbes * @throws NameNotFoundException Thrown if the resources for the given 4709a9de744a26bc575a1a269e133c550f813c95904fChris Forbes * application could not be loaded (most likely because it was uninstalled). 4710a9de744a26bc575a1a269e133c550f813c95904fChris Forbes */ 4711a9de744a26bc575a1a269e133c550f813c95904fChris Forbes public abstract Resources getResourcesForApplication(ApplicationInfo app) 4712a9de744a26bc575a1a269e133c550f813c95904fChris Forbes throws NameNotFoundException; 4713a9de744a26bc575a1a269e133c550f813c95904fChris Forbes 4714a9de744a26bc575a1a269e133c550f813c95904fChris Forbes /** 4715a9de744a26bc575a1a269e133c550f813c95904fChris Forbes * Retrieve the resources associated with an application. Given the full 471688ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * package name of an application, retrieves the information about it and 471788ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * calls getResources() to return its application's resources. If the 471888ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * appPackageName cannot be found, NameNotFoundException is thrown. 471988ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * 472088ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * @param appPackageName Package name of the application whose resources 472188ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * are to be retrieved. 472288ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * 472388ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * @return Returns the application's Resources. 472488ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * @throws NameNotFoundException Thrown if the resources for the given 472588ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * application could not be loaded. 472688ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * 472788ee9bc9d1dd66ddb9721dc44574b8caaa26df70Chris Forbes * @see #getResourcesForApplication(ApplicationInfo) 47287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 47297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Resources getResourcesForApplication(String appPackageName) 47307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 47317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 47327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** @hide */ 47337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract Resources getResourcesForApplicationAsUser(String appPackageName, 47347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @UserIdInt int userId) throws NameNotFoundException; 47357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 47367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 47377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve overall information about an application package defined in a 47387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package archive file 47397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 47407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param archiveFilePath The path to the archive file 47417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param flags Additional option flags to modify the data returned. 47427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return A PackageInfo object containing information about the package 47437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * archive. If the package could not be parsed, returns null. 47447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 47457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public PackageInfo getPackageArchiveInfo(String archiveFilePath, @PackageInfoFlags int flags) { 47467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke final PackageParser parser = new PackageParser(); 47477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke parser.setCallback(new PackageParser.CallbackImpl(this)); 47487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke final File apkFile = new File(archiveFilePath); 47497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke try { 47507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke if ((flags & (MATCH_DIRECT_BOOT_UNAWARE | MATCH_DIRECT_BOOT_AWARE)) != 0) { 47517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke // Caller expressed an explicit opinion about what encryption 47527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke // aware/unaware components they want to see, so fall through and 47537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke // give them what they want 4754fd249c803e3ae2acb83f5e3b7152728e73228b7bIlia Mirkin } else { 47557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke // Caller expressed no opinion, so match everything 47567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke flags |= MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE; 47577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 47587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 47597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke PackageParser.Package pkg = parser.parseMonolithicPackage(apkFile, 0); 47607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke if ((flags & GET_SIGNATURES) != 0) { 47617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke PackageParser.collectCertificates(pkg, 0); 47627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 47637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke PackageUserState state = new PackageUserState(); 47647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke return PackageParser.generatePackageInfo(pkg, null, flags, 0, 0, null, state); 47657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } catch (PackageParserException e) { 47667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke return null; 47677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 47687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 47697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 47707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 47717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If there is already an application with the given package name installed 47727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * on the system for other users, also install it for the calling user. 47737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 47747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 47757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 47767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract int installExistingPackage(String packageName) throws NameNotFoundException; 47777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 47787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 47797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If there is already an application with the given package name installed 47807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * on the system for other users, also install it for the calling user. 47817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 47827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 47837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 47847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract int installExistingPackage(String packageName, @InstallReason int installReason) 47857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 47867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 47877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 47887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * If there is already an application with the given package name installed 47897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * on the system for other users, also install it for the specified user. 47907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 47917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 47927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(anyOf = { 47937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke Manifest.permission.INSTALL_PACKAGES, 47947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke Manifest.permission.INTERACT_ACROSS_USERS_FULL}) 47957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract int installExistingPackageAsUser(String packageName, @UserIdInt int userId) 47967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke throws NameNotFoundException; 47977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 47987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 47997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Allows a package listening to the 48007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification 48017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * broadcast} to respond to the package manager. The response must include 48027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the {@code verificationCode} which is one of 48037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageManager#VERIFICATION_ALLOW} or 48047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageManager#VERIFICATION_REJECT}. 48057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 48067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param id pending package identifier as passed via the 48078639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra. 48088639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga * @param verificationCode either {@link PackageManager#VERIFICATION_ALLOW} 48097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * or {@link PackageManager#VERIFICATION_REJECT}. 48107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws SecurityException if the caller does not have the 48117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * PACKAGE_VERIFICATION_AGENT permission. 48127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 48137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void verifyPendingInstall(int id, int verificationCode); 4814e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga 4815e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga /** 4816e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * Allows a package listening to the 4817e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification 4818e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * broadcast} to extend the default timeout for a response and declare what 4819e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * action to perform after the timeout occurs. The response must include 4820e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * the {@code verificationCodeAtTimeout} which is one of 4821e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link PackageManager#VERIFICATION_ALLOW} or 4822e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link PackageManager#VERIFICATION_REJECT}. 4823e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * 4824e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * This method may only be called once per package id. Additional calls 4825e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * will have no effect. 4826e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * 4827e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * @param id pending package identifier as passed via the 4828e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra. 4829e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * @param verificationCodeAtTimeout either 4830e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link PackageManager#VERIFICATION_ALLOW} or 4831e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link PackageManager#VERIFICATION_REJECT}. If 4832e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@code verificationCodeAtTimeout} is neither 4833e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link PackageManager#VERIFICATION_ALLOW} or 48347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageManager#VERIFICATION_REJECT}, then 48357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code verificationCodeAtTimeout} will default to 48367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageManager#VERIFICATION_REJECT}. 48377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param millisecondsToDelay the amount of time requested for the timeout. 48384b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga * Must be positive and less than 48394b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga * {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}. If 48407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code millisecondsToDelay} is out of bounds, 48417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@code millisecondsToDelay} will be set to the closest in 48427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * bounds value; namely, 0 or 48437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}. 48447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @throws SecurityException if the caller does not have the 4845e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * PACKAGE_VERIFICATION_AGENT permission. 4846e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga */ 4847e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga public abstract void extendVerificationTimeout(int id, 4848e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga int verificationCodeAtTimeout, long millisecondsToDelay); 4849e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga 4850e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga /** 4851e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * Allows a package listening to the 4852e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link Intent#ACTION_INTENT_FILTER_NEEDS_VERIFICATION} intent filter verification 4853e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * broadcast to respond to the package manager. The response must include 4854e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * the {@code verificationCode} which is one of 4855e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link PackageManager#INTENT_FILTER_VERIFICATION_SUCCESS} or 4856e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}. 4857e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * 4858e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * @param verificationId pending package identifier as passed via the 4859e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra. 4860e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * @param verificationCode either {@link PackageManager#INTENT_FILTER_VERIFICATION_SUCCESS} 4861e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * or {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}. 4862e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * @param failedDomains a list of failed domains if the verificationCode is 4863e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * {@link PackageManager#INTENT_FILTER_VERIFICATION_FAILURE}, otherwise null; 4864e877aadde065de567da53f67ea8d60e19825693dIago Toral Quiroga * @throws SecurityException if the caller does not have the 486586855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes * INTENT_FILTER_VERIFICATION_AGENT permission. 486686855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes * 486786855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes * @hide 486886855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes */ 486986855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes @SystemApi 487086855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes @RequiresPermission(android.Manifest.permission.INTENT_FILTER_VERIFICATION_AGENT) 487186855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes public abstract void verifyIntentFilter(int verificationId, int verificationCode, 487286855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes List<String> failedDomains); 487386855365b4059c60a9e1dcc0b7713941a2507bd0Chris Forbes 4874ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin /** 4875ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * Get the status of a Domain Verification Result for an IntentFilter. This is 48767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * related to the {@link android.content.IntentFilter#setAutoVerify(boolean)} and 48777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.IntentFilter#getAutoVerify()} 48787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 48797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * This is used by the ResolverActivity to change the status depending on what the User select 48807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * in the Disambiguation Dialog and also used by the Settings App for changing the default App 4881ecebd3dbfcb769b44e99733279c8fb0745818708Ilia Mirkin * for a domain. 48827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 48837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The package name of the Activity associated with the IntentFilter. 48847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user id. 48857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 48867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return The status to set to. This can be 48877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK} or 48887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS} or 48897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER} or 48907a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED} 48917a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * 48927a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * @hide 48937a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes */ 48947a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes @SystemApi 48957a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL) 48967a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes public abstract int getIntentVerificationStatusAsUser(String packageName, @UserIdInt int userId); 48977a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes 48987a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes /** 48997a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * Allow to change the status of a Intent Verification status for all IntentFilter of an App. 49007a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * This is related to the {@link android.content.IntentFilter#setAutoVerify(boolean)} and 49017a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * {@link android.content.IntentFilter#getAutoVerify()} 49027a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * 49037a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * This is used by the ResolverActivity to change the status depending on what the User select 49047a4754d7d961b06652cc940c37c4f87a9111dc2aChris Forbes * in the Disambiguation Dialog and also used by the Settings App for changing the default App 49057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * for a domain. 49067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 490706c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * @param packageName The package name of the Activity associated with the IntentFilter. 490806c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * @param status The status to set to. This can be 490906c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK} or 491006c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS} or 491106c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * {@link #INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER} 491206c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * @param userId The user id. 491306c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * 491406c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * @return true if the status has been set. False otherwise. 491506c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * 491606c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * @hide 491706c56f443aa1850b2651df3636c42a8740cff847Ian Romanick */ 491806c56f443aa1850b2651df3636c42a8740cff847Ian Romanick @SystemApi 491906c56f443aa1850b2651df3636c42a8740cff847Ian Romanick @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS) 492006c56f443aa1850b2651df3636c42a8740cff847Ian Romanick public abstract boolean updateIntentVerificationStatusAsUser(String packageName, int status, 492106c56f443aa1850b2651df3636c42a8740cff847Ian Romanick @UserIdInt int userId); 492206c56f443aa1850b2651df3636c42a8740cff847Ian Romanick 492306c56f443aa1850b2651df3636c42a8740cff847Ian Romanick /** 492406c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * Get the list of IntentFilterVerificationInfo for a specific package and User. 492506c56f443aa1850b2651df3636c42a8740cff847Ian Romanick * 49267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName the package name. When this parameter is set to a non null value, 4927f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * the results will be filtered by the package name provided. 4928f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * Otherwise, there will be no filtering and it will return a list 49297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * corresponding for all packages 4930f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * 4931f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * @return a list of IntentFilterVerificationInfo for a specific package. 49327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 49337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 49347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 49357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 49367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract List<IntentFilterVerificationInfo> getIntentFilterVerifications( 49377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke String packageName); 49387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 49397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 49407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Get the list of IntentFilter for a specific package. 49417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 49427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName the package name. This parameter is set to a non null value, 49437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the list will contain all the IntentFilter for that package. 49447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Otherwise, the list will be empty. 4945f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * 4946f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * @return a list of IntentFilter for a specific package. 4947f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * 4948f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * @hide 4949f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin */ 4950f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin @SystemApi 4951f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin public abstract List<IntentFilter> getAllIntentFilters(String packageName); 4952f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin 4953f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin /** 4954f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * Get the default Browser package name for a specific user. 4955f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * 4956f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * @param userId The user id. 4957f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * 4958f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * @return the package name of the default Browser for the specified user. If the user id passed 4959f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * is -1 (all users) it will return a null value. 4960f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * 4961f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin * @hide 4962f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin */ 4963f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin @TestApi 4964f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin @SystemApi 4965f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL) 4966f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin public abstract String getDefaultBrowserPackageNameAsUser(@UserIdInt int userId); 4967f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin 4968f80c6847e969016596b5ce3202236c15663cc61aIlia Mirkin /** 49697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Set the default Browser package name for a specific user. 49707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 49717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The package name of the default Browser. 49727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user id. 49737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 49747ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @return true if the default Browser for the specified user has been set, 49757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * otherwise return false. If the user id passed is -1 (all users) this call will not 49767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * do anything and just return false. 49777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 49787ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 49797ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 49807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 49817ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(allOf = { 49827ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke Manifest.permission.SET_PREFERRED_APPLICATIONS, 49837ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke Manifest.permission.INTERACT_ACROSS_USERS_FULL}) 49847ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract boolean setDefaultBrowserPackageNameAsUser(String packageName, 49857ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @UserIdInt int userId); 49867ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 49877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 49887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Change the installer associated with a given package. There are limitations 49897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * on how the installer package can be changed; in particular: 49907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <ul> 49917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li> A SecurityException will be thrown if <var>installerPackageName</var> 49927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * is not signed with the same certificate as the calling application. 49937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * <li> A SecurityException will be thrown if <var>targetPackage</var> already 49947ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * has an installer package, and that installer package is not signed with 49957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the same certificate as the calling application. 49967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * </ul> 49977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 49987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param targetPackage The installed package whose installer will be changed. 49997ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param installerPackageName The package name of the new installer. May be 50007ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * null to clear the association. 50017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 50027ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void setInstallerPackageName(String targetPackage, 50037ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke String installerPackageName); 50047ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 50057ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** @hide */ 50067ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @SystemApi 50077ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(Manifest.permission.INSTALL_PACKAGES) 50087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void setUpdateAvailable(String packageName, boolean updateAvaialble); 50097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 50107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 50117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Attempts to delete a package. Since this may take a little while, the 50127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * result will be posted back to the given observer. A deletion will fail if 50137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the calling context lacks the 50147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.Manifest.permission#DELETE_PACKAGES} permission, if the 50157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * named package cannot be found, or if the named package is a system 50167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package. 50177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 50187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The name of the package to delete 50197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param observer An observer callback to get notified when the package 50207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * deletion is complete. 50217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.pm.IPackageDeleteObserver#packageDeleted} 50227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * will be called when that happens. observer may be null to 50237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * indicate that no callback is desired. 50247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 50257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 50267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(Manifest.permission.DELETE_PACKAGES) 50277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void deletePackage(String packageName, IPackageDeleteObserver observer, 50287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @DeleteFlags int flags); 50297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 50307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 50317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Attempts to delete a package. Since this may take a little while, the 50327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * result will be posted back to the given observer. A deletion will fail if 50337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the named package cannot be found, or if the named package is a system 50347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * package. 50357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 50367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The name of the package to delete 50377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param observer An observer callback to get notified when the package 50387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * deletion is complete. 50397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.pm.IPackageDeleteObserver#packageDeleted} 50407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * will be called when that happens. observer may be null to 50417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * indicate that no callback is desired. 50427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param userId The user Id 50437ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 50447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 50457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke @RequiresPermission(anyOf = { 50467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke Manifest.permission.DELETE_PACKAGES, 50477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke Manifest.permission.INTERACT_ACROSS_USERS_FULL}) 50487ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void deletePackageAsUser(@NonNull String packageName, 50497ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke IPackageDeleteObserver observer, @DeleteFlags int flags, @UserIdInt int userId); 50507ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 50517ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 50527ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Retrieve the package name of the application that installed a package. This identifies 50537ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * which market the package came from. 50547ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 50557ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The name of the package to query 50567ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 50577ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract String getInstallerPackageName(String packageName); 50587ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 50597ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 50607ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Attempts to clear the user data directory of an application. 50617ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Since this may take a little while, the result will 50627ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * be posted back to the given observer. A deletion will fail if the 50637ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * named package cannot be found, or if the named package is a "system package". 50647ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 50657ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param packageName The name of the package 50667ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param observer An observer callback to get notified when the operation is finished 50677ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)} 50687ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * will be called when that happens. observer may be null to indicate that 50697ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * no callback is desired. 50707ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 50717ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 50727ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 50737ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void clearApplicationUserData(String packageName, 507484d6130c21a8a570efefe54aa723f549b34c3256Kenneth Graunke IPackageDataObserver observer); 50757ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 50767ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Attempts to delete the cache files associated with an application. 50777ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Since this may take a little while, the result will 507865b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * be posted back to the given observer. A deletion will fail if the calling context 507965b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * lacks the {@link android.Manifest.permission#DELETE_CACHE_FILES} permission, if the 50807ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * named package cannot be found, or if the named package is a "system package". 508184d6130c21a8a570efefe54aa723f549b34c3256Kenneth Graunke * 508284d6130c21a8a570efefe54aa723f549b34c3256Kenneth Graunke * @param packageName The name of the package to delete 508384d6130c21a8a570efefe54aa723f549b34c3256Kenneth Graunke * @param observer An observer callback to get notified when the cache file deletion 508484d6130c21a8a570efefe54aa723f549b34c3256Kenneth Graunke * is complete. 508584d6130c21a8a570efefe54aa723f549b34c3256Kenneth Graunke * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)} 508684d6130c21a8a570efefe54aa723f549b34c3256Kenneth Graunke * will be called when that happens. observer may be null to indicate that 50877ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * no callback is desired. 50887ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 50897ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 50907ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 50917ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void deleteApplicationCacheFiles(String packageName, 50927ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke IPackageDataObserver observer); 50937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 5094b4e198f47f8423dfb101395cd6cb5a11fa12954eKenneth Graunke /** 50957ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Attempts to delete the cache files associated with an application for a given user. Since 50967ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * this may take a little while, the result will be posted back to the given observer. A 50977ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * deletion will fail if the calling context lacks the 50987ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.Manifest.permission#DELETE_CACHE_FILES} permission, if the named package 509965b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * cannot be found, or if the named package is a "system package". If {@code userId} does not 510065b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * belong to the calling user, the caller must have 51017ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * {@link android.Manifest.permission#INTERACT_ACROSS_USERS} permission. 5102b4e198f47f8423dfb101395cd6cb5a11fa12954eKenneth Graunke * 5103b4e198f47f8423dfb101395cd6cb5a11fa12954eKenneth Graunke * @param packageName The name of the package to delete 5104b4e198f47f8423dfb101395cd6cb5a11fa12954eKenneth Graunke * @param userId the user for which the cache files needs to be deleted 5105b4e198f47f8423dfb101395cd6cb5a11fa12954eKenneth Graunke * @param observer An observer callback to get notified when the cache file deletion is 5106b4e198f47f8423dfb101395cd6cb5a11fa12954eKenneth Graunke * complete. 5107b4e198f47f8423dfb101395cd6cb5a11fa12954eKenneth Graunke * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)} 51087ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * will be called when that happens. observer may be null to indicate that no 51097ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * callback is desired. 51107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 51117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke */ 511265b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick public abstract void deleteApplicationCacheFilesAsUser(String packageName, int userId, 51137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke IPackageDataObserver observer); 51147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 51157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 51167ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Free storage by deleting LRU sorted list of cache files across 511765b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * all applications. If the currently available free storage 51187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * on the device is greater than or equal to the requested 51197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * free storage, no cache files are cleared. If the currently 51207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * available storage on the device is less than the requested 51217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * free storage, some or all of the cache files across 51227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * all applications are deleted (based on last accessed time) 51237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * to increase the free storage space on the device to 512465b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * the requested value. There is no guarantee that clearing all 51257ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the cache files from all applications will clear up 51267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * enough storage to achieve the desired value. 51277ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param freeStorageSize The number of bytes of storage to be 51287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * freed by the system. Say if freeStorageSize is XX, 51297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * and the current free storage is YY, 51307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * if XX is less than YY, just return. if not free XX-YY number 513165b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * of bytes if possible. 51327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @param observer call back used to notify when 51337ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * the operation is completed 51347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * 51357ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * @hide 5136e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie */ 51377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer) { 51387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke freeStorageAndNotify(null, freeStorageSize, observer); 51397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 51407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 5141e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie /** {@hide} */ 51427ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public abstract void freeStorageAndNotify(String volumeUuid, long freeStorageSize, 5143e8ff08edd823ddf6b0e07ef84d2ba8afc3abbc34Thomas Sondergaard IPackageDataObserver observer); 51447ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 51457ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** 51467ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke * Free storage by deleting LRU sorted list of cache files across 5147b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner * all applications. If the currently available free storage 5148b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner * on the device is greater than or equal to the requested 5149b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner * free storage, no cache files are cleared. If the currently 5150b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner * available storage on the device is less than the requested 515165b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * free storage, some or all of the cache files across 51529e9e6fc8f1458c311474becad8c52e986698d92dMatt Turner * all applications are deleted (based on last accessed time) 5153e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * to increase the free storage space on the device to 5154e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * the requested value. There is no guarantee that clearing all 5155e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * the cache files from all applications will clear up 5156e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * enough storage to achieve the desired value. 5157e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param freeStorageSize The number of bytes of storage to be 5158e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * freed by the system. Say if freeStorageSize is XX, 5159e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * and the current free storage is YY, 5160e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * if XX is less than YY, just return. if not free XX-YY number 5161e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * of bytes if possible. 5162e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * @param pi IntentSender call back used to 5163e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * notify when the operation is completed.May be null 5164e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * to indicate that no call back is desired. 5165e6354a2850d6735b857298ad206a97db0de47fd6Dave Airlie * 5166b2ab840130677bbe7b67de4727fcd91ee6506bb8Matt Turner * @hide 5167d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner */ 5168d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner public void freeStorage(long freeStorageSize, IntentSender pi) { 5169d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner freeStorage(null, freeStorageSize, pi); 5170d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner } 5171d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner 5172d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner /** {@hide} */ 517365b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick public abstract void freeStorage(String volumeUuid, long freeStorageSize, IntentSender pi); 5174d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner 5175d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner /** 5176d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * Retrieve the size information for a package. 5177d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * Since this may take a little while, the result will 5178d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * be posted back to the given observer. The calling context 5179d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * should have the {@link android.Manifest.permission#GET_PACKAGE_SIZE} permission. 5180d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * 5181d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * @param packageName The name of the package whose size information is to be retrieved 5182d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * @param userId The user whose size information should be retrieved. 5183d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * @param observer An observer callback to get notified when the operation 5184d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * is complete. 5185d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * {@link android.content.pm.IPackageStatsObserver#onGetStatsCompleted(PackageStats, boolean)} 5186d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * The observer's callback is invoked with a PackageStats object(containing the 5187d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * code, data and cache sizes of the package) and a boolean value representing 5188d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * the status of the operation. observer may be null to indicate that 5189d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * no callback is desired. 5190d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * 5191d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * @deprecated use {@link StorageStatsManager} instead. 5192d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * @hide 5193d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner */ 5194d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner @Deprecated 5195d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner public abstract void getPackageSizeInfoAsUser(String packageName, @UserIdInt int userId, 5196d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner IPackageStatsObserver observer); 5197d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner 5198d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner /** 5199d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * Like {@link #getPackageSizeInfoAsUser(String, int, IPackageStatsObserver)}, but 5200d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * returns the size for the calling user. 5201d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * 5202d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * @deprecated use {@link StorageStatsManager} instead. 5203d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * @hide 5204d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner */ 5205d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner @Deprecated 5206d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) { 5207d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner getPackageSizeInfoAsUser(packageName, UserHandle.myUserId(), observer); 5208d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner } 5209d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner 5210d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner /** 5211d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * @deprecated This function no longer does anything; it was an old 5212d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * approach to managing preferred activities, which has been superseded 5213d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner * by (and conflicts with) the modern activity-based preferences. 5214d56bbd04415d439b8e04c8f27e911485813f01e4Matt Turner */ 52156c125973f31addf903921647e8244abccb944e1aMatt Turner @Deprecated 52166c125973f31addf903921647e8244abccb944e1aMatt Turner public abstract void addPackageToPreferred(String packageName); 52176c125973f31addf903921647e8244abccb944e1aMatt Turner 52186c125973f31addf903921647e8244abccb944e1aMatt Turner /** 52196c125973f31addf903921647e8244abccb944e1aMatt Turner * @deprecated This function no longer does anything; it was an old 52206c125973f31addf903921647e8244abccb944e1aMatt Turner * approach to managing preferred activities, which has been superseded 52216c125973f31addf903921647e8244abccb944e1aMatt Turner * by (and conflicts with) the modern activity-based preferences. 522265b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick */ 52236c125973f31addf903921647e8244abccb944e1aMatt Turner @Deprecated 52246c125973f31addf903921647e8244abccb944e1aMatt Turner public abstract void removePackageFromPreferred(String packageName); 52256c125973f31addf903921647e8244abccb944e1aMatt Turner 52266c125973f31addf903921647e8244abccb944e1aMatt Turner /** 52276c125973f31addf903921647e8244abccb944e1aMatt Turner * Retrieve the list of all currently configured preferred packages. The 52286c125973f31addf903921647e8244abccb944e1aMatt Turner * first package on the list is the most preferred, the last is the least 52296f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * preferred. 52306f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * 52316f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * @param flags Additional option flags to modify the data returned. 52326f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * @return A List of PackageInfo objects, one for each preferred 52336f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * application, in order of preference. 52346f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner */ 52356f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner public abstract List<PackageInfo> getPreferredPackages(@PackageInfoFlags int flags); 523665b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick 52376f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner /** 52386f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * @deprecated This is a protected API that should not have been available 52396f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * to third party applications. It is the platform's responsibility for 52406f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * assigning preferred activities and this cannot be directly modified. 52416f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * 52426f9428eb68bb0f7592f4384455fc7aab23940d92Matt Turner * Add a new preferred activity mapping to the system. This will be used 524306e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * to automatically select the given activity component when 524406e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * {@link Context#startActivity(Intent) Context.startActivity()} finds 524506e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * multiple matching activities and also matches the given filter. 524606e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * 524706e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * @param filter The set of intents under which this activity will be 524806e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * made preferred. 524906e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * @param match The IntentFilter match category that this preference 525006e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * applies to. 525106e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * @param set The set of activities that the user was picking from when 525206e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * this preference was made. 525306e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner * @param activity The component name of the activity that is to be 525465b0346fdbaf22eb2a6fc33e426b672a40495800Ian Romanick * preferred. 525506e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner */ 525606e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner @Deprecated 525706e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner public abstract void addPreferredActivity(IntentFilter filter, int match, 525806e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner ComponentName[] set, ComponentName activity); 525906e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner 526006e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner /** 5261bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * Same as {@link #addPreferredActivity(IntentFilter, int, 5262bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez ComponentName[], ComponentName)}, but with a specific userId to apply the preference 5263b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes to. 5264b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * @hide 5265b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes */ 5266b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes public void addPreferredActivityAsUser(IntentFilter filter, int match, 52673002296cb68ebc9705b29e024e5fc67d5565ed46Ilia Mirkin ComponentName[] set, ComponentName activity, @UserIdInt int userId) { 5268b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes throw new RuntimeException("Not implemented. Must override in a subclass."); 5269b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes } 5270b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes 5271b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes /** 5272b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * @deprecated This is a protected API that should not have been available 5273b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * to third party applications. It is the platform's responsibility for 5274b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * assigning preferred activities and this cannot be directly modified. 5275b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * 5276b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * Replaces an existing preferred activity mapping to the system, and if that were not present 5277b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * adds a new preferred activity. This will be used 5278b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * to automatically select the given activity component when 5279b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * {@link Context#startActivity(Intent) Context.startActivity()} finds 52803002296cb68ebc9705b29e024e5fc67d5565ed46Ilia Mirkin * multiple matching activities and also matches the given filter. 5281b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * 5282b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * @param filter The set of intents under which this activity will be 5283b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * made preferred. 5284b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * @param match The IntentFilter match category that this preference 5285b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * applies to. 5286b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * @param set The set of activities that the user was picking from when 5287b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * this preference was made. 5288b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * @param activity The component name of the activity that is to be 5289b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * preferred. 5290b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * @hide 5291b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes */ 5292b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes @Deprecated 52933002296cb68ebc9705b29e024e5fc67d5565ed46Ilia Mirkin public abstract void replacePreferredActivity(IntentFilter filter, int match, 5294b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes ComponentName[] set, ComponentName activity); 5295b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes 5296b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes /** 5297b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes * @hide 5298b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes */ 5299b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes @Deprecated 5300b45d4171080b4106aeb97cd449e584ab74a14d65Chris Forbes public void replacePreferredActivityAsUser(IntentFilter filter, int match, 53015854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick ComponentName[] set, ComponentName activity, @UserIdInt int userId) { 53025854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick throw new RuntimeException("Not implemented. Must override in a subclass."); 5303bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez } 5304bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez 53055854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 5306bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * Remove all preferred activity mappings, previously added with 5307bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * {@link #addPreferredActivity}, from the 5308bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * system whose activities are implemented in the given package name. 5309bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * An application can only clear its own package(s). 53105854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 53115854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @param packageName The name of the package whose preferred activity 5312075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * mappings are to be removed. 5313075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 5314075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin public abstract void clearPackagePreferredActivities(String packageName); 53155854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick 5316075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin /** 5317075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * Retrieve all preferred activities, previously added with 5318075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * {@link #addPreferredActivity}, that are 5319075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * currently registered with the system. 53205854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * 53215854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @param outFilters A required list in which to place the filters of all of the 5322075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * preferred activities. 5323075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @param outActivities A required list in which to place the component names of 5324075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * all of the preferred activities. 5325075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @param packageName An optional package in which you would like to limit 53265854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * the list. If null, all activities will be returned; if non-null, only 5327075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * those activities in the given package are returned. 5328075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * 5329075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @return Returns the total number of registered preferred activities 5330075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * (the number of distinct IntentFilter records, not the number of unique 5331a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * activity components) that were found. 53325854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick */ 53335854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick public abstract int getPreferredActivities(@NonNull List<IntentFilter> outFilters, 5334ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga @NonNull List<ComponentName> outActivities, String packageName); 5335ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga 5336ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga /** 53375854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * Ask for the set of available 'home' activities and the current explicit 5338ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * default, if any. 5339ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * @hide 5340ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga */ 5341ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga public abstract ComponentName getHomeActivities(List<ResolveInfo> outActivities); 5342a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen 53435854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick /** 53445854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * Set the enabled setting for a package component (activity, receiver, service, provider). 5345ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * This setting will override any enabled state which may have been set by the component in its 5346ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * manifest. 5347ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * 5348ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * @param componentName The component to enable 53495854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick * @param newState The new enabled state for the component. 5350ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * @param flags Optional behavior flags. 5351ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga */ 5352ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga public abstract void setComponentEnabledSetting(ComponentName componentName, 5353ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga @EnabledState int newState, @EnabledFlags int flags); 53542cacebaad3da88853e9b0d19522d24e11a7f4f91Iago Toral Quiroga 53552cacebaad3da88853e9b0d19522d24e11a7f4f91Iago Toral Quiroga /** 5356bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * Return the enabled setting for a package component (activity, 5357bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * receiver, service, provider). This returns the last value set by 5358bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * {@link #setComponentEnabledSetting(ComponentName, int, int)}; in most 5359bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * cases this value will be {@link #COMPONENT_ENABLED_STATE_DEFAULT} since 5360bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * the value originally specified in the manifest has not been modified. 5361bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * 5362bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez * @param componentName The component to retrieve. 5363075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @return Returns the current enabled state for the component. 5364075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 5365075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin public abstract @EnabledState int getComponentEnabledSetting( 5366075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin ComponentName componentName); 5367075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin 5368075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin /** 5369075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * Set the enabled setting for an application 5370075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * This setting will override any enabled state which may have been set by the application in 5371075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * its manifest. It also overrides the enabled state set in the manifest for any of the 5372075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * application's components. It does not override any enabled state set by 5373075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * {@link #setComponentEnabledSetting} for any of the application's components. 5374075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * 5375075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @param packageName The package name of the application to enable 5376c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @param newState The new enabled state for the application. 5377c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @param flags Optional behavior flags. 5378c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick */ 5379c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick public abstract void setApplicationEnabledSetting(String packageName, 5380c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick @EnabledState int newState, @EnabledFlags int flags); 5381c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick 5382c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick /** 5383c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * Return the enabled setting for an application. This returns 5384c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * the last value set by 5385c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * {@link #setApplicationEnabledSetting(String, int, int)}; in most 5386c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * cases this value will be {@link #COMPONENT_ENABLED_STATE_DEFAULT} since 5387c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * the value originally specified in the manifest has not been modified. 5388c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * 5389c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @param packageName The package name of the application to retrieve. 5390c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @return Returns the current enabled state for the application. 5391c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @throws IllegalArgumentException if the named package does not exist. 5392c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick */ 5393c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick public abstract @EnabledState int getApplicationEnabledSetting(String packageName); 5394c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick 5395c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick /** 5396c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * Flush the package restrictions for a given user to disk. This forces the package restrictions 5397c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * like component and package enabled settings to be written to disk and avoids the delay that 5398c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * is otherwise present when changing those settings. 5399c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * 5400c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @param userId Ther userId of the user whose restrictions are to be flushed. 5401c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick * @hide 5402c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick */ 5403c42fe30c8650a5bd19b22289f33a7ed35e427057Ian Romanick public abstract void flushPackageRestrictionsAsUser(int userId); 5404075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin 5405075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin /** 5406075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * Puts the package in a hidden state, which is almost like an uninstalled state, 5407075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * making the package unavailable, but it doesn't remove the data or the actual 5408075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * package file. Application can be unhidden by either resetting the hidden state 5409075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * or by installing it, such as with {@link #installExistingPackage(String)} 5410075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @hide 5411075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 5412075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin public abstract boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, 5413075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin UserHandle userHandle); 5414075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin 5415075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin /** 5416075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * Returns the hidden state of a package. 5417075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @see #setApplicationHiddenSettingAsUser(String, boolean, UserHandle) 5418075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin * @hide 5419075a5742bf65b35d19a1d86346db1c02f6dba9b2Ilia Mirkin */ 5420bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez public abstract boolean getApplicationHiddenSettingAsUser(String packageName, 5421bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez UserHandle userHandle); 5422bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez 5423bbded5b5feb40ee69717dc113fb4be1dc4807227Francisco Jerez /** 5424ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré * Return whether the device has been booted into safe mode. 5425a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen */ 5426a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen public abstract boolean isSafeMode(); 5427a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen 5428ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga /** 5429ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * Adds a listener for permission changes for installed packages. 5430ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * 5431ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * @param listener The listener to add. 5432ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * 5433ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * @hide 5434ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga */ 5435ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga @SystemApi 5436ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS) 5437ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga public abstract void addOnPermissionsChangeListener(OnPermissionsChangedListener listener); 5438ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga 5439ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga /** 5440ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * Remvoes a listener for permission changes for installed packages. 5441a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * 5442a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * @param listener The listener to remove. 5443a108e14d1c11140def8e2207ce42d8b54660607bJordan Justen * 5444ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * @hide 5445ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga */ 5446ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga @SystemApi 5447ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS) 5448ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga public abstract void removeOnPermissionsChangeListener(OnPermissionsChangedListener listener); 5449ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga 5450ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga /** 5451ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * Return the {@link KeySet} associated with the String alias for this 5452ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * application. 5453ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * 5454ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * @param alias The alias for a given {@link KeySet} as defined in the 5455ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * application's AndroidManifest.xml. 5456ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga * @hide 5457ea0a1f5beb22982a886ba862ba95f92c9e35165aIago Toral Quiroga */ 54586709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke public abstract KeySet getKeySetByAlias(String packageName, String alias); 5459ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré 54606709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke /** Return the signing {@link KeySet} for this application. 54616709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * @hide 54626709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke */ 54636709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke public abstract KeySet getSigningKeySet(String packageName); 5464ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré 54658d1400fe123dc229e87a3a6316b0697f864695a3Brian Paul /** 5466ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré * Return whether the package denoted by packageName has been signed by all 5467ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré * of the keys specified by the {@link KeySet} ks. This will return true if 5468ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré * the package has been signed by additional keys (a superset) as well. 5469ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré * Compare to {@link #isSignedByExactly(String packageName, KeySet ks)}. 5470ce46e147295e841a7483d6dec2f943724ab964c3Maxence Le Doré * @hide 547173c74515879335625909d70e229e80caaac86aa3Maxence Le Doré */ 54726709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke public abstract boolean isSignedBy(String packageName, KeySet ks); 547373c74515879335625909d70e229e80caaac86aa3Maxence Le Doré 54746709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke /** 54756709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * Return whether the package denoted by packageName has been signed by all 54766709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * of, and only, the keys specified by the {@link KeySet} ks. Compare to 54776709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * {@link #isSignedBy(String packageName, KeySet ks)}. 547873c74515879335625909d70e229e80caaac86aa3Maxence Le Doré * @hide 54798d1400fe123dc229e87a3a6316b0697f864695a3Brian Paul */ 548073c74515879335625909d70e229e80caaac86aa3Maxence Le Doré public abstract boolean isSignedByExactly(String packageName, KeySet ks); 548173c74515879335625909d70e229e80caaac86aa3Maxence Le Doré 548273c74515879335625909d70e229e80caaac86aa3Maxence Le Doré /** 548373c74515879335625909d70e229e80caaac86aa3Maxence Le Doré * Puts the package in a suspended state, where attempts at starting activities are denied. 548473c74515879335625909d70e229e80caaac86aa3Maxence Le Doré * 5485eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré * <p>It doesn't remove the data or the actual package file. The application notifications 54866709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * will be hidden, the application will not show up in recents, will not be able to show 5487eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré * toasts or dialogs or ring the device. 54886709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * 54896709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * <p>The package must already be installed. If the package is uninstalled while suspended 54906709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * the package will no longer be suspended. 54916709f0549f60a52d76868f3a929e075a8971c7fbKenneth Graunke * 5492eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré * @param packageNames The names of the packages to set the suspended status. 54938d1400fe123dc229e87a3a6316b0697f864695a3Brian Paul * @param suspended If set to {@code true} than the packages will be suspended, if set to 5494eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré * {@code false} the packages will be unsuspended. 5495eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré * @param userId The user id. 5496eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré * 5497eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré * @return an array of package names for which the suspended status is not set as requested in 5498eb5dc75601708d2d9bdf822960ae5b9151c105a1Maxence Le Doré * this method. 549981c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * 550081c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * @hide 550181c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez */ 550281c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez public abstract String[] setPackagesSuspendedAsUser( 550381c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez String[] packageNames, boolean suspended, @UserIdInt int userId); 550481c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez 550581c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez /** 550681c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * @see #setPackageSuspendedAsUser(String, boolean, int) 550781c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * @param packageName The name of the package to get the suspended status of. 550881c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * @param userId The user id. 550981c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * @return {@code true} if the package is suspended or {@code false} if the package is not 551081c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * suspended or could not be found. 551181c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez * @hide 551281c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez */ 551381c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez public abstract boolean isPackageSuspendedForUser(String packageName, int userId); 5514e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 5515e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 5516e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Provide a hint of what the {@link ApplicationInfo#category} value should 5517e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * be for the given package. 5518e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * <p> 5519e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * This hint can only be set by the app which installed this package, as 5520ac089126b9b647f930ee2657aa16ea8e8f6a5dd7Jason Ekstrand * determined by {@link #getInstallerPackageName(String)}. 5521e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * 5522e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param packageName the package to change the category hint for. 5523e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * @param categoryHint the category hint to set. 5524e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez */ 5525e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract void setApplicationCategoryHint(@NonNull String packageName, 5526e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez @ApplicationInfo.Category int categoryHint); 5527e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 5528e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** {@hide} */ 5529e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public static boolean isMoveStatusFinished(int status) { 5530e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez return (status < 0 || status > 100); 553181c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez } 553281c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez 553381c16a2dabf9903ca85b8a27002a354e223fa7ccFrancisco Jerez /** {@hide} */ 5534e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public static abstract class MoveCallback { 5535e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public void onCreated(int moveId, Bundle extras) {} 5536e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract void onStatusChanged(int moveId, int status, long estMillis); 5537e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez } 5538e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 5539e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** {@hide} */ 5540db8cd4d519d8b4cb2c05901e4f1a80a41ae67b2bIago Toral Quiroga public abstract int getMoveStatus(int moveId); 5541db8cd4d519d8b4cb2c05901e4f1a80a41ae67b2bIago Toral Quiroga 5542db8cd4d519d8b4cb2c05901e4f1a80a41ae67b2bIago Toral Quiroga /** {@hide} */ 5543db8cd4d519d8b4cb2c05901e4f1a80a41ae67b2bIago Toral Quiroga public abstract void registerMoveCallback(MoveCallback callback, Handler handler); 5544db8cd4d519d8b4cb2c05901e4f1a80a41ae67b2bIago Toral Quiroga /** {@hide} */ 5545e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract void unregisterMoveCallback(MoveCallback callback); 5546e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 5547e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** {@hide} */ 5548e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract int movePackage(String packageName, VolumeInfo vol); 5549e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** {@hide} */ 5550e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract @Nullable VolumeInfo getPackageCurrentVolume(ApplicationInfo app); 5551e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** {@hide} */ 5552e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract @NonNull List<VolumeInfo> getPackageCandidateVolumes(ApplicationInfo app); 5553932b0ef1ceecf873213447a8778e5cbe1b3b6be7Ian Romanick 5554932b0ef1ceecf873213447a8778e5cbe1b3b6be7Ian Romanick /** {@hide} */ 5555932b0ef1ceecf873213447a8778e5cbe1b3b6be7Ian Romanick public abstract int movePrimaryStorage(VolumeInfo vol); 5556932b0ef1ceecf873213447a8778e5cbe1b3b6be7Ian Romanick /** {@hide} */ 5557932b0ef1ceecf873213447a8778e5cbe1b3b6be7Ian Romanick public abstract @Nullable VolumeInfo getPrimaryStorageCurrentVolume(); 5558e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** {@hide} */ 5559e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez public abstract @NonNull List<VolumeInfo> getPrimaryStorageCandidateVolumes(); 5560e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 5561e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** 5562e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez * Returns the device identity that verifiers can use to associate their scheme to a particular 556358a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * device. This should not be used by anything other than a package verifier. 5564bd0245b8b2fba3852178d635f4e9602845ea6dd3Ian Romanick * 5565bd0245b8b2fba3852178d635f4e9602845ea6dd3Ian Romanick * @return identity that uniquely identifies current device 556658a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * @hide 556758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres */ 556858a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres public abstract VerifierDeviceIdentity getVerifierDeviceIdentity(); 556958a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres 557058a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres /** 557158a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * Returns true if the device is upgrading, such as first boot after OTA. 557258a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * 557358a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * @hide 557458a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres */ 557558a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres public abstract boolean isUpgrade(); 557658a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres 557758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres /** 557858a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * Return interface that offers the ability to install, upgrade, and remove 557958a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * applications on the device. 558058a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres */ 558158a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres public abstract @NonNull PackageInstaller getPackageInstaller(); 558258a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres 558358a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres /** 558458a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * Adds a {@code CrossProfileIntentFilter}. After calling this method all 558558a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * intents sent from the user with id sourceUserId can also be be resolved 558658a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * by activities in the user with id targetUserId if they match the 558758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * specified intent filter. 558858a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * 558958a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres * @param filter The {@link IntentFilter} the intent has to match 559037c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * @param sourceUserId The source user id. 559137c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * @param targetUserId The target user id. 559237c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * @param flags The possible values are {@link #SKIP_CURRENT_PROFILE} and 559337c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * {@link #ONLY_IF_NO_MATCH_FOUND}. 559437c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * @hide 559537c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin */ 559637c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin public abstract void addCrossProfileIntentFilter(IntentFilter filter, int sourceUserId, 559737c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin int targetUserId, int flags); 559837c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin 559937c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin /** 560037c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * Clearing {@code CrossProfileIntentFilter}s which have the specified user 560137c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * as their source, and have been set by the app calling this method. 560237c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * 560337c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * @param sourceUserId The source user id. 560437c2cfa6bc6743e2b9d30cf119353d5e2e4bb063Ian Romanick * @hide 560537c2cfa6bc6743e2b9d30cf119353d5e2e4bb063Ian Romanick */ 560637c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin public abstract void clearCrossProfileIntentFilters(int sourceUserId); 560737c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin 560837c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin /** 560937c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * @hide 561037c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin */ 561137c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin public abstract Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo); 561237c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin 561337c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin /** 561437c5c862810ddf8f3973ec738aa0a2a33af3bcb2Ilia Mirkin * @hide 561558a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres */ 561658a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres public abstract Drawable loadUnbadgedItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo); 561758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres 561858a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres /** {@hide} */ 561958a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres public abstract boolean isPackageAvailable(String packageName); 562058a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres 562158a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres /** {@hide} */ 562258a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres public static String installStatusToString(int status, String msg) { 562358a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres final String str = installStatusToString(status); 562458a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres if (msg != null) { 562558a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres return str + ": " + msg; 562658a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres } else { 562758a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres return str; 562858a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres } 562958a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres } 5630e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez 5631e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez /** {@hide} */ 56325854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick public static String installStatusToString(int status) { 56335854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick switch (status) { 5634e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_SUCCEEDED: return "INSTALL_SUCCEEDED"; 5635bd0245b8b2fba3852178d635f4e9602845ea6dd3Ian Romanick case INSTALL_FAILED_ALREADY_EXISTS: return "INSTALL_FAILED_ALREADY_EXISTS"; 563658a8689717a5965919934d1b4b44b4eef0a6bf64Martin Peres case INSTALL_FAILED_INVALID_APK: return "INSTALL_FAILED_INVALID_APK"; 5637e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_INVALID_URI: return "INSTALL_FAILED_INVALID_URI"; 5638e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_INSUFFICIENT_STORAGE: return "INSTALL_FAILED_INSUFFICIENT_STORAGE"; 5639e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_DUPLICATE_PACKAGE: return "INSTALL_FAILED_DUPLICATE_PACKAGE"; 5640e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_NO_SHARED_USER: return "INSTALL_FAILED_NO_SHARED_USER"; 5641e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_UPDATE_INCOMPATIBLE: return "INSTALL_FAILED_UPDATE_INCOMPATIBLE"; 5642e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: return "INSTALL_FAILED_SHARED_USER_INCOMPATIBLE"; 5643e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_MISSING_SHARED_LIBRARY: return "INSTALL_FAILED_MISSING_SHARED_LIBRARY"; 5644e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_REPLACE_COULDNT_DELETE: return "INSTALL_FAILED_REPLACE_COULDNT_DELETE"; 5645e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_DEXOPT: return "INSTALL_FAILED_DEXOPT"; 5646e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_OLDER_SDK: return "INSTALL_FAILED_OLDER_SDK"; 5647e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_CONFLICTING_PROVIDER: return "INSTALL_FAILED_CONFLICTING_PROVIDER"; 5648e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_NEWER_SDK: return "INSTALL_FAILED_NEWER_SDK"; 5649e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_TEST_ONLY: return "INSTALL_FAILED_TEST_ONLY"; 5650e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: return "INSTALL_FAILED_CPU_ABI_INCOMPATIBLE"; 5651e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_MISSING_FEATURE: return "INSTALL_FAILED_MISSING_FEATURE"; 5652e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_CONTAINER_ERROR: return "INSTALL_FAILED_CONTAINER_ERROR"; 5653e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_INVALID_INSTALL_LOCATION: return "INSTALL_FAILED_INVALID_INSTALL_LOCATION"; 56545854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick case INSTALL_FAILED_MEDIA_UNAVAILABLE: return "INSTALL_FAILED_MEDIA_UNAVAILABLE"; 5655e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_VERIFICATION_TIMEOUT: return "INSTALL_FAILED_VERIFICATION_TIMEOUT"; 5656e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_VERIFICATION_FAILURE: return "INSTALL_FAILED_VERIFICATION_FAILURE"; 5657e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_PACKAGE_CHANGED: return "INSTALL_FAILED_PACKAGE_CHANGED"; 5658e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_UID_CHANGED: return "INSTALL_FAILED_UID_CHANGED"; 5659e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_VERSION_DOWNGRADE: return "INSTALL_FAILED_VERSION_DOWNGRADE"; 5660e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_PARSE_FAILED_NOT_APK: return "INSTALL_PARSE_FAILED_NOT_APK"; 56615854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick case INSTALL_PARSE_FAILED_BAD_MANIFEST: return "INSTALL_PARSE_FAILED_BAD_MANIFEST"; 56625854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return "INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION"; 5663e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_PARSE_FAILED_NO_CERTIFICATES: return "INSTALL_PARSE_FAILED_NO_CERTIFICATES"; 56645854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick case INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES: return "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES"; 5665e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING: return "INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING"; 5666e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME: return "INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME"; 5667e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: return "INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID"; 5668e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: return "INSTALL_PARSE_FAILED_MANIFEST_MALFORMED"; 566991f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen case INSTALL_PARSE_FAILED_MANIFEST_EMPTY: return "INSTALL_PARSE_FAILED_MANIFEST_EMPTY"; 567091f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen case INSTALL_FAILED_INTERNAL_ERROR: return "INSTALL_FAILED_INTERNAL_ERROR"; 5671e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_USER_RESTRICTED: return "INSTALL_FAILED_USER_RESTRICTED"; 5672e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_DUPLICATE_PERMISSION: return "INSTALL_FAILED_DUPLICATE_PERMISSION"; 567391f188710ad8dce79936c5d28fd7b9a91b6d870aJordan Justen case INSTALL_FAILED_NO_MATCHING_ABIS: return "INSTALL_FAILED_NO_MATCHING_ABIS"; 5674e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_ABORTED: return "INSTALL_FAILED_ABORTED"; 5675e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_BAD_DEX_METADATA: 5676f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov return "INSTALL_FAILED_BAD_DEX_METADATA"; 5677f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov default: return Integer.toString(status); 5678f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov } 5679f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov } 5680f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov 5681f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov /** {@hide} */ 56825854de99b2735988f1fd7c08f367b4a8e58b270eIan Romanick public static int installStatusToPublicStatus(int status) { 5683f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov switch (status) { 5684f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_SUCCEEDED: return PackageInstaller.STATUS_SUCCESS; 5685f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_ALREADY_EXISTS: return PackageInstaller.STATUS_FAILURE_CONFLICT; 5686f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_INVALID_APK: return PackageInstaller.STATUS_FAILURE_INVALID; 5687f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_INVALID_URI: return PackageInstaller.STATUS_FAILURE_INVALID; 5688f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_INSUFFICIENT_STORAGE: return PackageInstaller.STATUS_FAILURE_STORAGE; 5689f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_DUPLICATE_PACKAGE: return PackageInstaller.STATUS_FAILURE_CONFLICT; 5690f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_NO_SHARED_USER: return PackageInstaller.STATUS_FAILURE_CONFLICT; 5691f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_UPDATE_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_CONFLICT; 5692f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_CONFLICT; 5693f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_MISSING_SHARED_LIBRARY: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; 5694f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_REPLACE_COULDNT_DELETE: return PackageInstaller.STATUS_FAILURE_CONFLICT; 5695f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_DEXOPT: return PackageInstaller.STATUS_FAILURE_INVALID; 5696f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_OLDER_SDK: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; 5697f1d98fc90ab6f1f424b26a5d3b3ead3b8614069aEmil Velikov case INSTALL_FAILED_CONFLICTING_PROVIDER: return PackageInstaller.STATUS_FAILURE_CONFLICT; 56985189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin case INSTALL_FAILED_NEWER_SDK: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; 56995189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin case INSTALL_FAILED_TEST_ONLY: return PackageInstaller.STATUS_FAILURE_INVALID; 57005189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin case INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; 57015189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin case INSTALL_FAILED_MISSING_FEATURE: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; 57025189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin case INSTALL_FAILED_CONTAINER_ERROR: return PackageInstaller.STATUS_FAILURE_STORAGE; 57035189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin case INSTALL_FAILED_INVALID_INSTALL_LOCATION: return PackageInstaller.STATUS_FAILURE_STORAGE; 57045189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin case INSTALL_FAILED_MEDIA_UNAVAILABLE: return PackageInstaller.STATUS_FAILURE_STORAGE; 57055189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin case INSTALL_FAILED_VERIFICATION_TIMEOUT: return PackageInstaller.STATUS_FAILURE_ABORTED; 57065189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin case INSTALL_FAILED_VERIFICATION_FAILURE: return PackageInstaller.STATUS_FAILURE_ABORTED; 57075189f0243a3dd8698c645bbe762b8a1a3caaf1a9Ilia Mirkin case INSTALL_FAILED_PACKAGE_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID; 5708e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_UID_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID; 5709e8dbe430aa77d6a775e087938bd19002f2a39e18Francisco Jerez case INSTALL_FAILED_VERSION_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID; 57107ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID; 57117ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_PARSE_FAILED_NOT_APK: return PackageInstaller.STATUS_FAILURE_INVALID; 57127ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_PARSE_FAILED_BAD_MANIFEST: return PackageInstaller.STATUS_FAILURE_INVALID; 57137ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return PackageInstaller.STATUS_FAILURE_INVALID; 57147ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_PARSE_FAILED_NO_CERTIFICATES: return PackageInstaller.STATUS_FAILURE_INVALID; 57157ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES: return PackageInstaller.STATUS_FAILURE_INVALID; 5716f19000550d8fa4a8a6d8659fdc2a564dcaee7552Brian Paul case INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING: return PackageInstaller.STATUS_FAILURE_INVALID; 57177ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME: return PackageInstaller.STATUS_FAILURE_INVALID; 57187ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: return PackageInstaller.STATUS_FAILURE_INVALID; 57197ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: return PackageInstaller.STATUS_FAILURE_INVALID; 57207ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_PARSE_FAILED_MANIFEST_EMPTY: return PackageInstaller.STATUS_FAILURE_INVALID; 57217ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_FAILED_BAD_DEX_METADATA: return PackageInstaller.STATUS_FAILURE_INVALID; 57227ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_FAILED_INTERNAL_ERROR: return PackageInstaller.STATUS_FAILURE; 57237ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_FAILED_USER_RESTRICTED: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; 57247ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_FAILED_DUPLICATE_PERMISSION: return PackageInstaller.STATUS_FAILURE_CONFLICT; 5725f19000550d8fa4a8a6d8659fdc2a564dcaee7552Brian Paul case INSTALL_FAILED_NO_MATCHING_ABIS: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; 57267ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case INSTALL_FAILED_ABORTED: return PackageInstaller.STATUS_FAILURE_ABORTED; 5727f19000550d8fa4a8a6d8659fdc2a564dcaee7552Brian Paul default: return PackageInstaller.STATUS_FAILURE; 57287ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 57297ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 57307ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 57317ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** {@hide} */ 57327ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke public static String deleteStatusToString(int status, String msg) { 5733f19000550d8fa4a8a6d8659fdc2a564dcaee7552Brian Paul final String str = deleteStatusToString(status); 57347ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke if (msg != null) { 5735f19000550d8fa4a8a6d8659fdc2a564dcaee7552Brian Paul return str + ": " + msg; 57367ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } else { 57377ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke return str; 57387ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 57397ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke } 57407ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke 57417ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke /** {@hide} */ 5742b47d231526821f5cff99546a984103a7222bc66cDaniel Kurtz public static String deleteStatusToString(int status) { 5743f19000550d8fa4a8a6d8659fdc2a564dcaee7552Brian Paul switch (status) { 5744b47d231526821f5cff99546a984103a7222bc66cDaniel Kurtz case DELETE_SUCCEEDED: return "DELETE_SUCCEEDED"; 5745f19000550d8fa4a8a6d8659fdc2a564dcaee7552Brian Paul case DELETE_FAILED_INTERNAL_ERROR: return "DELETE_FAILED_INTERNAL_ERROR"; 5746b47d231526821f5cff99546a984103a7222bc66cDaniel Kurtz case DELETE_FAILED_DEVICE_POLICY_MANAGER: return "DELETE_FAILED_DEVICE_POLICY_MANAGER"; 57477ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke case DELETE_FAILED_USER_RESTRICTED: return "DELETE_FAILED_USER_RESTRICTED"; 57481b557b1606ffcf05d2612d66226306e876b6b937Kenneth Graunke case DELETE_FAILED_OWNER_BLOCKED: return "DELETE_FAILED_OWNER_BLOCKED"; 5749187ace73a93d87122a977e4afade237be159ab04Samuel Iglesias Gonsálvez case DELETE_FAILED_ABORTED: return "DELETE_FAILED_ABORTED"; 5750bd0245b8b2fba3852178d635f4e9602845ea6dd3Ian Romanick case DELETE_FAILED_USED_SHARED_LIBRARY: return "DELETE_FAILED_USED_SHARED_LIBRARY"; 5751187ace73a93d87122a977e4afade237be159ab04Samuel Iglesias Gonsálvez default: return Integer.toString(status); 5752187ace73a93d87122a977e4afade237be159ab04Samuel Iglesias Gonsálvez } 5753187ace73a93d87122a977e4afade237be159ab04Samuel Iglesias Gonsálvez } 5754187ace73a93d87122a977e4afade237be159ab04Samuel Iglesias Gonsálvez 5755187ace73a93d87122a977e4afade237be159ab04Samuel Iglesias Gonsálvez /** {@hide} */ 5756187ace73a93d87122a977e4afade237be159ab04Samuel Iglesias Gonsálvez public static int deleteStatusToPublicStatus(int status) { 5757187ace73a93d87122a977e4afade237be159ab04Samuel Iglesias Gonsálvez switch (status) { 5758187ace73a93d87122a977e4afade237be159ab04Samuel Iglesias Gonsálvez case DELETE_SUCCEEDED: return PackageInstaller.STATUS_SUCCESS; 57591b557b1606ffcf05d2612d66226306e876b6b937Kenneth Graunke case DELETE_FAILED_INTERNAL_ERROR: return PackageInstaller.STATUS_FAILURE; 57601b557b1606ffcf05d2612d66226306e876b6b937Kenneth Graunke case DELETE_FAILED_DEVICE_POLICY_MANAGER: return PackageInstaller.STATUS_FAILURE_BLOCKED; 57611b557b1606ffcf05d2612d66226306e876b6b937Kenneth Graunke case DELETE_FAILED_USER_RESTRICTED: return PackageInstaller.STATUS_FAILURE_BLOCKED; 57621b557b1606ffcf05d2612d66226306e876b6b937Kenneth Graunke case DELETE_FAILED_OWNER_BLOCKED: return PackageInstaller.STATUS_FAILURE_BLOCKED; 57631b557b1606ffcf05d2612d66226306e876b6b937Kenneth Graunke case DELETE_FAILED_ABORTED: return PackageInstaller.STATUS_FAILURE_ABORTED; 57641b557b1606ffcf05d2612d66226306e876b6b937Kenneth Graunke case DELETE_FAILED_USED_SHARED_LIBRARY: return PackageInstaller.STATUS_FAILURE_CONFLICT; 5765c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen default: return PackageInstaller.STATUS_FAILURE; 5766c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen } 5767c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen } 5768c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen 5769c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen /** {@hide} */ 577047f83817303e0f24f2d410450f897945a5746ef2Timothy Arceri public static String permissionFlagToString(int flag) { 5771c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen switch (flag) { 577247f83817303e0f24f2d410450f897945a5746ef2Timothy Arceri case FLAG_PERMISSION_GRANTED_BY_DEFAULT: return "GRANTED_BY_DEFAULT"; 5773c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen case FLAG_PERMISSION_POLICY_FIXED: return "POLICY_FIXED"; 5774c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen case FLAG_PERMISSION_SYSTEM_FIXED: return "SYSTEM_FIXED"; 5775c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen case FLAG_PERMISSION_USER_SET: return "USER_SET"; 5776c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen case FLAG_PERMISSION_REVOKE_ON_UPGRADE: return "REVOKE_ON_UPGRADE"; 5777c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen case FLAG_PERMISSION_USER_FIXED: return "USER_FIXED"; 5778c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen case FLAG_PERMISSION_REVIEW_REQUIRED: return "REVIEW_REQUIRED"; 5779c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen default: return Integer.toString(flag); 5780c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen } 5781c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen } 5782c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen 5783c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen /** {@hide} */ 5784c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen public static class LegacyPackageDeleteObserver extends PackageDeleteObserver { 5785c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen private final IPackageDeleteObserver mLegacy; 5786c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen 5787c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen public LegacyPackageDeleteObserver(IPackageDeleteObserver legacy) { 5788c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen mLegacy = legacy; 5789c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen } 5790c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen 5791c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen @Override 5792c4d049f64603d934aed2a75cac86d4a3d4adadb7Jordan Justen public void onPackageDeleted(String basePackageName, int returnCode, String msg) { 57937ddc312c1b2c610ba8f244b49f4c4bc94eeca985Kenneth Graunke if (mLegacy == null) return; 5794 try { 5795 mLegacy.packageDeleted(basePackageName, returnCode); 5796 } catch (RemoteException ignored) { 5797 } 5798 } 5799 } 5800 5801 /** 5802 * Return the install reason that was recorded when a package was first 5803 * installed for a specific user. Requesting the install reason for another 5804 * user will require the permission INTERACT_ACROSS_USERS_FULL. 5805 * 5806 * @param packageName The package for which to retrieve the install reason 5807 * @param user The user for whom to retrieve the install reason 5808 * @return The install reason. If the package is not installed for the given 5809 * user, {@code INSTALL_REASON_UNKNOWN} is returned. 5810 * @hide 5811 */ 5812 @TestApi 5813 public abstract @InstallReason int getInstallReason(String packageName, 5814 @NonNull UserHandle user); 5815 5816 /** 5817 * Checks whether the calling package is allowed to request package installs through package 5818 * installer. Apps are encouraged to call this API before launching the package installer via 5819 * intent {@link android.content.Intent#ACTION_INSTALL_PACKAGE}. Starting from Android O, the 5820 * user can explicitly choose what external sources they trust to install apps on the device. 5821 * If this API returns false, the install request will be blocked by the package installer and 5822 * a dialog will be shown to the user with an option to launch settings to change their 5823 * preference. An application must target Android O or higher and declare permission 5824 * {@link android.Manifest.permission#REQUEST_INSTALL_PACKAGES} in order to use this API. 5825 * 5826 * @return true if the calling package is trusted by the user to request install packages on 5827 * the device, false otherwise. 5828 * @see android.content.Intent#ACTION_INSTALL_PACKAGE 5829 * @see android.provider.Settings#ACTION_MANAGE_UNKNOWN_APP_SOURCES 5830 */ 5831 public abstract boolean canRequestPackageInstalls(); 5832 5833 /** 5834 * Return the {@link ComponentName} of the activity providing Settings for the Instant App 5835 * resolver. 5836 * 5837 * @see {@link android.content.Intent#ACTION_INSTANT_APP_RESOLVER_SETTINGS} 5838 * @hide 5839 */ 5840 @SystemApi 5841 public abstract ComponentName getInstantAppResolverSettingsComponent(); 5842 5843 /** 5844 * Return the {@link ComponentName} of the activity responsible for installing instant 5845 * applications. 5846 * 5847 * @see {@link android.content.Intent#ACTION_INSTALL_INSTANT_APP_PACKAGE} 5848 * @hide 5849 */ 5850 @SystemApi 5851 public abstract ComponentName getInstantAppInstallerComponent(); 5852 5853 /** 5854 * Return the Android Id for a given Instant App. 5855 * 5856 * @see {@link android.provider.Settings.Secure#ANDROID_ID} 5857 * @hide 5858 */ 5859 public abstract String getInstantAppAndroidId(String packageName, @NonNull UserHandle user); 5860 5861 /** 5862 * Callback use to notify the callers of module registration that the operation 5863 * has finished. 5864 * 5865 * @hide 5866 */ 5867 @SystemApi 5868 public static abstract class DexModuleRegisterCallback { 5869 public abstract void onDexModuleRegistered(String dexModulePath, boolean success, 5870 String message); 5871 } 5872 5873 /** 5874 * Register an application dex module with the package manager. 5875 * The package manager will keep track of the given module for future optimizations. 5876 * 5877 * Dex module optimizations will disable the classpath checking at runtime. The client bares 5878 * the responsibility to ensure that the static assumptions on classes in the optimized code 5879 * hold at runtime (e.g. there's no duplicate classes in the classpath). 5880 * 5881 * Note that the package manager already keeps track of dex modules loaded with 5882 * {@link dalvik.system.DexClassLoader} and {@link dalvik.system.PathClassLoader}. 5883 * This can be called for an eager registration. 5884 * 5885 * The call might take a while and the results will be posted on the main thread, using 5886 * the given callback. 5887 * 5888 * If the module is intended to be shared with other apps, make sure that the file 5889 * permissions allow for it. 5890 * If at registration time the permissions allow for others to read it, the module would 5891 * be marked as a shared module which might undergo a different optimization strategy. 5892 * (usually shared modules will generated larger optimizations artifacts, 5893 * taking more disk space). 5894 * 5895 * @param dexModulePath the absolute path of the dex module. 5896 * @param callback if not null, {@link DexModuleRegisterCallback#onDexModuleRegistered} will 5897 * be called once the registration finishes. 5898 * 5899 * @hide 5900 */ 5901 @SystemApi 5902 public abstract void registerDexModule(String dexModulePath, 5903 @Nullable DexModuleRegisterCallback callback); 5904 5905 /** 5906 * Returns the {@link ArtManager} associated with this package manager. 5907 * 5908 * @hide 5909 */ 5910 @SystemApi 5911 public @NonNull ArtManager getArtManager() { 5912 throw new UnsupportedOperationException("getArtManager not implemented in subclass"); 5913 } 5914 5915 /** 5916 * Sets or clears the harmful app warning details for the given app. 5917 * 5918 * When set, any attempt to launch an activity in this package will be intercepted and a 5919 * warning dialog will be shown to the user instead, with the given warning. The user 5920 * will have the option to proceed with the activity launch, or to uninstall the application. 5921 * 5922 * @param packageName The full name of the package to warn on. 5923 * @param warning A warning string to display to the user describing the threat posed by the 5924 * application, or null to clear the warning. 5925 * 5926 * @hide 5927 */ 5928 @RequiresPermission(Manifest.permission.SET_HARMFUL_APP_WARNINGS) 5929 @SystemApi 5930 public void setHarmfulAppWarning(@NonNull String packageName, @Nullable CharSequence warning) { 5931 throw new UnsupportedOperationException("setHarmfulAppWarning not implemented in subclass"); 5932 } 5933 5934 /** 5935 * Returns the harmful app warning string for the given app, or null if there is none set. 5936 * 5937 * @param packageName The full name of the desired package. 5938 * 5939 * @hide 5940 */ 5941 @RequiresPermission(Manifest.permission.SET_HARMFUL_APP_WARNINGS) 5942 @Nullable 5943 @SystemApi 5944 public CharSequence getHarmfulAppWarning(@NonNull String packageName) { 5945 throw new UnsupportedOperationException("getHarmfulAppWarning not implemented in subclass"); 5946 } 5947 5948 /** @hide */ 5949 @IntDef(prefix = { "CERT_INPUT_" }, value = { 5950 CERT_INPUT_RAW_X509, 5951 CERT_INPUT_SHA256 5952 }) 5953 @Retention(RetentionPolicy.SOURCE) 5954 public @interface CertificateInputType {} 5955 5956 /** 5957 * Certificate input bytes: the input bytes represent an encoded X.509 Certificate which could 5958 * be generated using an {@code CertificateFactory} 5959 */ 5960 public static final int CERT_INPUT_RAW_X509 = 0; 5961 5962 /** 5963 * Certificate input bytes: the input bytes represent the SHA256 output of an encoded X.509 5964 * Certificate. 5965 */ 5966 public static final int CERT_INPUT_SHA256 = 1; 5967 5968 /** 5969 * Searches the set of signing certificates by which the given package has proven to have been 5970 * signed. This should be used instead of {@code getPackageInfo} with {@code GET_SIGNATURES} 5971 * since it takes into account the possibility of signing certificate rotation, except in the 5972 * case of packages that are signed by multiple certificates, for which signing certificate 5973 * rotation is not supported. 5974 * 5975 * @param packageName package whose signing certificates to check 5976 * @param certificate signing certificate for which to search 5977 * @param type representation of the {@code certificate} 5978 * @return true if this package was or is signed by exactly the certificate {@code certificate} 5979 */ 5980 public boolean hasSigningCertificate( 5981 String packageName, byte[] certificate, @CertificateInputType int type) { 5982 throw new UnsupportedOperationException( 5983 "hasSigningCertificate not implemented in subclass"); 5984 } 5985 5986 /** 5987 * Searches the set of signing certificates by which the given uid has proven to have been 5988 * signed. This should be used instead of {@code getPackageInfo} with {@code GET_SIGNATURES} 5989 * since it takes into account the possibility of signing certificate rotation, except in the 5990 * case of packages that are signed by multiple certificates, for which signing certificate 5991 * rotation is not supported. 5992 * 5993 * @param uid package whose signing certificates to check 5994 * @param certificate signing certificate for which to search 5995 * @param type representation of the {@code certificate} 5996 * @return true if this package was or is signed by exactly the certificate {@code certificate} 5997 */ 5998 public boolean hasSigningCertificate( 5999 int uid, byte[] certificate, @CertificateInputType int type) { 6000 throw new UnsupportedOperationException( 6001 "hasSigningCertificate not implemented in subclass"); 6002 } 6003} 6004