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     * &lt;permission-tree&gt;} 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