Home | History | Annotate | Download | only in pm
      1 /*
      2  * Copyright (C) 2006 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.content.pm;
     18 
     19 import android.annotation.SdkConstant;
     20 import android.annotation.SdkConstant.SdkConstantType;
     21 import android.content.ComponentName;
     22 import android.content.Context;
     23 import android.content.Intent;
     24 import android.content.IntentFilter;
     25 import android.content.IntentSender;
     26 import android.content.res.Resources;
     27 import android.content.res.XmlResourceParser;
     28 import android.graphics.drawable.Drawable;
     29 import android.net.Uri;
     30 import android.os.Environment;
     31 import android.os.UserHandle;
     32 import android.util.AndroidException;
     33 import android.util.DisplayMetrics;
     34 
     35 import java.io.File;
     36 import java.util.List;
     37 
     38 /**
     39  * Class for retrieving various kinds of information related to the application
     40  * packages that are currently installed on the device.
     41  *
     42  * You can find this class through {@link Context#getPackageManager}.
     43  */
     44 public abstract class PackageManager {
     45 
     46     /**
     47      * This exception is thrown when a given package, application, or component
     48      * name can not be found.
     49      */
     50     public static class NameNotFoundException extends AndroidException {
     51         public NameNotFoundException() {
     52         }
     53 
     54         public NameNotFoundException(String name) {
     55             super(name);
     56         }
     57     }
     58 
     59     /**
     60      * {@link PackageInfo} flag: return information about
     61      * activities in the package in {@link PackageInfo#activities}.
     62      */
     63     public static final int GET_ACTIVITIES              = 0x00000001;
     64 
     65     /**
     66      * {@link PackageInfo} flag: return information about
     67      * intent receivers in the package in
     68      * {@link PackageInfo#receivers}.
     69      */
     70     public static final int GET_RECEIVERS               = 0x00000002;
     71 
     72     /**
     73      * {@link PackageInfo} flag: return information about
     74      * services in the package in {@link PackageInfo#services}.
     75      */
     76     public static final int GET_SERVICES                = 0x00000004;
     77 
     78     /**
     79      * {@link PackageInfo} flag: return information about
     80      * content providers in the package in
     81      * {@link PackageInfo#providers}.
     82      */
     83     public static final int GET_PROVIDERS               = 0x00000008;
     84 
     85     /**
     86      * {@link PackageInfo} flag: return information about
     87      * instrumentation in the package in
     88      * {@link PackageInfo#instrumentation}.
     89      */
     90     public static final int GET_INSTRUMENTATION         = 0x00000010;
     91 
     92     /**
     93      * {@link PackageInfo} flag: return information about the
     94      * intent filters supported by the activity.
     95      */
     96     public static final int GET_INTENT_FILTERS          = 0x00000020;
     97 
     98     /**
     99      * {@link PackageInfo} flag: return information about the
    100      * signatures included in the package.
    101      */
    102     public static final int GET_SIGNATURES          = 0x00000040;
    103 
    104     /**
    105      * {@link ResolveInfo} flag: return the IntentFilter that
    106      * was matched for a particular ResolveInfo in
    107      * {@link ResolveInfo#filter}.
    108      */
    109     public static final int GET_RESOLVED_FILTER         = 0x00000040;
    110 
    111     /**
    112      * {@link ComponentInfo} flag: return the {@link ComponentInfo#metaData}
    113      * data {@link android.os.Bundle}s that are associated with a component.
    114      * This applies for any API returning a ComponentInfo subclass.
    115      */
    116     public static final int GET_META_DATA               = 0x00000080;
    117 
    118     /**
    119      * {@link PackageInfo} flag: return the
    120      * {@link PackageInfo#gids group ids} that are associated with an
    121      * application.
    122      * This applies for any API returning a PackageInfo class, either
    123      * directly or nested inside of another.
    124      */
    125     public static final int GET_GIDS                    = 0x00000100;
    126 
    127     /**
    128      * {@link PackageInfo} flag: include disabled components in the returned info.
    129      */
    130     public static final int GET_DISABLED_COMPONENTS     = 0x00000200;
    131 
    132     /**
    133      * {@link ApplicationInfo} flag: return the
    134      * {@link ApplicationInfo#sharedLibraryFiles paths to the shared libraries}
    135      * that are associated with an application.
    136      * This applies for any API returning an ApplicationInfo class, either
    137      * directly or nested inside of another.
    138      */
    139     public static final int GET_SHARED_LIBRARY_FILES    = 0x00000400;
    140 
    141     /**
    142      * {@link ProviderInfo} flag: return the
    143      * {@link ProviderInfo#uriPermissionPatterns URI permission patterns}
    144      * that are associated with a content provider.
    145      * This applies for any API returning a ProviderInfo class, either
    146      * directly or nested inside of another.
    147      */
    148     public static final int GET_URI_PERMISSION_PATTERNS  = 0x00000800;
    149     /**
    150      * {@link PackageInfo} flag: return information about
    151      * permissions in the package in
    152      * {@link PackageInfo#permissions}.
    153      */
    154     public static final int GET_PERMISSIONS               = 0x00001000;
    155 
    156     /**
    157      * Flag parameter to retrieve some information about all applications (even
    158      * uninstalled ones) which have data directories. This state could have
    159      * resulted if applications have been deleted with flag
    160      * {@code DONT_DELETE_DATA} with a possibility of being replaced or
    161      * reinstalled in future.
    162      * <p>
    163      * Note: this flag may cause less information about currently installed
    164      * applications to be returned.
    165      */
    166     public static final int GET_UNINSTALLED_PACKAGES = 0x00002000;
    167 
    168     /**
    169      * {@link PackageInfo} flag: return information about
    170      * hardware preferences in
    171      * {@link PackageInfo#configPreferences PackageInfo.configPreferences} and
    172      * requested features in {@link PackageInfo#reqFeatures
    173      * PackageInfo.reqFeatures}.
    174      */
    175     public static final int GET_CONFIGURATIONS = 0x00004000;
    176 
    177     /**
    178      * Resolution and querying flag: if set, only filters that support the
    179      * {@link android.content.Intent#CATEGORY_DEFAULT} will be considered for
    180      * matching.  This is a synonym for including the CATEGORY_DEFAULT in your
    181      * supplied Intent.
    182      */
    183     public static final int MATCH_DEFAULT_ONLY   = 0x00010000;
    184 
    185     /**
    186      * Permission check result: this is returned by {@link #checkPermission}
    187      * if the permission has been granted to the given package.
    188      */
    189     public static final int PERMISSION_GRANTED = 0;
    190 
    191     /**
    192      * Permission check result: this is returned by {@link #checkPermission}
    193      * if the permission has not been granted to the given package.
    194      */
    195     public static final int PERMISSION_DENIED = -1;
    196 
    197     /**
    198      * Signature check result: this is returned by {@link #checkSignatures}
    199      * if all signatures on the two packages match.
    200      */
    201     public static final int SIGNATURE_MATCH = 0;
    202 
    203     /**
    204      * Signature check result: this is returned by {@link #checkSignatures}
    205      * if neither of the two packages is signed.
    206      */
    207     public static final int SIGNATURE_NEITHER_SIGNED = 1;
    208 
    209     /**
    210      * Signature check result: this is returned by {@link #checkSignatures}
    211      * if the first package is not signed but the second is.
    212      */
    213     public static final int SIGNATURE_FIRST_NOT_SIGNED = -1;
    214 
    215     /**
    216      * Signature check result: this is returned by {@link #checkSignatures}
    217      * if the second package is not signed but the first is.
    218      */
    219     public static final int SIGNATURE_SECOND_NOT_SIGNED = -2;
    220 
    221     /**
    222      * Signature check result: this is returned by {@link #checkSignatures}
    223      * if not all signatures on both packages match.
    224      */
    225     public static final int SIGNATURE_NO_MATCH = -3;
    226 
    227     /**
    228      * Signature check result: this is returned by {@link #checkSignatures}
    229      * if either of the packages are not valid.
    230      */
    231     public static final int SIGNATURE_UNKNOWN_PACKAGE = -4;
    232 
    233     /**
    234      * Flag for {@link #setApplicationEnabledSetting(String, int, int)}
    235      * and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
    236      * component or application is in its default enabled state (as specified
    237      * in its manifest).
    238      */
    239     public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0;
    240 
    241     /**
    242      * Flag for {@link #setApplicationEnabledSetting(String, int, int)}
    243      * and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
    244      * component or application has been explictily enabled, regardless of
    245      * what it has specified in its manifest.
    246      */
    247     public static final int COMPONENT_ENABLED_STATE_ENABLED = 1;
    248 
    249     /**
    250      * Flag for {@link #setApplicationEnabledSetting(String, int, int)}
    251      * and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
    252      * component or application has been explicitly disabled, regardless of
    253      * what it has specified in its manifest.
    254      */
    255     public static final int COMPONENT_ENABLED_STATE_DISABLED = 2;
    256 
    257     /**
    258      * Flag for {@link #setApplicationEnabledSetting(String, int, int)} only: The
    259      * user has explicitly disabled the application, regardless of what it has
    260      * specified in its manifest.  Because this is due to the user's request,
    261      * they may re-enable it if desired through the appropriate system UI.  This
    262      * option currently <strong>can not</strong> be used with
    263      * {@link #setComponentEnabledSetting(ComponentName, int, int)}.
    264      */
    265     public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3;
    266 
    267     /**
    268      * Flag parameter for {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} to
    269      * indicate that this package should be installed as forward locked, i.e. only the app itself
    270      * should have access to its code and non-resource assets.
    271      * @hide
    272      */
    273     public static final int INSTALL_FORWARD_LOCK = 0x00000001;
    274 
    275     /**
    276      * Flag parameter for {@link #installPackage} to indicate that you want to replace an already
    277      * installed package, if one exists.
    278      * @hide
    279      */
    280     public static final int INSTALL_REPLACE_EXISTING = 0x00000002;
    281 
    282     /**
    283      * Flag parameter for {@link #installPackage} to indicate that you want to
    284      * allow test packages (those that have set android:testOnly in their
    285      * manifest) to be installed.
    286      * @hide
    287      */
    288     public static final int INSTALL_ALLOW_TEST = 0x00000004;
    289 
    290     /**
    291      * Flag parameter for {@link #installPackage} to indicate that this
    292      * package has to be installed on the sdcard.
    293      * @hide
    294      */
    295     public static final int INSTALL_EXTERNAL = 0x00000008;
    296 
    297     /**
    298      * Flag parameter for {@link #installPackage} to indicate that this package
    299      * has to be installed on the sdcard.
    300      * @hide
    301      */
    302     public static final int INSTALL_INTERNAL = 0x00000010;
    303 
    304     /**
    305      * Flag parameter for {@link #installPackage} to indicate that this install
    306      * was initiated via ADB.
    307      *
    308      * @hide
    309      */
    310     public static final int INSTALL_FROM_ADB = 0x00000020;
    311 
    312     /**
    313      * Flag parameter for {@link #installPackage} to indicate that this install
    314      * should immediately be visible to all users.
    315      *
    316      * @hide
    317      */
    318     public static final int INSTALL_ALL_USERS = 0x00000040;
    319 
    320     /**
    321      * Flag parameter for {@link #installPackage} to indicate that it is okay
    322      * to install an update to an app where the newly installed app has a lower
    323      * version code than the currently installed app.
    324      *
    325      * @hide
    326      */
    327     public static final int INSTALL_ALLOW_DOWNGRADE = 0x00000080;
    328 
    329     /**
    330      * Flag parameter for
    331      * {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
    332      * that you don't want to kill the app containing the component.  Be careful when you set this
    333      * since changing component states can make the containing application's behavior unpredictable.
    334      */
    335     public static final int DONT_KILL_APP = 0x00000001;
    336 
    337     /**
    338      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    339      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} on success.
    340      * @hide
    341      */
    342     public static final int INSTALL_SUCCEEDED = 1;
    343 
    344     /**
    345      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    346      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if the package is
    347      * already installed.
    348      * @hide
    349      */
    350     public static final int INSTALL_FAILED_ALREADY_EXISTS = -1;
    351 
    352     /**
    353      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    354      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if the package archive
    355      * file is invalid.
    356      * @hide
    357      */
    358     public static final int INSTALL_FAILED_INVALID_APK = -2;
    359 
    360     /**
    361      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    362      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if the URI passed in
    363      * is invalid.
    364      * @hide
    365      */
    366     public static final int INSTALL_FAILED_INVALID_URI = -3;
    367 
    368     /**
    369      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    370      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if the package manager
    371      * service found that the device didn't have enough storage space to install the app.
    372      * @hide
    373      */
    374     public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4;
    375 
    376     /**
    377      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    378      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if a
    379      * package is already installed with the same name.
    380      * @hide
    381      */
    382     public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5;
    383 
    384     /**
    385      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    386      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    387      * the requested shared user does not exist.
    388      * @hide
    389      */
    390     public static final int INSTALL_FAILED_NO_SHARED_USER = -6;
    391 
    392     /**
    393      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    394      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    395      * a previously installed package of the same name has a different signature
    396      * than the new package (and the old package's data was not removed).
    397      * @hide
    398      */
    399     public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7;
    400 
    401     /**
    402      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    403      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    404      * the new package is requested a shared user which is already installed on the
    405      * device and does not have matching signature.
    406      * @hide
    407      */
    408     public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8;
    409 
    410     /**
    411      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    412      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    413      * the new package uses a shared library that is not available.
    414      * @hide
    415      */
    416     public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9;
    417 
    418     /**
    419      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    420      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    421      * the new package uses a shared library that is not available.
    422      * @hide
    423      */
    424     public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10;
    425 
    426     /**
    427      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    428      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    429      * the new package failed while optimizing and validating its dex files,
    430      * either because there was not enough storage or the validation failed.
    431      * @hide
    432      */
    433     public static final int INSTALL_FAILED_DEXOPT = -11;
    434 
    435     /**
    436      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    437      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    438      * the new package failed because the current SDK version is older than
    439      * that required by the package.
    440      * @hide
    441      */
    442     public static final int INSTALL_FAILED_OLDER_SDK = -12;
    443 
    444     /**
    445      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    446      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    447      * the new package failed because it contains a content provider with the
    448      * same authority as a provider already installed in the system.
    449      * @hide
    450      */
    451     public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13;
    452 
    453     /**
    454      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    455      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    456      * the new package failed because the current SDK version is newer than
    457      * that required by the package.
    458      * @hide
    459      */
    460     public static final int INSTALL_FAILED_NEWER_SDK = -14;
    461 
    462     /**
    463      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    464      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    465      * the new package failed because it has specified that it is a test-only
    466      * package and the caller has not supplied the {@link #INSTALL_ALLOW_TEST}
    467      * flag.
    468      * @hide
    469      */
    470     public static final int INSTALL_FAILED_TEST_ONLY = -15;
    471 
    472     /**
    473      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    474      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    475      * the package being installed contains native code, but none that is
    476      * compatible with the the device's CPU_ABI.
    477      * @hide
    478      */
    479     public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16;
    480 
    481     /**
    482      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    483      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    484      * the new package uses a feature that is not available.
    485      * @hide
    486      */
    487     public static final int INSTALL_FAILED_MISSING_FEATURE = -17;
    488 
    489     // ------ Errors related to sdcard
    490     /**
    491      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    492      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    493      * a secure container mount point couldn't be accessed on external media.
    494      * @hide
    495      */
    496     public static final int INSTALL_FAILED_CONTAINER_ERROR = -18;
    497 
    498     /**
    499      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    500      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    501      * the new package couldn't be installed in the specified install
    502      * location.
    503      * @hide
    504      */
    505     public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19;
    506 
    507     /**
    508      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    509      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    510      * the new package couldn't be installed in the specified install
    511      * location because the media is not available.
    512      * @hide
    513      */
    514     public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20;
    515 
    516     /**
    517      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    518      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    519      * the new package couldn't be installed because the verification timed out.
    520      * @hide
    521      */
    522     public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21;
    523 
    524     /**
    525      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    526      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    527      * the new package couldn't be installed because the verification did not succeed.
    528      * @hide
    529      */
    530     public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22;
    531 
    532     /**
    533      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    534      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    535      * the package changed from what the calling program expected.
    536      * @hide
    537      */
    538     public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23;
    539 
    540     /**
    541      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    542      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    543      * the new package is assigned a different UID than it previously held.
    544      * @hide
    545      */
    546     public static final int INSTALL_FAILED_UID_CHANGED = -24;
    547 
    548     /**
    549      * Installation return code: this is passed to the {@link IPackageInstallObserver} by
    550      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
    551      * the new package has an older version code than the currently installed package.
    552      * @hide
    553      */
    554     public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25;
    555 
    556     /**
    557      * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
    558      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    559      * if the parser was given a path that is not a file, or does not end with the expected
    560      * '.apk' extension.
    561      * @hide
    562      */
    563     public static final int INSTALL_PARSE_FAILED_NOT_APK = -100;
    564 
    565     /**
    566      * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
    567      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    568      * if the parser was unable to retrieve the AndroidManifest.xml file.
    569      * @hide
    570      */
    571     public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101;
    572 
    573     /**
    574      * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
    575      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    576      * if the parser encountered an unexpected exception.
    577      * @hide
    578      */
    579     public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102;
    580 
    581     /**
    582      * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
    583      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    584      * if the parser did not find any certificates in the .apk.
    585      * @hide
    586      */
    587     public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103;
    588 
    589     /**
    590      * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
    591      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    592      * if the parser found inconsistent certificates on the files in the .apk.
    593      * @hide
    594      */
    595     public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104;
    596 
    597     /**
    598      * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
    599      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    600      * if the parser encountered a CertificateEncodingException in one of the
    601      * files in the .apk.
    602      * @hide
    603      */
    604     public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105;
    605 
    606     /**
    607      * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
    608      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    609      * if the parser encountered a bad or missing package name in the manifest.
    610      * @hide
    611      */
    612     public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106;
    613 
    614     /**
    615      * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
    616      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    617      * if the parser encountered a bad shared user id name in the manifest.
    618      * @hide
    619      */
    620     public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107;
    621 
    622     /**
    623      * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
    624      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    625      * if the parser encountered some structural problem in the manifest.
    626      * @hide
    627      */
    628     public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108;
    629 
    630     /**
    631      * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
    632      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    633      * if the parser did not find any actionable tags (instrumentation or application)
    634      * in the manifest.
    635      * @hide
    636      */
    637     public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109;
    638 
    639     /**
    640      * Installation failed return code: this is passed to the {@link IPackageInstallObserver} by
    641      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
    642      * if the system failed to install the package because of system issues.
    643      * @hide
    644      */
    645     public static final int INSTALL_FAILED_INTERNAL_ERROR = -110;
    646 
    647     /**
    648      * Flag parameter for {@link #deletePackage} to indicate that you don't want to delete the
    649      * package's data directory.
    650      *
    651      * @hide
    652      */
    653     public static final int DELETE_KEEP_DATA = 0x00000001;
    654 
    655     /**
    656      * Flag parameter for {@link #deletePackage} to indicate that you want the
    657      * package deleted for all users.
    658      *
    659      * @hide
    660      */
    661     public static final int DELETE_ALL_USERS = 0x00000002;
    662 
    663     /**
    664      * Return code for when package deletion succeeds. This is passed to the
    665      * {@link IPackageDeleteObserver} by {@link #deletePackage()} if the system
    666      * succeeded in deleting the package.
    667      *
    668      * @hide
    669      */
    670     public static final int DELETE_SUCCEEDED = 1;
    671 
    672     /**
    673      * Deletion failed return code: this is passed to the
    674      * {@link IPackageDeleteObserver} by {@link #deletePackage()} if the system
    675      * failed to delete the package for an unspecified reason.
    676      *
    677      * @hide
    678      */
    679     public static final int DELETE_FAILED_INTERNAL_ERROR = -1;
    680 
    681     /**
    682      * Deletion failed return code: this is passed to the
    683      * {@link IPackageDeleteObserver} by {@link #deletePackage()} if the system
    684      * failed to delete the package because it is the active DevicePolicy
    685      * manager.
    686      *
    687      * @hide
    688      */
    689     public static final int DELETE_FAILED_DEVICE_POLICY_MANAGER = -2;
    690 
    691     /**
    692      * Return code that is passed to the {@link IPackageMoveObserver} by
    693      * {@link #movePackage(android.net.Uri, IPackageMoveObserver)} when the
    694      * package has been successfully moved by the system.
    695      *
    696      * @hide
    697      */
    698     public static final int MOVE_SUCCEEDED = 1;
    699     /**
    700      * Error code that is passed to the {@link IPackageMoveObserver} by
    701      * {@link #movePackage(android.net.Uri, IPackageMoveObserver)}
    702      * when the package hasn't been successfully moved by the system
    703      * because of insufficient memory on specified media.
    704      * @hide
    705      */
    706     public static final int MOVE_FAILED_INSUFFICIENT_STORAGE = -1;
    707 
    708     /**
    709      * Error code that is passed to the {@link IPackageMoveObserver} by
    710      * {@link #movePackage(android.net.Uri, IPackageMoveObserver)}
    711      * if the specified package doesn't exist.
    712      * @hide
    713      */
    714     public static final int MOVE_FAILED_DOESNT_EXIST = -2;
    715 
    716     /**
    717      * Error code that is passed to the {@link IPackageMoveObserver} by
    718      * {@link #movePackage(android.net.Uri, IPackageMoveObserver)}
    719      * if the specified package cannot be moved since its a system package.
    720      * @hide
    721      */
    722     public static final int MOVE_FAILED_SYSTEM_PACKAGE = -3;
    723 
    724     /**
    725      * Error code that is passed to the {@link IPackageMoveObserver} by
    726      * {@link #movePackage(android.net.Uri, IPackageMoveObserver)}
    727      * if the specified package cannot be moved since its forward locked.
    728      * @hide
    729      */
    730     public static final int MOVE_FAILED_FORWARD_LOCKED = -4;
    731 
    732     /**
    733      * Error code that is passed to the {@link IPackageMoveObserver} by
    734      * {@link #movePackage(android.net.Uri, IPackageMoveObserver)}
    735      * if the specified package cannot be moved to the specified location.
    736      * @hide
    737      */
    738     public static final int MOVE_FAILED_INVALID_LOCATION = -5;
    739 
    740     /**
    741      * Error code that is passed to the {@link IPackageMoveObserver} by
    742      * {@link #movePackage(android.net.Uri, IPackageMoveObserver)}
    743      * if the specified package cannot be moved to the specified location.
    744      * @hide
    745      */
    746     public static final int MOVE_FAILED_INTERNAL_ERROR = -6;
    747 
    748     /**
    749      * Error code that is passed to the {@link IPackageMoveObserver} by
    750      * {@link #movePackage(android.net.Uri, IPackageMoveObserver)} if the
    751      * specified package already has an operation pending in the
    752      * {@link PackageHandler} queue.
    753      *
    754      * @hide
    755      */
    756     public static final int MOVE_FAILED_OPERATION_PENDING = -7;
    757 
    758     /**
    759      * Flag parameter for {@link #movePackage} to indicate that
    760      * the package should be moved to internal storage if its
    761      * been installed on external media.
    762      * @hide
    763      */
    764     public static final int MOVE_INTERNAL = 0x00000001;
    765 
    766     /**
    767      * Flag parameter for {@link #movePackage} to indicate that
    768      * the package should be moved to external media.
    769      * @hide
    770      */
    771     public static final int MOVE_EXTERNAL_MEDIA = 0x00000002;
    772 
    773     /**
    774      * Usable by the required verifier as the {@code verificationCode} argument
    775      * for {@link PackageManager#verifyPendingInstall} to indicate that it will
    776      * allow the installation to proceed without any of the optional verifiers
    777      * needing to vote.
    778      *
    779      * @hide
    780      */
    781     public static final int VERIFICATION_ALLOW_WITHOUT_SUFFICIENT = 2;
    782 
    783     /**
    784      * Used as the {@code verificationCode} argument for
    785      * {@link PackageManager#verifyPendingInstall} to indicate that the calling
    786      * package verifier allows the installation to proceed.
    787      */
    788     public static final int VERIFICATION_ALLOW = 1;
    789 
    790     /**
    791      * Used as the {@code verificationCode} argument for
    792      * {@link PackageManager#verifyPendingInstall} to indicate the calling
    793      * package verifier does not vote to allow the installation to proceed.
    794      */
    795     public static final int VERIFICATION_REJECT = -1;
    796 
    797     /**
    798      * Can be used as the {@code millisecondsToDelay} argument for
    799      * {@link PackageManager#extendVerificationTimeout}. This is the
    800      * maximum time {@code PackageManager} waits for the verification
    801      * agent to return (in milliseconds).
    802      */
    803     public static final long MAXIMUM_VERIFICATION_TIMEOUT = 60*60*1000;
    804 
    805     /**
    806      * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device's
    807      * audio pipeline is low-latency, more suitable for audio applications sensitive to delays or
    808      * lag in sound input or output.
    809      */
    810     @SdkConstant(SdkConstantType.FEATURE)
    811     public static final String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
    812 
    813     /**
    814      * Feature for {@link #getSystemAvailableFeatures} and
    815      * {@link #hasSystemFeature}: The device is capable of communicating with
    816      * other devices via Bluetooth.
    817      */
    818     @SdkConstant(SdkConstantType.FEATURE)
    819     public static final String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
    820 
    821     /**
    822      * Feature for {@link #getSystemAvailableFeatures} and
    823      * {@link #hasSystemFeature}: The device has a camera facing away
    824      * from the screen.
    825      */
    826     @SdkConstant(SdkConstantType.FEATURE)
    827     public static final String FEATURE_CAMERA = "android.hardware.camera";
    828 
    829     /**
    830      * Feature for {@link #getSystemAvailableFeatures} and
    831      * {@link #hasSystemFeature}: The device's camera supports auto-focus.
    832      */
    833     @SdkConstant(SdkConstantType.FEATURE)
    834     public static final String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus";
    835 
    836     /**
    837      * Feature for {@link #getSystemAvailableFeatures} and
    838      * {@link #hasSystemFeature}: The device has at least one camera pointing in
    839      * some direction.
    840      */
    841     @SdkConstant(SdkConstantType.FEATURE)
    842     public static final String FEATURE_CAMERA_ANY = "android.hardware.camera.any";
    843 
    844     /**
    845      * Feature for {@link #getSystemAvailableFeatures} and
    846      * {@link #hasSystemFeature}: The device's camera supports flash.
    847      */
    848     @SdkConstant(SdkConstantType.FEATURE)
    849     public static final String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash";
    850 
    851     /**
    852      * Feature for {@link #getSystemAvailableFeatures} and
    853      * {@link #hasSystemFeature}: The device has a front facing camera.
    854      */
    855     @SdkConstant(SdkConstantType.FEATURE)
    856     public static final String FEATURE_CAMERA_FRONT = "android.hardware.camera.front";
    857 
    858     /**
    859      * Feature for {@link #getSystemAvailableFeatures} and
    860      * {@link #hasSystemFeature}: The device supports one or more methods of
    861      * reporting current location.
    862      */
    863     @SdkConstant(SdkConstantType.FEATURE)
    864     public static final String FEATURE_LOCATION = "android.hardware.location";
    865 
    866     /**
    867      * Feature for {@link #getSystemAvailableFeatures} and
    868      * {@link #hasSystemFeature}: The device has a Global Positioning System
    869      * receiver and can report precise location.
    870      */
    871     @SdkConstant(SdkConstantType.FEATURE)
    872     public static final String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
    873 
    874     /**
    875      * Feature for {@link #getSystemAvailableFeatures} and
    876      * {@link #hasSystemFeature}: The device can report location with coarse
    877      * accuracy using a network-based geolocation system.
    878      */
    879     @SdkConstant(SdkConstantType.FEATURE)
    880     public static final String FEATURE_LOCATION_NETWORK = "android.hardware.location.network";
    881 
    882     /**
    883      * Feature for {@link #getSystemAvailableFeatures} and
    884      * {@link #hasSystemFeature}: The device can record audio via a
    885      * microphone.
    886      */
    887     @SdkConstant(SdkConstantType.FEATURE)
    888     public static final String FEATURE_MICROPHONE = "android.hardware.microphone";
    889 
    890     /**
    891      * Feature for {@link #getSystemAvailableFeatures} and
    892      * {@link #hasSystemFeature}: The device can communicate using Near-Field
    893      * Communications (NFC).
    894      */
    895     @SdkConstant(SdkConstantType.FEATURE)
    896     public static final String FEATURE_NFC = "android.hardware.nfc";
    897 
    898     /**
    899      * Feature for {@link #getSystemAvailableFeatures} and
    900      * {@link #hasSystemFeature}: The device includes an accelerometer.
    901      */
    902     @SdkConstant(SdkConstantType.FEATURE)
    903     public static final String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer";
    904 
    905     /**
    906      * Feature for {@link #getSystemAvailableFeatures} and
    907      * {@link #hasSystemFeature}: The device includes a barometer (air
    908      * pressure sensor.)
    909      */
    910     @SdkConstant(SdkConstantType.FEATURE)
    911     public static final String FEATURE_SENSOR_BAROMETER = "android.hardware.sensor.barometer";
    912 
    913     /**
    914      * Feature for {@link #getSystemAvailableFeatures} and
    915      * {@link #hasSystemFeature}: The device includes a magnetometer (compass).
    916      */
    917     @SdkConstant(SdkConstantType.FEATURE)
    918     public static final String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass";
    919 
    920     /**
    921      * Feature for {@link #getSystemAvailableFeatures} and
    922      * {@link #hasSystemFeature}: The device includes a gyroscope.
    923      */
    924     @SdkConstant(SdkConstantType.FEATURE)
    925     public static final String FEATURE_SENSOR_GYROSCOPE = "android.hardware.sensor.gyroscope";
    926 
    927     /**
    928      * Feature for {@link #getSystemAvailableFeatures} and
    929      * {@link #hasSystemFeature}: The device includes a light sensor.
    930      */
    931     @SdkConstant(SdkConstantType.FEATURE)
    932     public static final String FEATURE_SENSOR_LIGHT = "android.hardware.sensor.light";
    933 
    934     /**
    935      * Feature for {@link #getSystemAvailableFeatures} and
    936      * {@link #hasSystemFeature}: The device includes a proximity sensor.
    937      */
    938     @SdkConstant(SdkConstantType.FEATURE)
    939     public static final String FEATURE_SENSOR_PROXIMITY = "android.hardware.sensor.proximity";
    940 
    941     /**
    942      * Feature for {@link #getSystemAvailableFeatures} and
    943      * {@link #hasSystemFeature}: The device has a telephony radio with data
    944      * communication support.
    945      */
    946     @SdkConstant(SdkConstantType.FEATURE)
    947     public static final String FEATURE_TELEPHONY = "android.hardware.telephony";
    948 
    949     /**
    950      * Feature for {@link #getSystemAvailableFeatures} and
    951      * {@link #hasSystemFeature}: The device has a CDMA telephony stack.
    952      */
    953     @SdkConstant(SdkConstantType.FEATURE)
    954     public static final String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma";
    955 
    956     /**
    957      * Feature for {@link #getSystemAvailableFeatures} and
    958      * {@link #hasSystemFeature}: The device has a GSM telephony stack.
    959      */
    960     @SdkConstant(SdkConstantType.FEATURE)
    961     public static final String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm";
    962 
    963     /**
    964      * Feature for {@link #getSystemAvailableFeatures} and
    965      * {@link #hasSystemFeature}: The device supports connecting to USB devices
    966      * as the USB host.
    967      */
    968     @SdkConstant(SdkConstantType.FEATURE)
    969     public static final String FEATURE_USB_HOST = "android.hardware.usb.host";
    970 
    971     /**
    972      * Feature for {@link #getSystemAvailableFeatures} and
    973      * {@link #hasSystemFeature}: The device supports connecting to USB accessories.
    974      */
    975     @SdkConstant(SdkConstantType.FEATURE)
    976     public static final String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory";
    977 
    978     /**
    979      * Feature for {@link #getSystemAvailableFeatures} and
    980      * {@link #hasSystemFeature}: The SIP API is enabled on the device.
    981      */
    982     @SdkConstant(SdkConstantType.FEATURE)
    983     public static final String FEATURE_SIP = "android.software.sip";
    984 
    985     /**
    986      * Feature for {@link #getSystemAvailableFeatures} and
    987      * {@link #hasSystemFeature}: The device supports SIP-based VOIP.
    988      */
    989     @SdkConstant(SdkConstantType.FEATURE)
    990     public static final String FEATURE_SIP_VOIP = "android.software.sip.voip";
    991 
    992     /**
    993      * Feature for {@link #getSystemAvailableFeatures} and
    994      * {@link #hasSystemFeature}: The device's display has a touch screen.
    995      */
    996     @SdkConstant(SdkConstantType.FEATURE)
    997     public static final String FEATURE_TOUCHSCREEN = "android.hardware.touchscreen";
    998 
    999 
   1000     /**
   1001      * Feature for {@link #getSystemAvailableFeatures} and
   1002      * {@link #hasSystemFeature}: The device's touch screen supports
   1003      * multitouch sufficient for basic two-finger gesture detection.
   1004      */
   1005     @SdkConstant(SdkConstantType.FEATURE)
   1006     public static final String FEATURE_TOUCHSCREEN_MULTITOUCH = "android.hardware.touchscreen.multitouch";
   1007 
   1008     /**
   1009      * Feature for {@link #getSystemAvailableFeatures} and
   1010      * {@link #hasSystemFeature}: The device's touch screen is capable of
   1011      * tracking two or more fingers fully independently.
   1012      */
   1013     @SdkConstant(SdkConstantType.FEATURE)
   1014     public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT = "android.hardware.touchscreen.multitouch.distinct";
   1015 
   1016     /**
   1017      * Feature for {@link #getSystemAvailableFeatures} and
   1018      * {@link #hasSystemFeature}: The device's touch screen is capable of
   1019      * tracking a full hand of fingers fully independently -- that is, 5 or
   1020      * more simultaneous independent pointers.
   1021      */
   1022     @SdkConstant(SdkConstantType.FEATURE)
   1023     public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND = "android.hardware.touchscreen.multitouch.jazzhand";
   1024 
   1025     /**
   1026      * Feature for {@link #getSystemAvailableFeatures} and
   1027      * {@link #hasSystemFeature}: The device does not have a touch screen, but
   1028      * does support touch emulation for basic events. For instance, the
   1029      * device might use a mouse or remote control to drive a cursor, and
   1030      * emulate basic touch pointer events like down, up, drag, etc. All
   1031      * devices that support android.hardware.touchscreen or a sub-feature are
   1032      * presumed to also support faketouch.
   1033      */
   1034     @SdkConstant(SdkConstantType.FEATURE)
   1035     public static final String FEATURE_FAKETOUCH = "android.hardware.faketouch";
   1036 
   1037     /**
   1038      * Feature for {@link #getSystemAvailableFeatures} and
   1039      * {@link #hasSystemFeature}: The device does not have a touch screen, but
   1040      * does support touch emulation for basic events that supports distinct
   1041      * tracking of two or more fingers.  This is an extension of
   1042      * {@link #FEATURE_FAKETOUCH} for input devices with this capability.  Note
   1043      * that unlike a distinct multitouch screen as defined by
   1044      * {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT}, these kinds of input
   1045      * devices will not actually provide full two-finger gestures since the
   1046      * input is being transformed to cursor movement on the screen.  That is,
   1047      * single finger gestures will move a cursor; two-finger swipes will
   1048      * result in single-finger touch events; other two-finger gestures will
   1049      * result in the corresponding two-finger touch event.
   1050      */
   1051     @SdkConstant(SdkConstantType.FEATURE)
   1052     public static final String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = "android.hardware.faketouch.multitouch.distinct";
   1053 
   1054     /**
   1055      * Feature for {@link #getSystemAvailableFeatures} and
   1056      * {@link #hasSystemFeature}: The device does not have a touch screen, but
   1057      * does support touch emulation for basic events that supports tracking
   1058      * a hand of fingers (5 or more fingers) fully independently.
   1059      * This is an extension of
   1060      * {@link #FEATURE_FAKETOUCH} for input devices with this capability.  Note
   1061      * that unlike a multitouch screen as defined by
   1062      * {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND}, not all two finger
   1063      * gestures can be detected due to the limitations described for
   1064      * {@link #FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT}.
   1065      */
   1066     @SdkConstant(SdkConstantType.FEATURE)
   1067     public static final String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = "android.hardware.faketouch.multitouch.jazzhand";
   1068 
   1069     /**
   1070      * Feature for {@link #getSystemAvailableFeatures} and
   1071      * {@link #hasSystemFeature}: The device supports portrait orientation
   1072      * screens.  For backwards compatibility, you can assume that if neither
   1073      * this nor {@link #FEATURE_SCREEN_LANDSCAPE} is set then the device supports
   1074      * both portrait and landscape.
   1075      */
   1076     @SdkConstant(SdkConstantType.FEATURE)
   1077     public static final String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait";
   1078 
   1079     /**
   1080      * Feature for {@link #getSystemAvailableFeatures} and
   1081      * {@link #hasSystemFeature}: The device supports landscape orientation
   1082      * screens.  For backwards compatibility, you can assume that if neither
   1083      * this nor {@link #FEATURE_SCREEN_PORTRAIT} is set then the device supports
   1084      * both portrait and landscape.
   1085      */
   1086     @SdkConstant(SdkConstantType.FEATURE)
   1087     public static final String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape";
   1088 
   1089     /**
   1090      * Feature for {@link #getSystemAvailableFeatures} and
   1091      * {@link #hasSystemFeature}: The device supports live wallpapers.
   1092      */
   1093     @SdkConstant(SdkConstantType.FEATURE)
   1094     public static final String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper";
   1095 
   1096     /**
   1097      * Feature for {@link #getSystemAvailableFeatures} and
   1098      * {@link #hasSystemFeature}: The device supports WiFi (802.11) networking.
   1099      */
   1100     @SdkConstant(SdkConstantType.FEATURE)
   1101     public static final String FEATURE_WIFI = "android.hardware.wifi";
   1102 
   1103     /**
   1104      * Feature for {@link #getSystemAvailableFeatures} and
   1105      * {@link #hasSystemFeature}: The device supports Wi-Fi Direct networking.
   1106      */
   1107     @SdkConstant(SdkConstantType.FEATURE)
   1108     public static final String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
   1109 
   1110     /**
   1111      * Feature for {@link #getSystemAvailableFeatures} and
   1112      * {@link #hasSystemFeature}: This is a device dedicated to showing UI
   1113      * on a television.  Television here is defined to be a typical living
   1114      * room television experience: displayed on a big screen, where the user
   1115      * is sitting far away from it, and the dominant form of input will be
   1116      * something like a DPAD, not through touch or mouse.
   1117      */
   1118     @SdkConstant(SdkConstantType.FEATURE)
   1119     public static final String FEATURE_TELEVISION = "android.hardware.type.television";
   1120 
   1121     /**
   1122      * Action to external storage service to clean out removed apps.
   1123      * @hide
   1124      */
   1125     public static final String ACTION_CLEAN_EXTERNAL_STORAGE
   1126             = "android.content.pm.CLEAN_EXTERNAL_STORAGE";
   1127 
   1128     /**
   1129      * Extra field name for the URI to a verification file. Passed to a package
   1130      * verifier.
   1131      *
   1132      * @hide
   1133      */
   1134     public static final String EXTRA_VERIFICATION_URI = "android.content.pm.extra.VERIFICATION_URI";
   1135 
   1136     /**
   1137      * Extra field name for the ID of a package pending verification. Passed to
   1138      * a package verifier and is used to call back to
   1139      * {@link PackageManager#verifyPendingInstall(int, int)}
   1140      */
   1141     public static final String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
   1142 
   1143     /**
   1144      * Extra field name for the package identifier which is trying to install
   1145      * the package.
   1146      *
   1147      * @hide
   1148      */
   1149     public static final String EXTRA_VERIFICATION_INSTALLER_PACKAGE
   1150             = "android.content.pm.extra.VERIFICATION_INSTALLER_PACKAGE";
   1151 
   1152     /**
   1153      * Extra field name for the requested install flags for a package pending
   1154      * verification. Passed to a package verifier.
   1155      *
   1156      * @hide
   1157      */
   1158     public static final String EXTRA_VERIFICATION_INSTALL_FLAGS
   1159             = "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS";
   1160 
   1161     /**
   1162      * Extra field name for the uid of who is requesting to install
   1163      * the package.
   1164      *
   1165      * @hide
   1166      */
   1167     public static final String EXTRA_VERIFICATION_INSTALLER_UID
   1168             = "android.content.pm.extra.VERIFICATION_INSTALLER_UID";
   1169 
   1170     /**
   1171      * Extra field name for the package name of a package pending verification.
   1172      *
   1173      * @hide
   1174      */
   1175     public static final String EXTRA_VERIFICATION_PACKAGE_NAME
   1176             = "android.content.pm.extra.VERIFICATION_PACKAGE_NAME";
   1177     /**
   1178      * Extra field name for the result of a verification, either
   1179      * {@link #VERIFICATION_ALLOW}, or {@link #VERIFICATION_REJECT}.
   1180      * Passed to package verifiers after a package is verified.
   1181      */
   1182     public static final String EXTRA_VERIFICATION_RESULT
   1183             = "android.content.pm.extra.VERIFICATION_RESULT";
   1184 
   1185     /**
   1186      * Extra field name for the version code of a package pending verification.
   1187      *
   1188      * @hide
   1189      */
   1190     public static final String EXTRA_VERIFICATION_VERSION_CODE
   1191             = "android.content.pm.extra.VERIFICATION_VERSION_CODE";
   1192 
   1193     /**
   1194      * Retrieve overall information about an application package that is
   1195      * installed on the system.
   1196      * <p>
   1197      * Throws {@link NameNotFoundException} if a package with the given name can
   1198      * not be found on the system.
   1199      *
   1200      * @param packageName The full name (i.e. com.google.apps.contacts) of the
   1201      *            desired package.
   1202      * @param flags Additional option flags. Use any combination of
   1203      *            {@link #GET_ACTIVITIES}, {@link #GET_GIDS},
   1204      *            {@link #GET_CONFIGURATIONS}, {@link #GET_INSTRUMENTATION},
   1205      *            {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
   1206      *            {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
   1207      *            {@link #GET_SIGNATURES}, {@link #GET_UNINSTALLED_PACKAGES} to
   1208      *            modify the data returned.
   1209      * @return Returns a PackageInfo object containing information about the
   1210      *         package. If flag GET_UNINSTALLED_PACKAGES is set and if the
   1211      *         package is not found in the list of installed applications, the
   1212      *         package information is retrieved from the list of uninstalled
   1213      *         applications(which includes installed applications as well as
   1214      *         applications with data directory ie applications which had been
   1215      *         deleted with DONT_DELTE_DATA flag set).
   1216      * @see #GET_ACTIVITIES
   1217      * @see #GET_GIDS
   1218      * @see #GET_CONFIGURATIONS
   1219      * @see #GET_INSTRUMENTATION
   1220      * @see #GET_PERMISSIONS
   1221      * @see #GET_PROVIDERS
   1222      * @see #GET_RECEIVERS
   1223      * @see #GET_SERVICES
   1224      * @see #GET_SIGNATURES
   1225      * @see #GET_UNINSTALLED_PACKAGES
   1226      */
   1227     public abstract PackageInfo getPackageInfo(String packageName, int flags)
   1228             throws NameNotFoundException;
   1229 
   1230     /**
   1231      * Map from the current package names in use on the device to whatever
   1232      * the current canonical name of that package is.
   1233      * @param names Array of current names to be mapped.
   1234      * @return Returns an array of the same size as the original, containing
   1235      * the canonical name for each package.
   1236      */
   1237     public abstract String[] currentToCanonicalPackageNames(String[] names);
   1238 
   1239     /**
   1240      * Map from a packages canonical name to the current name in use on the device.
   1241      * @param names Array of new names to be mapped.
   1242      * @return Returns an array of the same size as the original, containing
   1243      * the current name for each package.
   1244      */
   1245     public abstract String[] canonicalToCurrentPackageNames(String[] names);
   1246 
   1247     /**
   1248      * Return a "good" intent to launch a front-door activity in a package,
   1249      * for use for example to implement an "open" button when browsing through
   1250      * packages.  The current implementation will look first for a main
   1251      * activity in the category {@link Intent#CATEGORY_INFO}, next for a
   1252      * main activity in the category {@link Intent#CATEGORY_LAUNCHER}, or return
   1253      * null if neither are found.
   1254      *
   1255      * <p>Throws {@link NameNotFoundException} if a package with the given
   1256      * name can not be found on the system.
   1257      *
   1258      * @param packageName The name of the package to inspect.
   1259      *
   1260      * @return Returns either a fully-qualified Intent that can be used to
   1261      * launch the main activity in the package, or null if the package does
   1262      * not contain such an activity.
   1263      */
   1264     public abstract Intent getLaunchIntentForPackage(String packageName);
   1265 
   1266     /**
   1267      * Return an array of all of the secondary group-ids that have been
   1268      * assigned to a package.
   1269      *
   1270      * <p>Throws {@link NameNotFoundException} if a package with the given
   1271      * name can not be found on the system.
   1272      *
   1273      * @param packageName The full name (i.e. com.google.apps.contacts) of the
   1274      *                    desired package.
   1275      *
   1276      * @return Returns an int array of the assigned gids, or null if there
   1277      * are none.
   1278      */
   1279     public abstract int[] getPackageGids(String packageName)
   1280             throws NameNotFoundException;
   1281 
   1282     /**
   1283      * Retrieve all of the information we know about a particular permission.
   1284      *
   1285      * <p>Throws {@link NameNotFoundException} if a permission with the given
   1286      * name can not be found on the system.
   1287      *
   1288      * @param name The fully qualified name (i.e. com.google.permission.LOGIN)
   1289      *             of the permission you are interested in.
   1290      * @param flags Additional option flags.  Use {@link #GET_META_DATA} to
   1291      * retrieve any meta-data associated with the permission.
   1292      *
   1293      * @return Returns a {@link PermissionInfo} containing information about the
   1294      *         permission.
   1295      */
   1296     public abstract PermissionInfo getPermissionInfo(String name, int flags)
   1297             throws NameNotFoundException;
   1298 
   1299     /**
   1300      * Query for all of the permissions associated with a particular group.
   1301      *
   1302      * <p>Throws {@link NameNotFoundException} if the given group does not
   1303      * exist.
   1304      *
   1305      * @param group The fully qualified name (i.e. com.google.permission.LOGIN)
   1306      *             of the permission group you are interested in.  Use null to
   1307      *             find all of the permissions not associated with a group.
   1308      * @param flags Additional option flags.  Use {@link #GET_META_DATA} to
   1309      * retrieve any meta-data associated with the permissions.
   1310      *
   1311      * @return Returns a list of {@link PermissionInfo} containing information
   1312      * about all of the permissions in the given group.
   1313      */
   1314     public abstract List<PermissionInfo> queryPermissionsByGroup(String group,
   1315             int flags) throws NameNotFoundException;
   1316 
   1317     /**
   1318      * Retrieve all of the information we know about a particular group of
   1319      * permissions.
   1320      *
   1321      * <p>Throws {@link NameNotFoundException} if a permission group with the given
   1322      * name can not be found on the system.
   1323      *
   1324      * @param name The fully qualified name (i.e. com.google.permission_group.APPS)
   1325      *             of the permission you are interested in.
   1326      * @param flags Additional option flags.  Use {@link #GET_META_DATA} to
   1327      * retrieve any meta-data associated with the permission group.
   1328      *
   1329      * @return Returns a {@link PermissionGroupInfo} containing information
   1330      * about the permission.
   1331      */
   1332     public abstract PermissionGroupInfo getPermissionGroupInfo(String name,
   1333             int flags) throws NameNotFoundException;
   1334 
   1335     /**
   1336      * Retrieve all of the known permission groups in the system.
   1337      *
   1338      * @param flags Additional option flags.  Use {@link #GET_META_DATA} to
   1339      * retrieve any meta-data associated with the permission group.
   1340      *
   1341      * @return Returns a list of {@link PermissionGroupInfo} containing
   1342      * information about all of the known permission groups.
   1343      */
   1344     public abstract List<PermissionGroupInfo> getAllPermissionGroups(int flags);
   1345 
   1346     /**
   1347      * Retrieve all of the information we know about a particular
   1348      * package/application.
   1349      *
   1350      * <p>Throws {@link NameNotFoundException} if an application with the given
   1351      * package name can not be found on the system.
   1352      *
   1353      * @param packageName The full name (i.e. com.google.apps.contacts) of an
   1354      *                    application.
   1355      * @param flags Additional option flags. Use any combination of
   1356      * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
   1357      * {@link #GET_UNINSTALLED_PACKAGES} to modify the data returned.
   1358      *
   1359      * @return  {@link ApplicationInfo} Returns ApplicationInfo object containing
   1360      *         information about the package.
   1361      *         If flag GET_UNINSTALLED_PACKAGES is set and  if the package is not
   1362      *         found in the list of installed applications,
   1363      *         the application information is retrieved from the
   1364      *         list of uninstalled applications(which includes
   1365      *         installed applications as well as applications
   1366      *         with data directory ie applications which had been
   1367      *         deleted with DONT_DELTE_DATA flag set).
   1368      *
   1369      * @see #GET_META_DATA
   1370      * @see #GET_SHARED_LIBRARY_FILES
   1371      * @see #GET_UNINSTALLED_PACKAGES
   1372      */
   1373     public abstract ApplicationInfo getApplicationInfo(String packageName,
   1374             int flags) throws NameNotFoundException;
   1375 
   1376     /**
   1377      * Retrieve all of the information we know about a particular activity
   1378      * class.
   1379      *
   1380      * <p>Throws {@link NameNotFoundException} if an activity with the given
   1381      * class name can not be found on the system.
   1382      *
   1383      * @param component The full component name (i.e.
   1384      * com.google.apps.contacts/com.google.apps.contacts.ContactsList) of an Activity
   1385      * class.
   1386      * @param flags Additional option flags. Use any combination of
   1387      * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
   1388      * to modify the data (in ApplicationInfo) returned.
   1389      *
   1390      * @return {@link ActivityInfo} containing information about the activity.
   1391      *
   1392      * @see #GET_INTENT_FILTERS
   1393      * @see #GET_META_DATA
   1394      * @see #GET_SHARED_LIBRARY_FILES
   1395      */
   1396     public abstract ActivityInfo getActivityInfo(ComponentName component,
   1397             int flags) throws NameNotFoundException;
   1398 
   1399     /**
   1400      * Retrieve all of the information we know about a particular receiver
   1401      * class.
   1402      *
   1403      * <p>Throws {@link NameNotFoundException} if a receiver with the given
   1404      * class name can not be found on the system.
   1405      *
   1406      * @param component The full component name (i.e.
   1407      * com.google.apps.calendar/com.google.apps.calendar.CalendarAlarm) of a Receiver
   1408      * class.
   1409      * @param flags Additional option flags.  Use any combination of
   1410      * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
   1411      * to modify the data returned.
   1412      *
   1413      * @return {@link ActivityInfo} containing information about the receiver.
   1414      *
   1415      * @see #GET_INTENT_FILTERS
   1416      * @see #GET_META_DATA
   1417      * @see #GET_SHARED_LIBRARY_FILES
   1418      */
   1419     public abstract ActivityInfo getReceiverInfo(ComponentName component,
   1420             int flags) throws NameNotFoundException;
   1421 
   1422     /**
   1423      * Retrieve all of the information we know about a particular service
   1424      * class.
   1425      *
   1426      * <p>Throws {@link NameNotFoundException} if a service with the given
   1427      * class name can not be found on the system.
   1428      *
   1429      * @param component The full component name (i.e.
   1430      * com.google.apps.media/com.google.apps.media.BackgroundPlayback) of a Service
   1431      * class.
   1432      * @param flags Additional option flags.  Use any combination of
   1433      * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
   1434      * to modify the data returned.
   1435      *
   1436      * @return ServiceInfo containing information about the service.
   1437      *
   1438      * @see #GET_META_DATA
   1439      * @see #GET_SHARED_LIBRARY_FILES
   1440      */
   1441     public abstract ServiceInfo getServiceInfo(ComponentName component,
   1442             int flags) throws NameNotFoundException;
   1443 
   1444     /**
   1445      * Retrieve all of the information we know about a particular content
   1446      * provider class.
   1447      *
   1448      * <p>Throws {@link NameNotFoundException} if a provider with the given
   1449      * class name can not be found on the system.
   1450      *
   1451      * @param component The full component name (i.e.
   1452      * com.google.providers.media/com.google.providers.media.MediaProvider) of a
   1453      * ContentProvider class.
   1454      * @param flags Additional option flags.  Use any combination of
   1455      * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
   1456      * to modify the data returned.
   1457      *
   1458      * @return ProviderInfo containing information about the service.
   1459      *
   1460      * @see #GET_META_DATA
   1461      * @see #GET_SHARED_LIBRARY_FILES
   1462      */
   1463     public abstract ProviderInfo getProviderInfo(ComponentName component,
   1464             int flags) throws NameNotFoundException;
   1465 
   1466     /**
   1467      * Return a List of all packages that are installed
   1468      * on the device.
   1469      *
   1470      * @param flags Additional option flags. Use any combination of
   1471      * {@link #GET_ACTIVITIES},
   1472      * {@link #GET_GIDS},
   1473      * {@link #GET_CONFIGURATIONS},
   1474      * {@link #GET_INSTRUMENTATION},
   1475      * {@link #GET_PERMISSIONS},
   1476      * {@link #GET_PROVIDERS},
   1477      * {@link #GET_RECEIVERS},
   1478      * {@link #GET_SERVICES},
   1479      * {@link #GET_SIGNATURES},
   1480      * {@link #GET_UNINSTALLED_PACKAGES} to modify the data returned.
   1481      *
   1482      * @return A List of PackageInfo objects, one for each package that is
   1483      *         installed on the device.  In the unlikely case of there being no
   1484      *         installed packages, an empty list is returned.
   1485      *         If flag GET_UNINSTALLED_PACKAGES is set, a list of all
   1486      *         applications including those deleted with DONT_DELETE_DATA
   1487      *         (partially installed apps with data directory) will be returned.
   1488      *
   1489      * @see #GET_ACTIVITIES
   1490      * @see #GET_GIDS
   1491      * @see #GET_CONFIGURATIONS
   1492      * @see #GET_INSTRUMENTATION
   1493      * @see #GET_PERMISSIONS
   1494      * @see #GET_PROVIDERS
   1495      * @see #GET_RECEIVERS
   1496      * @see #GET_SERVICES
   1497      * @see #GET_SIGNATURES
   1498      * @see #GET_UNINSTALLED_PACKAGES
   1499      *
   1500      */
   1501     public abstract List<PackageInfo> getInstalledPackages(int flags);
   1502 
   1503     /**
   1504      * Return a List of all packages that are installed on the device, for a specific user.
   1505      * Requesting a list of installed packages for another user
   1506      * will require the permission INTERACT_ACROSS_USERS_FULL.
   1507      * @param flags Additional option flags. Use any combination of
   1508      * {@link #GET_ACTIVITIES},
   1509      * {@link #GET_GIDS},
   1510      * {@link #GET_CONFIGURATIONS},
   1511      * {@link #GET_INSTRUMENTATION},
   1512      * {@link #GET_PERMISSIONS},
   1513      * {@link #GET_PROVIDERS},
   1514      * {@link #GET_RECEIVERS},
   1515      * {@link #GET_SERVICES},
   1516      * {@link #GET_SIGNATURES},
   1517      * {@link #GET_UNINSTALLED_PACKAGES} to modify the data returned.
   1518      * @param userId The user for whom the installed packages are to be listed
   1519      *
   1520      * @return A List of PackageInfo objects, one for each package that is
   1521      *         installed on the device.  In the unlikely case of there being no
   1522      *         installed packages, an empty list is returned.
   1523      *         If flag GET_UNINSTALLED_PACKAGES is set, a list of all
   1524      *         applications including those deleted with DONT_DELETE_DATA
   1525      *         (partially installed apps with data directory) will be returned.
   1526      *
   1527      * @see #GET_ACTIVITIES
   1528      * @see #GET_GIDS
   1529      * @see #GET_CONFIGURATIONS
   1530      * @see #GET_INSTRUMENTATION
   1531      * @see #GET_PERMISSIONS
   1532      * @see #GET_PROVIDERS
   1533      * @see #GET_RECEIVERS
   1534      * @see #GET_SERVICES
   1535      * @see #GET_SIGNATURES
   1536      * @see #GET_UNINSTALLED_PACKAGES
   1537      *
   1538      * @hide
   1539      */
   1540     public abstract List<PackageInfo> getInstalledPackages(int flags, int userId);
   1541 
   1542     /**
   1543      * Check whether a particular package has been granted a particular
   1544      * permission.
   1545      *
   1546      * @param permName The name of the permission you are checking for,
   1547      * @param pkgName The name of the package you are checking against.
   1548      *
   1549      * @return If the package has the permission, PERMISSION_GRANTED is
   1550      * returned.  If it does not have the permission, PERMISSION_DENIED
   1551      * is returned.
   1552      *
   1553      * @see #PERMISSION_GRANTED
   1554      * @see #PERMISSION_DENIED
   1555      */
   1556     public abstract int checkPermission(String permName, String pkgName);
   1557 
   1558     /**
   1559      * Add a new dynamic permission to the system.  For this to work, your
   1560      * package must have defined a permission tree through the
   1561      * {@link android.R.styleable#AndroidManifestPermissionTree
   1562      * &lt;permission-tree&gt;} tag in its manifest.  A package can only add
   1563      * permissions to trees that were defined by either its own package or
   1564      * another with the same user id; a permission is in a tree if it
   1565      * matches the name of the permission tree + ".": for example,
   1566      * "com.foo.bar" is a member of the permission tree "com.foo".
   1567      *
   1568      * <p>It is good to make your permission tree name descriptive, because you
   1569      * are taking possession of that entire set of permission names.  Thus, it
   1570      * must be under a domain you control, with a suffix that will not match
   1571      * any normal permissions that may be declared in any applications that
   1572      * are part of that domain.
   1573      *
   1574      * <p>New permissions must be added before
   1575      * any .apks are installed that use those permissions.  Permissions you
   1576      * add through this method are remembered across reboots of the device.
   1577      * If the given permission already exists, the info you supply here
   1578      * will be used to update it.
   1579      *
   1580      * @param info Description of the permission to be added.
   1581      *
   1582      * @return Returns true if a new permission was created, false if an
   1583      * existing one was updated.
   1584      *
   1585      * @throws SecurityException if you are not allowed to add the
   1586      * given permission name.
   1587      *
   1588      * @see #removePermission(String)
   1589      */
   1590     public abstract boolean addPermission(PermissionInfo info);
   1591 
   1592     /**
   1593      * Like {@link #addPermission(PermissionInfo)} but asynchronously
   1594      * persists the package manager state after returning from the call,
   1595      * allowing it to return quicker and batch a series of adds at the
   1596      * expense of no guarantee the added permission will be retained if
   1597      * the device is rebooted before it is written.
   1598      */
   1599     public abstract boolean addPermissionAsync(PermissionInfo info);
   1600 
   1601     /**
   1602      * Removes a permission that was previously added with
   1603      * {@link #addPermission(PermissionInfo)}.  The same ownership rules apply
   1604      * -- you are only allowed to remove permissions that you are allowed
   1605      * to add.
   1606      *
   1607      * @param name The name of the permission to remove.
   1608      *
   1609      * @throws SecurityException if you are not allowed to remove the
   1610      * given permission name.
   1611      *
   1612      * @see #addPermission(PermissionInfo)
   1613      */
   1614     public abstract void removePermission(String name);
   1615 
   1616     /**
   1617      * Grant a permission to an application which the application does not
   1618      * already have.  The permission must have been requested by the application,
   1619      * but as an optional permission.  If the application is not allowed to
   1620      * hold the permission, a SecurityException is thrown.
   1621      * @hide
   1622      *
   1623      * @param packageName The name of the package that the permission will be
   1624      * granted to.
   1625      * @param permissionName The name of the permission.
   1626      */
   1627     public abstract void grantPermission(String packageName, String permissionName);
   1628 
   1629     /**
   1630      * Revoke a permission that was previously granted by {@link #grantPermission}.
   1631      * @hide
   1632      *
   1633      * @param packageName The name of the package that the permission will be
   1634      * granted to.
   1635      * @param permissionName The name of the permission.
   1636      */
   1637     public abstract void revokePermission(String packageName, String permissionName);
   1638 
   1639     /**
   1640      * Compare the signatures of two packages to determine if the same
   1641      * signature appears in both of them.  If they do contain the same
   1642      * signature, then they are allowed special privileges when working
   1643      * with each other: they can share the same user-id, run instrumentation
   1644      * against each other, etc.
   1645      *
   1646      * @param pkg1 First package name whose signature will be compared.
   1647      * @param pkg2 Second package name whose signature will be compared.
   1648      *
   1649      * @return Returns an integer indicating whether all signatures on the
   1650      * two packages match. The value is >= 0 ({@link #SIGNATURE_MATCH}) if
   1651      * all signatures match or < 0 if there is not a match ({@link
   1652      * #SIGNATURE_NO_MATCH} or {@link #SIGNATURE_UNKNOWN_PACKAGE}).
   1653      *
   1654      * @see #checkSignatures(int, int)
   1655      * @see #SIGNATURE_MATCH
   1656      * @see #SIGNATURE_NO_MATCH
   1657      * @see #SIGNATURE_UNKNOWN_PACKAGE
   1658      */
   1659     public abstract int checkSignatures(String pkg1, String pkg2);
   1660 
   1661     /**
   1662      * Like {@link #checkSignatures(String, String)}, but takes UIDs of
   1663      * the two packages to be checked.  This can be useful, for example,
   1664      * when doing the check in an IPC, where the UID is the only identity
   1665      * available.  It is functionally identical to determining the package
   1666      * associated with the UIDs and checking their signatures.
   1667      *
   1668      * @param uid1 First UID whose signature will be compared.
   1669      * @param uid2 Second UID whose signature will be compared.
   1670      *
   1671      * @return Returns an integer indicating whether all signatures on the
   1672      * two packages match. The value is >= 0 ({@link #SIGNATURE_MATCH}) if
   1673      * all signatures match or < 0 if there is not a match ({@link
   1674      * #SIGNATURE_NO_MATCH} or {@link #SIGNATURE_UNKNOWN_PACKAGE}).
   1675      *
   1676      * @see #checkSignatures(String, String)
   1677      * @see #SIGNATURE_MATCH
   1678      * @see #SIGNATURE_NO_MATCH
   1679      * @see #SIGNATURE_UNKNOWN_PACKAGE
   1680      */
   1681     public abstract int checkSignatures(int uid1, int uid2);
   1682 
   1683     /**
   1684      * Retrieve the names of all packages that are associated with a particular
   1685      * user id.  In most cases, this will be a single package name, the package
   1686      * that has been assigned that user id.  Where there are multiple packages
   1687      * sharing the same user id through the "sharedUserId" mechanism, all
   1688      * packages with that id will be returned.
   1689      *
   1690      * @param uid The user id for which you would like to retrieve the
   1691      * associated packages.
   1692      *
   1693      * @return Returns an array of one or more packages assigned to the user
   1694      * id, or null if there are no known packages with the given id.
   1695      */
   1696     public abstract String[] getPackagesForUid(int uid);
   1697 
   1698     /**
   1699      * Retrieve the official name associated with a user id.  This name is
   1700      * guaranteed to never change, though it is possibly for the underlying
   1701      * user id to be changed.  That is, if you are storing information about
   1702      * user ids in persistent storage, you should use the string returned
   1703      * by this function instead of the raw user-id.
   1704      *
   1705      * @param uid The user id for which you would like to retrieve a name.
   1706      * @return Returns a unique name for the given user id, or null if the
   1707      * user id is not currently assigned.
   1708      */
   1709     public abstract String getNameForUid(int uid);
   1710 
   1711     /**
   1712      * Return the user id associated with a shared user name. Multiple
   1713      * applications can specify a shared user name in their manifest and thus
   1714      * end up using a common uid. This might be used for new applications
   1715      * that use an existing shared user name and need to know the uid of the
   1716      * shared user.
   1717      *
   1718      * @param sharedUserName The shared user name whose uid is to be retrieved.
   1719      * @return Returns the uid associated with the shared user, or  NameNotFoundException
   1720      * if the shared user name is not being used by any installed packages
   1721      * @hide
   1722      */
   1723     public abstract int getUidForSharedUser(String sharedUserName)
   1724             throws NameNotFoundException;
   1725 
   1726     /**
   1727      * Return a List of all application packages that are installed on the
   1728      * device. If flag GET_UNINSTALLED_PACKAGES has been set, a list of all
   1729      * applications including those deleted with DONT_DELETE_DATA(partially
   1730      * installed apps with data directory) will be returned.
   1731      *
   1732      * @param flags Additional option flags. Use any combination of
   1733      * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES},
   1734      * {@link #GET_UNINSTALLED_PACKAGES} to modify the data returned.
   1735      *
   1736      * @return A List of ApplicationInfo objects, one for each application that
   1737      *         is installed on the device.  In the unlikely case of there being
   1738      *         no installed applications, an empty list is returned.
   1739      *         If flag GET_UNINSTALLED_PACKAGES is set, a list of all
   1740      *         applications including those deleted with DONT_DELETE_DATA
   1741      *         (partially installed apps with data directory) will be returned.
   1742      *
   1743      * @see #GET_META_DATA
   1744      * @see #GET_SHARED_LIBRARY_FILES
   1745      * @see #GET_UNINSTALLED_PACKAGES
   1746      */
   1747     public abstract List<ApplicationInfo> getInstalledApplications(int flags);
   1748 
   1749     /**
   1750      * Get a list of shared libraries that are available on the
   1751      * system.
   1752      *
   1753      * @return An array of shared library names that are
   1754      * available on the system, or null if none are installed.
   1755      *
   1756      */
   1757     public abstract String[] getSystemSharedLibraryNames();
   1758 
   1759     /**
   1760      * Get a list of features that are available on the
   1761      * system.
   1762      *
   1763      * @return An array of FeatureInfo classes describing the features
   1764      * that are available on the system, or null if there are none(!!).
   1765      */
   1766     public abstract FeatureInfo[] getSystemAvailableFeatures();
   1767 
   1768     /**
   1769      * Check whether the given feature name is one of the available
   1770      * features as returned by {@link #getSystemAvailableFeatures()}.
   1771      *
   1772      * @return Returns true if the devices supports the feature, else
   1773      * false.
   1774      */
   1775     public abstract boolean hasSystemFeature(String name);
   1776 
   1777     /**
   1778      * Determine the best action to perform for a given Intent.  This is how
   1779      * {@link Intent#resolveActivity} finds an activity if a class has not
   1780      * been explicitly specified.
   1781      *
   1782      * <p><em>Note:</em> if using an implicit Intent (without an explicit ComponentName
   1783      * specified), be sure to consider whether to set the {@link #MATCH_DEFAULT_ONLY}
   1784      * only flag.  You need to do so to resolve the activity in the same way
   1785      * that {@link android.content.Context#startActivity(Intent)} and
   1786      * {@link android.content.Intent#resolveActivity(PackageManager)
   1787      * Intent.resolveActivity(PackageManager)} do.</p>
   1788      *
   1789      * @param intent An intent containing all of the desired specification
   1790      *               (action, data, type, category, and/or component).
   1791      * @param flags Additional option flags.  The most important is
   1792      * {@link #MATCH_DEFAULT_ONLY}, to limit the resolution to only
   1793      * those activities that support the {@link android.content.Intent#CATEGORY_DEFAULT}.
   1794      *
   1795      * @return Returns a ResolveInfo containing the final activity intent that
   1796      *         was determined to be the best action.  Returns null if no
   1797      *         matching activity was found. If multiple matching activities are
   1798      *         found and there is no default set, returns a ResolveInfo
   1799      *         containing something else, such as the activity resolver.
   1800      *
   1801      * @see #MATCH_DEFAULT_ONLY
   1802      * @see #GET_INTENT_FILTERS
   1803      * @see #GET_RESOLVED_FILTER
   1804      */
   1805     public abstract ResolveInfo resolveActivity(Intent intent, int flags);
   1806 
   1807     /**
   1808      * Determine the best action to perform for a given Intent for a given user. This
   1809      * is how {@link Intent#resolveActivity} finds an activity if a class has not
   1810      * been explicitly specified.
   1811      *
   1812      * <p><em>Note:</em> if using an implicit Intent (without an explicit ComponentName
   1813      * specified), be sure to consider whether to set the {@link #MATCH_DEFAULT_ONLY}
   1814      * only flag.  You need to do so to resolve the activity in the same way
   1815      * that {@link android.content.Context#startActivity(Intent)} and
   1816      * {@link android.content.Intent#resolveActivity(PackageManager)
   1817      * Intent.resolveActivity(PackageManager)} do.</p>
   1818      *
   1819      * @param intent An intent containing all of the desired specification
   1820      *               (action, data, type, category, and/or component).
   1821      * @param flags Additional option flags.  The most important is
   1822      * {@link #MATCH_DEFAULT_ONLY}, to limit the resolution to only
   1823      * those activities that support the {@link android.content.Intent#CATEGORY_DEFAULT}.
   1824      * @param userId The user id.
   1825      *
   1826      * @return Returns a ResolveInfo containing the final activity intent that
   1827      *         was determined to be the best action.  Returns null if no
   1828      *         matching activity was found. If multiple matching activities are
   1829      *         found and there is no default set, returns a ResolveInfo
   1830      *         containing something else, such as the activity resolver.
   1831      *
   1832      * @see #MATCH_DEFAULT_ONLY
   1833      * @see #GET_INTENT_FILTERS
   1834      * @see #GET_RESOLVED_FILTER
   1835      *
   1836      * @hide
   1837      */
   1838     public abstract ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId);
   1839 
   1840     /**
   1841      * Retrieve all activities that can be performed for the given intent.
   1842      *
   1843      * @param intent The desired intent as per resolveActivity().
   1844      * @param flags Additional option flags.  The most important is
   1845      * {@link #MATCH_DEFAULT_ONLY}, to limit the resolution to only
   1846      * those activities that support the {@link android.content.Intent#CATEGORY_DEFAULT}.
   1847      *
   1848      * @return A List&lt;ResolveInfo&gt; containing one entry for each matching
   1849      *         Activity. These are ordered from best to worst match -- that
   1850      *         is, the first item in the list is what is returned by
   1851      *         {@link #resolveActivity}.  If there are no matching activities, an empty
   1852      *         list is returned.
   1853      *
   1854      * @see #MATCH_DEFAULT_ONLY
   1855      * @see #GET_INTENT_FILTERS
   1856      * @see #GET_RESOLVED_FILTER
   1857      */
   1858     public abstract List<ResolveInfo> queryIntentActivities(Intent intent,
   1859             int flags);
   1860 
   1861     /**
   1862      * Retrieve all activities that can be performed for the given intent, for a specific user.
   1863      *
   1864      * @param intent The desired intent as per resolveActivity().
   1865      * @param flags Additional option flags.  The most important is
   1866      * {@link #MATCH_DEFAULT_ONLY}, to limit the resolution to only
   1867      * those activities that support the {@link android.content.Intent#CATEGORY_DEFAULT}.
   1868      *
   1869      * @return A List&lt;ResolveInfo&gt; containing one entry for each matching
   1870      *         Activity. These are ordered from best to worst match -- that
   1871      *         is, the first item in the list is what is returned by
   1872      *         {@link #resolveActivity}.  If there are no matching activities, an empty
   1873      *         list is returned.
   1874      *
   1875      * @see #MATCH_DEFAULT_ONLY
   1876      * @see #GET_INTENT_FILTERS
   1877      * @see #GET_RESOLVED_FILTER
   1878      * @hide
   1879      */
   1880     public abstract List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent,
   1881             int flags, int userId);
   1882 
   1883 
   1884     /**
   1885      * Retrieve a set of activities that should be presented to the user as
   1886      * similar options.  This is like {@link #queryIntentActivities}, except it
   1887      * also allows you to supply a list of more explicit Intents that you would
   1888      * like to resolve to particular options, and takes care of returning the
   1889      * final ResolveInfo list in a reasonable order, with no duplicates, based
   1890      * on those inputs.
   1891      *
   1892      * @param caller The class name of the activity that is making the
   1893      *               request.  This activity will never appear in the output
   1894      *               list.  Can be null.
   1895      * @param specifics An array of Intents that should be resolved to the
   1896      *                  first specific results.  Can be null.
   1897      * @param intent The desired intent as per resolveActivity().
   1898      * @param flags Additional option flags.  The most important is
   1899      * {@link #MATCH_DEFAULT_ONLY}, to limit the resolution to only
   1900      * those activities that support the {@link android.content.Intent#CATEGORY_DEFAULT}.
   1901      *
   1902      * @return A List&lt;ResolveInfo&gt; containing one entry for each matching
   1903      *         Activity. These are ordered first by all of the intents resolved
   1904      *         in <var>specifics</var> and then any additional activities that
   1905      *         can handle <var>intent</var> but did not get included by one of
   1906      *         the <var>specifics</var> intents.  If there are no matching
   1907      *         activities, an empty list is returned.
   1908      *
   1909      * @see #MATCH_DEFAULT_ONLY
   1910      * @see #GET_INTENT_FILTERS
   1911      * @see #GET_RESOLVED_FILTER
   1912      */
   1913     public abstract List<ResolveInfo> queryIntentActivityOptions(
   1914             ComponentName caller, Intent[] specifics, Intent intent, int flags);
   1915 
   1916     /**
   1917      * Retrieve all receivers that can handle a broadcast of the given intent.
   1918      *
   1919      * @param intent The desired intent as per resolveActivity().
   1920      * @param flags Additional option flags.
   1921      *
   1922      * @return A List&lt;ResolveInfo&gt; containing one entry for each matching
   1923      *         Receiver. These are ordered from first to last in priority.  If
   1924      *         there are no matching receivers, an empty list is returned.
   1925      *
   1926      * @see #MATCH_DEFAULT_ONLY
   1927      * @see #GET_INTENT_FILTERS
   1928      * @see #GET_RESOLVED_FILTER
   1929      */
   1930     public abstract List<ResolveInfo> queryBroadcastReceivers(Intent intent,
   1931             int flags);
   1932 
   1933     /**
   1934      * Retrieve all receivers that can handle a broadcast of the given intent, for a specific
   1935      * user.
   1936      *
   1937      * @param intent The desired intent as per resolveActivity().
   1938      * @param flags Additional option flags.
   1939      * @param userId The userId of the user being queried.
   1940      *
   1941      * @return A List&lt;ResolveInfo&gt; containing one entry for each matching
   1942      *         Receiver. These are ordered from first to last in priority.  If
   1943      *         there are no matching receivers, an empty list is returned.
   1944      *
   1945      * @see #MATCH_DEFAULT_ONLY
   1946      * @see #GET_INTENT_FILTERS
   1947      * @see #GET_RESOLVED_FILTER
   1948      * @hide
   1949      */
   1950     public abstract List<ResolveInfo> queryBroadcastReceivers(Intent intent,
   1951             int flags, int userId);
   1952 
   1953     /**
   1954      * Determine the best service to handle for a given Intent.
   1955      *
   1956      * @param intent An intent containing all of the desired specification
   1957      *               (action, data, type, category, and/or component).
   1958      * @param flags Additional option flags.
   1959      *
   1960      * @return Returns a ResolveInfo containing the final service intent that
   1961      *         was determined to be the best action.  Returns null if no
   1962      *         matching service was found.
   1963      *
   1964      * @see #GET_INTENT_FILTERS
   1965      * @see #GET_RESOLVED_FILTER
   1966      */
   1967     public abstract ResolveInfo resolveService(Intent intent, int flags);
   1968 
   1969     /**
   1970      * Retrieve all services that can match the given intent.
   1971      *
   1972      * @param intent The desired intent as per resolveService().
   1973      * @param flags Additional option flags.
   1974      *
   1975      * @return A List&lt;ResolveInfo&gt; containing one entry for each matching
   1976      *         ServiceInfo. These are ordered from best to worst match -- that
   1977      *         is, the first item in the list is what is returned by
   1978      *         resolveService().  If there are no matching services, an empty
   1979      *         list is returned.
   1980      *
   1981      * @see #GET_INTENT_FILTERS
   1982      * @see #GET_RESOLVED_FILTER
   1983      */
   1984     public abstract List<ResolveInfo> queryIntentServices(Intent intent,
   1985             int flags);
   1986 
   1987     /**
   1988      * Retrieve all services that can match the given intent for a given user.
   1989      *
   1990      * @param intent The desired intent as per resolveService().
   1991      * @param flags Additional option flags.
   1992      * @param userId The user id.
   1993      *
   1994      * @return A List&lt;ResolveInfo&gt; containing one entry for each matching
   1995      *         ServiceInfo. These are ordered from best to worst match -- that
   1996      *         is, the first item in the list is what is returned by
   1997      *         resolveService().  If there are no matching services, an empty
   1998      *         list is returned.
   1999      *
   2000      * @see #GET_INTENT_FILTERS
   2001      * @see #GET_RESOLVED_FILTER
   2002      *
   2003      * @hide
   2004      */
   2005     public abstract List<ResolveInfo> queryIntentServicesAsUser(Intent intent,
   2006             int flags, int userId);
   2007 
   2008     /**
   2009      * Find a single content provider by its base path name.
   2010      *
   2011      * @param name The name of the provider to find.
   2012      * @param flags Additional option flags.  Currently should always be 0.
   2013      *
   2014      * @return ContentProviderInfo Information about the provider, if found,
   2015      *         else null.
   2016      */
   2017     public abstract ProviderInfo resolveContentProvider(String name,
   2018             int flags);
   2019 
   2020     /**
   2021      * Retrieve content provider information.
   2022      *
   2023      * <p><em>Note: unlike most other methods, an empty result set is indicated
   2024      * by a null return instead of an empty list.</em>
   2025      *
   2026      * @param processName If non-null, limits the returned providers to only
   2027      *                    those that are hosted by the given process.  If null,
   2028      *                    all content providers are returned.
   2029      * @param uid If <var>processName</var> is non-null, this is the required
   2030      *        uid owning the requested content providers.
   2031      * @param flags Additional option flags.  Currently should always be 0.
   2032      *
   2033      * @return A List&lt;ContentProviderInfo&gt; containing one entry for each
   2034      *         content provider either patching <var>processName</var> or, if
   2035      *         <var>processName</var> is null, all known content providers.
   2036      *         <em>If there are no matching providers, null is returned.</em>
   2037      */
   2038     public abstract List<ProviderInfo> queryContentProviders(
   2039             String processName, int uid, int flags);
   2040 
   2041     /**
   2042      * Retrieve all of the information we know about a particular
   2043      * instrumentation class.
   2044      *
   2045      * <p>Throws {@link NameNotFoundException} if instrumentation with the
   2046      * given class name can not be found on the system.
   2047      *
   2048      * @param className The full name (i.e.
   2049      *                  com.google.apps.contacts.InstrumentList) of an
   2050      *                  Instrumentation class.
   2051      * @param flags Additional option flags.  Currently should always be 0.
   2052      *
   2053      * @return InstrumentationInfo containing information about the
   2054      *         instrumentation.
   2055      */
   2056     public abstract InstrumentationInfo getInstrumentationInfo(
   2057             ComponentName className, int flags) throws NameNotFoundException;
   2058 
   2059     /**
   2060      * Retrieve information about available instrumentation code.  May be used
   2061      * to retrieve either all instrumentation code, or only the code targeting
   2062      * a particular package.
   2063      *
   2064      * @param targetPackage If null, all instrumentation is returned; only the
   2065      *                      instrumentation targeting this package name is
   2066      *                      returned.
   2067      * @param flags Additional option flags.  Currently should always be 0.
   2068      *
   2069      * @return A List&lt;InstrumentationInfo&gt; containing one entry for each
   2070      *         matching available Instrumentation.  Returns an empty list if
   2071      *         there is no instrumentation available for the given package.
   2072      */
   2073     public abstract List<InstrumentationInfo> queryInstrumentation(
   2074             String targetPackage, int flags);
   2075 
   2076     /**
   2077      * Retrieve an image from a package.  This is a low-level API used by
   2078      * the various package manager info structures (such as
   2079      * {@link ComponentInfo} to implement retrieval of their associated
   2080      * icon.
   2081      *
   2082      * @param packageName The name of the package that this icon is coming from.
   2083      * Can not be null.
   2084      * @param resid The resource identifier of the desired image.  Can not be 0.
   2085      * @param appInfo Overall information about <var>packageName</var>.  This
   2086      * may be null, in which case the application information will be retrieved
   2087      * for you if needed; if you already have this information around, it can
   2088      * be much more efficient to supply it here.
   2089      *
   2090      * @return Returns a Drawable holding the requested image.  Returns null if
   2091      * an image could not be found for any reason.
   2092      */
   2093     public abstract Drawable getDrawable(String packageName, int resid,
   2094             ApplicationInfo appInfo);
   2095 
   2096     /**
   2097      * Retrieve the icon associated with an activity.  Given the full name of
   2098      * an activity, retrieves the information about it and calls
   2099      * {@link ComponentInfo#loadIcon ComponentInfo.loadIcon()} to return its icon.
   2100      * If the activity can not be found, NameNotFoundException is thrown.
   2101      *
   2102      * @param activityName Name of the activity whose icon is to be retrieved.
   2103      *
   2104      * @return Returns the image of the icon, or the default activity icon if
   2105      * it could not be found.  Does not return null.
   2106      * @throws NameNotFoundException Thrown if the resources for the given
   2107      * activity could not be loaded.
   2108      *
   2109      * @see #getActivityIcon(Intent)
   2110      */
   2111     public abstract Drawable getActivityIcon(ComponentName activityName)
   2112             throws NameNotFoundException;
   2113 
   2114     /**
   2115      * Retrieve the icon associated with an Intent.  If intent.getClassName() is
   2116      * set, this simply returns the result of
   2117      * getActivityIcon(intent.getClassName()).  Otherwise it resolves the intent's
   2118      * component and returns the icon associated with the resolved component.
   2119      * If intent.getClassName() can not be found or the Intent can not be resolved
   2120      * to a component, NameNotFoundException is thrown.
   2121      *
   2122      * @param intent The intent for which you would like to retrieve an icon.
   2123      *
   2124      * @return Returns the image of the icon, or the default activity icon if
   2125      * it could not be found.  Does not return null.
   2126      * @throws NameNotFoundException Thrown if the resources for application
   2127      * matching the given intent could not be loaded.
   2128      *
   2129      * @see #getActivityIcon(ComponentName)
   2130      */
   2131     public abstract Drawable getActivityIcon(Intent intent)
   2132             throws NameNotFoundException;
   2133 
   2134     /**
   2135      * Return the generic icon for an activity that is used when no specific
   2136      * icon is defined.
   2137      *
   2138      * @return Drawable Image of the icon.
   2139      */
   2140     public abstract Drawable getDefaultActivityIcon();
   2141 
   2142     /**
   2143      * Retrieve the icon associated with an application.  If it has not defined
   2144      * an icon, the default app icon is returned.  Does not return null.
   2145      *
   2146      * @param info Information about application being queried.
   2147      *
   2148      * @return Returns the image of the icon, or the default application icon
   2149      * if it could not be found.
   2150      *
   2151      * @see #getApplicationIcon(String)
   2152      */
   2153     public abstract Drawable getApplicationIcon(ApplicationInfo info);
   2154 
   2155     /**
   2156      * Retrieve the icon associated with an application.  Given the name of the
   2157      * application's package, retrieves the information about it and calls
   2158      * getApplicationIcon() to return its icon. If the application can not be
   2159      * found, NameNotFoundException is thrown.
   2160      *
   2161      * @param packageName Name of the package whose application icon is to be
   2162      *                    retrieved.
   2163      *
   2164      * @return Returns the image of the icon, or the default application icon
   2165      * if it could not be found.  Does not return null.
   2166      * @throws NameNotFoundException Thrown if the resources for the given
   2167      * application could not be loaded.
   2168      *
   2169      * @see #getApplicationIcon(ApplicationInfo)
   2170      */
   2171     public abstract Drawable getApplicationIcon(String packageName)
   2172             throws NameNotFoundException;
   2173 
   2174     /**
   2175      * Retrieve the logo associated with an activity.  Given the full name of
   2176      * an activity, retrieves the information about it and calls
   2177      * {@link ComponentInfo#loadLogo ComponentInfo.loadLogo()} to return its logo.
   2178      * If the activity can not be found, NameNotFoundException is thrown.
   2179      *
   2180      * @param activityName Name of the activity whose logo is to be retrieved.
   2181      *
   2182      * @return Returns the image of the logo or null if the activity has no
   2183      * logo specified.
   2184      *
   2185      * @throws NameNotFoundException Thrown if the resources for the given
   2186      * activity could not be loaded.
   2187      *
   2188      * @see #getActivityLogo(Intent)
   2189      */
   2190     public abstract Drawable getActivityLogo(ComponentName activityName)
   2191             throws NameNotFoundException;
   2192 
   2193     /**
   2194      * Retrieve the logo associated with an Intent.  If intent.getClassName() is
   2195      * set, this simply returns the result of
   2196      * getActivityLogo(intent.getClassName()).  Otherwise it resolves the intent's
   2197      * component and returns the logo associated with the resolved component.
   2198      * If intent.getClassName() can not be found or the Intent can not be resolved
   2199      * to a component, NameNotFoundException is thrown.
   2200      *
   2201      * @param intent The intent for which you would like to retrieve a logo.
   2202      *
   2203      * @return Returns the image of the logo, or null if the activity has no
   2204      * logo specified.
   2205      *
   2206      * @throws NameNotFoundException Thrown if the resources for application
   2207      * matching the given intent could not be loaded.
   2208      *
   2209      * @see #getActivityLogo(ComponentName)
   2210      */
   2211     public abstract Drawable getActivityLogo(Intent intent)
   2212             throws NameNotFoundException;
   2213 
   2214     /**
   2215      * Retrieve the logo associated with an application.  If it has not specified
   2216      * a logo, this method returns null.
   2217      *
   2218      * @param info Information about application being queried.
   2219      *
   2220      * @return Returns the image of the logo, or null if no logo is specified
   2221      * by the application.
   2222      *
   2223      * @see #getApplicationLogo(String)
   2224      */
   2225     public abstract Drawable getApplicationLogo(ApplicationInfo info);
   2226 
   2227     /**
   2228      * Retrieve the logo associated with an application.  Given the name of the
   2229      * application's package, retrieves the information about it and calls
   2230      * getApplicationLogo() to return its logo. If the application can not be
   2231      * found, NameNotFoundException is thrown.
   2232      *
   2233      * @param packageName Name of the package whose application logo is to be
   2234      *                    retrieved.
   2235      *
   2236      * @return Returns the image of the logo, or null if no application logo
   2237      * has been specified.
   2238      *
   2239      * @throws NameNotFoundException Thrown if the resources for the given
   2240      * application could not be loaded.
   2241      *
   2242      * @see #getApplicationLogo(ApplicationInfo)
   2243      */
   2244     public abstract Drawable getApplicationLogo(String packageName)
   2245             throws NameNotFoundException;
   2246 
   2247     /**
   2248      * Retrieve text from a package.  This is a low-level API used by
   2249      * the various package manager info structures (such as
   2250      * {@link ComponentInfo} to implement retrieval of their associated
   2251      * labels and other text.
   2252      *
   2253      * @param packageName The name of the package that this text is coming from.
   2254      * Can not be null.
   2255      * @param resid The resource identifier of the desired text.  Can not be 0.
   2256      * @param appInfo Overall information about <var>packageName</var>.  This
   2257      * may be null, in which case the application information will be retrieved
   2258      * for you if needed; if you already have this information around, it can
   2259      * be much more efficient to supply it here.
   2260      *
   2261      * @return Returns a CharSequence holding the requested text.  Returns null
   2262      * if the text could not be found for any reason.
   2263      */
   2264     public abstract CharSequence getText(String packageName, int resid,
   2265             ApplicationInfo appInfo);
   2266 
   2267     /**
   2268      * Retrieve an XML file from a package.  This is a low-level API used to
   2269      * retrieve XML meta data.
   2270      *
   2271      * @param packageName The name of the package that this xml is coming from.
   2272      * Can not be null.
   2273      * @param resid The resource identifier of the desired xml.  Can not be 0.
   2274      * @param appInfo Overall information about <var>packageName</var>.  This
   2275      * may be null, in which case the application information will be retrieved
   2276      * for you if needed; if you already have this information around, it can
   2277      * be much more efficient to supply it here.
   2278      *
   2279      * @return Returns an XmlPullParser allowing you to parse out the XML
   2280      * data.  Returns null if the xml resource could not be found for any
   2281      * reason.
   2282      */
   2283     public abstract XmlResourceParser getXml(String packageName, int resid,
   2284             ApplicationInfo appInfo);
   2285 
   2286     /**
   2287      * Return the label to use for this application.
   2288      *
   2289      * @return Returns the label associated with this application, or null if
   2290      * it could not be found for any reason.
   2291      * @param info The application to get the label of
   2292      */
   2293     public abstract CharSequence getApplicationLabel(ApplicationInfo info);
   2294 
   2295     /**
   2296      * Retrieve the resources associated with an activity.  Given the full
   2297      * name of an activity, retrieves the information about it and calls
   2298      * getResources() to return its application's resources.  If the activity
   2299      * can not be found, NameNotFoundException is thrown.
   2300      *
   2301      * @param activityName Name of the activity whose resources are to be
   2302      *                     retrieved.
   2303      *
   2304      * @return Returns the application's Resources.
   2305      * @throws NameNotFoundException Thrown if the resources for the given
   2306      * application could not be loaded.
   2307      *
   2308      * @see #getResourcesForApplication(ApplicationInfo)
   2309      */
   2310     public abstract Resources getResourcesForActivity(ComponentName activityName)
   2311             throws NameNotFoundException;
   2312 
   2313     /**
   2314      * Retrieve the resources for an application.  Throws NameNotFoundException
   2315      * if the package is no longer installed.
   2316      *
   2317      * @param app Information about the desired application.
   2318      *
   2319      * @return Returns the application's Resources.
   2320      * @throws NameNotFoundException Thrown if the resources for the given
   2321      * application could not be loaded (most likely because it was uninstalled).
   2322      */
   2323     public abstract Resources getResourcesForApplication(ApplicationInfo app)
   2324             throws NameNotFoundException;
   2325 
   2326     /**
   2327      * Retrieve the resources associated with an application.  Given the full
   2328      * package name of an application, retrieves the information about it and
   2329      * calls getResources() to return its application's resources.  If the
   2330      * appPackageName can not be found, NameNotFoundException is thrown.
   2331      *
   2332      * @param appPackageName Package name of the application whose resources
   2333      *                       are to be retrieved.
   2334      *
   2335      * @return Returns the application's Resources.
   2336      * @throws NameNotFoundException Thrown if the resources for the given
   2337      * application could not be loaded.
   2338      *
   2339      * @see #getResourcesForApplication(ApplicationInfo)
   2340      */
   2341     public abstract Resources getResourcesForApplication(String appPackageName)
   2342             throws NameNotFoundException;
   2343 
   2344     /** @hide */
   2345     public abstract Resources getResourcesForApplicationAsUser(String appPackageName, int userId)
   2346             throws NameNotFoundException;
   2347 
   2348     /**
   2349      * Retrieve overall information about an application package defined
   2350      * in a package archive file
   2351      *
   2352      * @param archiveFilePath The path to the archive file
   2353      * @param flags Additional option flags. Use any combination of
   2354      * {@link #GET_ACTIVITIES},
   2355      * {@link #GET_GIDS},
   2356      * {@link #GET_CONFIGURATIONS},
   2357      * {@link #GET_INSTRUMENTATION},
   2358      * {@link #GET_PERMISSIONS},
   2359      * {@link #GET_PROVIDERS},
   2360      * {@link #GET_RECEIVERS},
   2361      * {@link #GET_SERVICES},
   2362      * {@link #GET_SIGNATURES}, to modify the data returned.
   2363      *
   2364      * @return Returns the information about the package. Returns
   2365      * null if the package could not be successfully parsed.
   2366      *
   2367      * @see #GET_ACTIVITIES
   2368      * @see #GET_GIDS
   2369      * @see #GET_CONFIGURATIONS
   2370      * @see #GET_INSTRUMENTATION
   2371      * @see #GET_PERMISSIONS
   2372      * @see #GET_PROVIDERS
   2373      * @see #GET_RECEIVERS
   2374      * @see #GET_SERVICES
   2375      * @see #GET_SIGNATURES
   2376      *
   2377      */
   2378     public PackageInfo getPackageArchiveInfo(String archiveFilePath, int flags) {
   2379         PackageParser packageParser = new PackageParser(archiveFilePath);
   2380         DisplayMetrics metrics = new DisplayMetrics();
   2381         metrics.setToDefaults();
   2382         final File sourceFile = new File(archiveFilePath);
   2383         PackageParser.Package pkg = packageParser.parsePackage(
   2384                 sourceFile, archiveFilePath, metrics, 0);
   2385         if (pkg == null) {
   2386             return null;
   2387         }
   2388         if ((flags & GET_SIGNATURES) != 0) {
   2389             packageParser.collectCertificates(pkg, 0);
   2390         }
   2391         PackageUserState state = new PackageUserState();
   2392         return PackageParser.generatePackageInfo(pkg, null, flags, 0, 0, null, state);
   2393     }
   2394 
   2395     /**
   2396      * @hide
   2397      *
   2398      * Install a package. Since this may take a little while, the result will
   2399      * be posted back to the given observer.  An installation will fail if the calling context
   2400      * lacks the {@link android.Manifest.permission#INSTALL_PACKAGES} permission, if the
   2401      * package named in the package file's manifest is already installed, or if there's no space
   2402      * available on the device.
   2403      *
   2404      * @param packageURI The location of the package file to install.  This can be a 'file:' or a
   2405      * 'content:' URI.
   2406      * @param observer An observer callback to get notified when the package installation is
   2407      * complete. {@link IPackageInstallObserver#packageInstalled(String, int)} will be
   2408      * called when that happens.  observer may be null to indicate that no callback is desired.
   2409      * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
   2410      * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}.
   2411      * @param installerPackageName Optional package name of the application that is performing the
   2412      * installation. This identifies which market the package came from.
   2413      */
   2414     public abstract void installPackage(
   2415             Uri packageURI, IPackageInstallObserver observer, int flags,
   2416             String installerPackageName);
   2417 
   2418     /**
   2419      * Similar to
   2420      * {@link #installPackage(Uri, IPackageInstallObserver, int, String)} but
   2421      * with an extra verification file provided.
   2422      *
   2423      * @param packageURI The location of the package file to install. This can
   2424      *            be a 'file:' or a 'content:' URI.
   2425      * @param observer An observer callback to get notified when the package
   2426      *            installation is complete.
   2427      *            {@link IPackageInstallObserver#packageInstalled(String, int)}
   2428      *            will be called when that happens. observer may be null to
   2429      *            indicate that no callback is desired.
   2430      * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
   2431      *            {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}
   2432      *            .
   2433      * @param installerPackageName Optional package name of the application that
   2434      *            is performing the installation. This identifies which market
   2435      *            the package came from.
   2436      * @param verificationURI The location of the supplementary verification
   2437      *            file. This can be a 'file:' or a 'content:' URI. May be
   2438      *            {@code null}.
   2439      * @param manifestDigest an object that holds the digest of the package
   2440      *            which can be used to verify ownership. May be {@code null}.
   2441      * @param encryptionParams if the package to be installed is encrypted,
   2442      *            these parameters describing the encryption and authentication
   2443      *            used. May be {@code null}.
   2444      * @hide
   2445      */
   2446     public abstract void installPackageWithVerification(Uri packageURI,
   2447             IPackageInstallObserver observer, int flags, String installerPackageName,
   2448             Uri verificationURI, ManifestDigest manifestDigest,
   2449             ContainerEncryptionParams encryptionParams);
   2450 
   2451     /**
   2452      * Similar to
   2453      * {@link #installPackage(Uri, IPackageInstallObserver, int, String)} but
   2454      * with an extra verification information provided.
   2455      *
   2456      * @param packageURI The location of the package file to install. This can
   2457      *            be a 'file:' or a 'content:' URI.
   2458      * @param observer An observer callback to get notified when the package
   2459      *            installation is complete.
   2460      *            {@link IPackageInstallObserver#packageInstalled(String, int)}
   2461      *            will be called when that happens. observer may be null to
   2462      *            indicate that no callback is desired.
   2463      * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
   2464      *            {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}
   2465      *            .
   2466      * @param installerPackageName Optional package name of the application that
   2467      *            is performing the installation. This identifies which market
   2468      *            the package came from.
   2469      * @param verificationParams an object that holds signal information to
   2470      *            assist verification. May be {@code null}.
   2471      * @param encryptionParams if the package to be installed is encrypted,
   2472      *            these parameters describing the encryption and authentication
   2473      *            used. May be {@code null}.
   2474      *
   2475      * @hide
   2476      */
   2477     public abstract void installPackageWithVerificationAndEncryption(Uri packageURI,
   2478             IPackageInstallObserver observer, int flags, String installerPackageName,
   2479             VerificationParams verificationParams,
   2480             ContainerEncryptionParams encryptionParams);
   2481 
   2482     /**
   2483      * If there is already an application with the given package name installed
   2484      * on the system for other users, also install it for the calling user.
   2485      * @hide
   2486      */
   2487     public abstract int installExistingPackage(String packageName)
   2488             throws NameNotFoundException;
   2489 
   2490     /**
   2491      * Allows a package listening to the
   2492      * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification
   2493      * broadcast} to respond to the package manager. The response must include
   2494      * the {@code verificationCode} which is one of
   2495      * {@link PackageManager#VERIFICATION_ALLOW} or
   2496      * {@link PackageManager#VERIFICATION_REJECT}.
   2497      *
   2498      * @param id pending package identifier as passed via the
   2499      *            {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra
   2500      * @param verificationCode either {@link PackageManager#VERIFICATION_ALLOW}
   2501      *            or {@link PackageManager#VERIFICATION_REJECT}.
   2502      * @throws SecurityException if the caller does not have the
   2503      *            PACKAGE_VERIFICATION_AGENT permission.
   2504      */
   2505     public abstract void verifyPendingInstall(int id, int verificationCode);
   2506 
   2507     /**
   2508      * Allows a package listening to the
   2509      * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification
   2510      * broadcast} to extend the default timeout for a response and declare what
   2511      * action to perform after the timeout occurs. The response must include
   2512      * the {@code verificationCodeAtTimeout} which is one of
   2513      * {@link PackageManager#VERIFICATION_ALLOW} or
   2514      * {@link PackageManager#VERIFICATION_REJECT}.
   2515      *
   2516      * This method may only be called once per package id. Additional calls
   2517      * will have no effect.
   2518      *
   2519      * @param id pending package identifier as passed via the
   2520      *            {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra
   2521      * @param verificationCodeAtTimeout either
   2522      *            {@link PackageManager#VERIFICATION_ALLOW} or
   2523      *            {@link PackageManager#VERIFICATION_REJECT}. If
   2524      *            {@code verificationCodeAtTimeout} is neither
   2525      *            {@link PackageManager#VERIFICATION_ALLOW} or
   2526      *            {@link PackageManager#VERIFICATION_REJECT}, then
   2527      *            {@code verificationCodeAtTimeout} will default to
   2528      *            {@link PackageManager#VERIFICATION_REJECT}.
   2529      * @param millisecondsToDelay the amount of time requested for the timeout.
   2530      *            Must be positive and less than
   2531      *            {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}. If
   2532      *            {@code millisecondsToDelay} is out of bounds,
   2533      *            {@code millisecondsToDelay} will be set to the closest in
   2534      *            bounds value; namely, 0 or
   2535      *            {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}.
   2536      * @throws SecurityException if the caller does not have the
   2537      *            PACKAGE_VERIFICATION_AGENT permission.
   2538      */
   2539     public abstract void extendVerificationTimeout(int id,
   2540             int verificationCodeAtTimeout, long millisecondsToDelay);
   2541 
   2542     /**
   2543      * Change the installer associated with a given package.  There are limitations
   2544      * on how the installer package can be changed; in particular:
   2545      * <ul>
   2546      * <li> A SecurityException will be thrown if <var>installerPackageName</var>
   2547      * is not signed with the same certificate as the calling application.
   2548      * <li> A SecurityException will be thrown if <var>targetPackage</var> already
   2549      * has an installer package, and that installer package is not signed with
   2550      * the same certificate as the calling application.
   2551      * </ul>
   2552      *
   2553      * @param targetPackage The installed package whose installer will be changed.
   2554      * @param installerPackageName The package name of the new installer.  May be
   2555      * null to clear the association.
   2556      */
   2557     public abstract void setInstallerPackageName(String targetPackage,
   2558             String installerPackageName);
   2559 
   2560     /**
   2561      * Attempts to delete a package.  Since this may take a little while, the result will
   2562      * be posted back to the given observer.  A deletion will fail if the calling context
   2563      * lacks the {@link android.Manifest.permission#DELETE_PACKAGES} permission, if the
   2564      * named package cannot be found, or if the named package is a "system package".
   2565      * (TODO: include pointer to documentation on "system packages")
   2566      *
   2567      * @param packageName The name of the package to delete
   2568      * @param observer An observer callback to get notified when the package deletion is
   2569      * complete. {@link android.content.pm.IPackageDeleteObserver#packageDeleted(boolean)} will be
   2570      * called when that happens.  observer may be null to indicate that no callback is desired.
   2571      * @param flags - possible values: {@link #DELETE_KEEP_DATA},
   2572      * {@link #DELETE_ALL_USERS}.
   2573      *
   2574      * @hide
   2575      */
   2576     public abstract void deletePackage(
   2577             String packageName, IPackageDeleteObserver observer, int flags);
   2578 
   2579     /**
   2580      * Retrieve the package name of the application that installed a package. This identifies
   2581      * which market the package came from.
   2582      *
   2583      * @param packageName The name of the package to query
   2584      */
   2585     public abstract String getInstallerPackageName(String packageName);
   2586 
   2587     /**
   2588      * Attempts to clear the user data directory of an application.
   2589      * Since this may take a little while, the result will
   2590      * be posted back to the given observer.  A deletion will fail if the
   2591      * named package cannot be found, or if the named package is a "system package".
   2592      *
   2593      * @param packageName The name of the package
   2594      * @param observer An observer callback to get notified when the operation is finished
   2595      * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
   2596      * will be called when that happens.  observer may be null to indicate that
   2597      * no callback is desired.
   2598      *
   2599      * @hide
   2600      */
   2601     public abstract void clearApplicationUserData(String packageName,
   2602             IPackageDataObserver observer);
   2603     /**
   2604      * Attempts to delete the cache files associated with an application.
   2605      * Since this may take a little while, the result will
   2606      * be posted back to the given observer.  A deletion will fail if the calling context
   2607      * lacks the {@link android.Manifest.permission#DELETE_CACHE_FILES} permission, if the
   2608      * named package cannot be found, or if the named package is a "system package".
   2609      *
   2610      * @param packageName The name of the package to delete
   2611      * @param observer An observer callback to get notified when the cache file deletion
   2612      * is complete.
   2613      * {@link android.content.pm.IPackageDataObserver#onRemoveCompleted(String, boolean)}
   2614      * will be called when that happens.  observer may be null to indicate that
   2615      * no callback is desired.
   2616      *
   2617      * @hide
   2618      */
   2619     public abstract void deleteApplicationCacheFiles(String packageName,
   2620             IPackageDataObserver observer);
   2621 
   2622     /**
   2623      * Free storage by deleting LRU sorted list of cache files across
   2624      * all applications. If the currently available free storage
   2625      * on the device is greater than or equal to the requested
   2626      * free storage, no cache files are cleared. If the currently
   2627      * available storage on the device is less than the requested
   2628      * free storage, some or all of the cache files across
   2629      * all applications are deleted (based on last accessed time)
   2630      * to increase the free storage space on the device to
   2631      * the requested value. There is no guarantee that clearing all
   2632      * the cache files from all applications will clear up
   2633      * enough storage to achieve the desired value.
   2634      * @param freeStorageSize The number of bytes of storage to be
   2635      * freed by the system. Say if freeStorageSize is XX,
   2636      * and the current free storage is YY,
   2637      * if XX is less than YY, just return. if not free XX-YY number
   2638      * of bytes if possible.
   2639      * @param observer call back used to notify when
   2640      * the operation is completed
   2641      *
   2642      * @hide
   2643      */
   2644     public abstract void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer);
   2645 
   2646     /**
   2647      * Free storage by deleting LRU sorted list of cache files across
   2648      * all applications. If the currently available free storage
   2649      * on the device is greater than or equal to the requested
   2650      * free storage, no cache files are cleared. If the currently
   2651      * available storage on the device is less than the requested
   2652      * free storage, some or all of the cache files across
   2653      * all applications are deleted (based on last accessed time)
   2654      * to increase the free storage space on the device to
   2655      * the requested value. There is no guarantee that clearing all
   2656      * the cache files from all applications will clear up
   2657      * enough storage to achieve the desired value.
   2658      * @param freeStorageSize The number of bytes of storage to be
   2659      * freed by the system. Say if freeStorageSize is XX,
   2660      * and the current free storage is YY,
   2661      * if XX is less than YY, just return. if not free XX-YY number
   2662      * of bytes if possible.
   2663      * @param pi IntentSender call back used to
   2664      * notify when the operation is completed.May be null
   2665      * to indicate that no call back is desired.
   2666      *
   2667      * @hide
   2668      */
   2669     public abstract void freeStorage(long freeStorageSize, IntentSender pi);
   2670 
   2671     /**
   2672      * Retrieve the size information for a package.
   2673      * Since this may take a little while, the result will
   2674      * be posted back to the given observer.  The calling context
   2675      * should have the {@link android.Manifest.permission#GET_PACKAGE_SIZE} permission.
   2676      *
   2677      * @param packageName The name of the package whose size information is to be retrieved
   2678      * @param userHandle The user whose size information should be retrieved.
   2679      * @param observer An observer callback to get notified when the operation
   2680      * is complete.
   2681      * {@link android.content.pm.IPackageStatsObserver#onGetStatsCompleted(PackageStats, boolean)}
   2682      * The observer's callback is invoked with a PackageStats object(containing the
   2683      * code, data and cache sizes of the package) and a boolean value representing
   2684      * the status of the operation. observer may be null to indicate that
   2685      * no callback is desired.
   2686      *
   2687      * @hide
   2688      */
   2689     public abstract void getPackageSizeInfo(String packageName, int userHandle,
   2690             IPackageStatsObserver observer);
   2691 
   2692     /**
   2693      * Like {@link #getPackageSizeInfo(String, int, IPackageStatsObserver)}, but
   2694      * returns the size for the calling user.
   2695      *
   2696      * @hide
   2697      */
   2698     public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) {
   2699         getPackageSizeInfo(packageName, UserHandle.myUserId(), observer);
   2700     }
   2701 
   2702     /**
   2703      * @deprecated This function no longer does anything; it was an old
   2704      * approach to managing preferred activities, which has been superceeded
   2705      * (and conflicts with) the modern activity-based preferences.
   2706      */
   2707     @Deprecated
   2708     public abstract void addPackageToPreferred(String packageName);
   2709 
   2710     /**
   2711      * @deprecated This function no longer does anything; it was an old
   2712      * approach to managing preferred activities, which has been superceeded
   2713      * (and conflicts with) the modern activity-based preferences.
   2714      */
   2715     @Deprecated
   2716     public abstract void removePackageFromPreferred(String packageName);
   2717 
   2718     /**
   2719      * Retrieve the list of all currently configured preferred packages.  The
   2720      * first package on the list is the most preferred, the last is the
   2721      * least preferred.
   2722      *
   2723      * @param flags Additional option flags. Use any combination of
   2724      * {@link #GET_ACTIVITIES},
   2725      * {@link #GET_GIDS},
   2726      * {@link #GET_CONFIGURATIONS},
   2727      * {@link #GET_INSTRUMENTATION},
   2728      * {@link #GET_PERMISSIONS},
   2729      * {@link #GET_PROVIDERS},
   2730      * {@link #GET_RECEIVERS},
   2731      * {@link #GET_SERVICES},
   2732      * {@link #GET_SIGNATURES}, to modify the data returned.
   2733      *
   2734      * @return Returns a list of PackageInfo objects describing each
   2735      * preferred application, in order of preference.
   2736      *
   2737      * @see #GET_ACTIVITIES
   2738      * @see #GET_GIDS
   2739      * @see #GET_CONFIGURATIONS
   2740      * @see #GET_INSTRUMENTATION
   2741      * @see #GET_PERMISSIONS
   2742      * @see #GET_PROVIDERS
   2743      * @see #GET_RECEIVERS
   2744      * @see #GET_SERVICES
   2745      * @see #GET_SIGNATURES
   2746      */
   2747     public abstract List<PackageInfo> getPreferredPackages(int flags);
   2748 
   2749     /**
   2750      * @deprecated This is a protected API that should not have been available
   2751      * to third party applications.  It is the platform's responsibility for
   2752      * assigning preferred activities and this can not be directly modified.
   2753      *
   2754      * Add a new preferred activity mapping to the system.  This will be used
   2755      * to automatically select the given activity component when
   2756      * {@link Context#startActivity(Intent) Context.startActivity()} finds
   2757      * multiple matching activities and also matches the given filter.
   2758      *
   2759      * @param filter The set of intents under which this activity will be
   2760      * made preferred.
   2761      * @param match The IntentFilter match category that this preference
   2762      * applies to.
   2763      * @param set The set of activities that the user was picking from when
   2764      * this preference was made.
   2765      * @param activity The component name of the activity that is to be
   2766      * preferred.
   2767      */
   2768     @Deprecated
   2769     public abstract void addPreferredActivity(IntentFilter filter, int match,
   2770             ComponentName[] set, ComponentName activity);
   2771 
   2772     /**
   2773      * Same as {@link #addPreferredActivity(IntentFilter, int,
   2774             ComponentName[], ComponentName)}, but with a specific userId to apply the preference
   2775             to.
   2776      * @hide
   2777      */
   2778     public void addPreferredActivity(IntentFilter filter, int match,
   2779             ComponentName[] set, ComponentName activity, int userId) {
   2780         throw new RuntimeException("Not implemented. Must override in a subclass.");
   2781     }
   2782 
   2783     /**
   2784      * @deprecated This is a protected API that should not have been available
   2785      * to third party applications.  It is the platform's responsibility for
   2786      * assigning preferred activities and this can not be directly modified.
   2787      *
   2788      * Replaces an existing preferred activity mapping to the system, and if that were not present
   2789      * adds a new preferred activity.  This will be used
   2790      * to automatically select the given activity component when
   2791      * {@link Context#startActivity(Intent) Context.startActivity()} finds
   2792      * multiple matching activities and also matches the given filter.
   2793      *
   2794      * @param filter The set of intents under which this activity will be
   2795      * made preferred.
   2796      * @param match The IntentFilter match category that this preference
   2797      * applies to.
   2798      * @param set The set of activities that the user was picking from when
   2799      * this preference was made.
   2800      * @param activity The component name of the activity that is to be
   2801      * preferred.
   2802      * @hide
   2803      */
   2804     @Deprecated
   2805     public abstract void replacePreferredActivity(IntentFilter filter, int match,
   2806             ComponentName[] set, ComponentName activity);
   2807 
   2808     /**
   2809      * Remove all preferred activity mappings, previously added with
   2810      * {@link #addPreferredActivity}, from the
   2811      * system whose activities are implemented in the given package name.
   2812      * An application can only clear its own package(s).
   2813      *
   2814      * @param packageName The name of the package whose preferred activity
   2815      * mappings are to be removed.
   2816      */
   2817     public abstract void clearPackagePreferredActivities(String packageName);
   2818 
   2819     /**
   2820      * Retrieve all preferred activities, previously added with
   2821      * {@link #addPreferredActivity}, that are
   2822      * currently registered with the system.
   2823      *
   2824      * @param outFilters A list in which to place the filters of all of the
   2825      * preferred activities, or null for none.
   2826      * @param outActivities A list in which to place the component names of
   2827      * all of the preferred activities, or null for none.
   2828      * @param packageName An option package in which you would like to limit
   2829      * the list.  If null, all activities will be returned; if non-null, only
   2830      * those activities in the given package are returned.
   2831      *
   2832      * @return Returns the total number of registered preferred activities
   2833      * (the number of distinct IntentFilter records, not the number of unique
   2834      * activity components) that were found.
   2835      */
   2836     public abstract int getPreferredActivities(List<IntentFilter> outFilters,
   2837             List<ComponentName> outActivities, String packageName);
   2838 
   2839     /**
   2840      * Set the enabled setting for a package component (activity, receiver, service, provider).
   2841      * This setting will override any enabled state which may have been set by the component in its
   2842      * manifest.
   2843      *
   2844      * @param componentName The component to enable
   2845      * @param newState The new enabled state for the component.  The legal values for this state
   2846      *                 are:
   2847      *                   {@link #COMPONENT_ENABLED_STATE_ENABLED},
   2848      *                   {@link #COMPONENT_ENABLED_STATE_DISABLED}
   2849      *                   and
   2850      *                   {@link #COMPONENT_ENABLED_STATE_DEFAULT}
   2851      *                 The last one removes the setting, thereby restoring the component's state to
   2852      *                 whatever was set in it's manifest (or enabled, by default).
   2853      * @param flags Optional behavior flags: {@link #DONT_KILL_APP} or 0.
   2854      */
   2855     public abstract void setComponentEnabledSetting(ComponentName componentName,
   2856             int newState, int flags);
   2857 
   2858 
   2859     /**
   2860      * Return the the enabled setting for a package component (activity,
   2861      * receiver, service, provider).  This returns the last value set by
   2862      * {@link #setComponentEnabledSetting(ComponentName, int, int)}; in most
   2863      * cases this value will be {@link #COMPONENT_ENABLED_STATE_DEFAULT} since
   2864      * the value originally specified in the manifest has not been modified.
   2865      *
   2866      * @param componentName The component to retrieve.
   2867      * @return Returns the current enabled state for the component.  May
   2868      * be one of {@link #COMPONENT_ENABLED_STATE_ENABLED},
   2869      * {@link #COMPONENT_ENABLED_STATE_DISABLED}, or
   2870      * {@link #COMPONENT_ENABLED_STATE_DEFAULT}.  The last one means the
   2871      * component's enabled state is based on the original information in
   2872      * the manifest as found in {@link ComponentInfo}.
   2873      */
   2874     public abstract int getComponentEnabledSetting(ComponentName componentName);
   2875 
   2876     /**
   2877      * Set the enabled setting for an application
   2878      * This setting will override any enabled state which may have been set by the application in
   2879      * its manifest.  It also overrides the enabled state set in the manifest for any of the
   2880      * application's components.  It does not override any enabled state set by
   2881      * {@link #setComponentEnabledSetting} for any of the application's components.
   2882      *
   2883      * @param packageName The package name of the application to enable
   2884      * @param newState The new enabled state for the component.  The legal values for this state
   2885      *                 are:
   2886      *                   {@link #COMPONENT_ENABLED_STATE_ENABLED},
   2887      *                   {@link #COMPONENT_ENABLED_STATE_DISABLED}
   2888      *                   and
   2889      *                   {@link #COMPONENT_ENABLED_STATE_DEFAULT}
   2890      *                 The last one removes the setting, thereby restoring the applications's state to
   2891      *                 whatever was set in its manifest (or enabled, by default).
   2892      * @param flags Optional behavior flags: {@link #DONT_KILL_APP} or 0.
   2893      */
   2894     public abstract void setApplicationEnabledSetting(String packageName,
   2895             int newState, int flags);
   2896 
   2897     /**
   2898      * Return the the enabled setting for an application.  This returns
   2899      * the last value set by
   2900      * {@link #setApplicationEnabledSetting(String, int, int)}; in most
   2901      * cases this value will be {@link #COMPONENT_ENABLED_STATE_DEFAULT} since
   2902      * the value originally specified in the manifest has not been modified.
   2903      *
   2904      * @param packageName The component to retrieve.
   2905      * @return Returns the current enabled state for the component.  May
   2906      * be one of {@link #COMPONENT_ENABLED_STATE_ENABLED},
   2907      * {@link #COMPONENT_ENABLED_STATE_DISABLED}, or
   2908      * {@link #COMPONENT_ENABLED_STATE_DEFAULT}.  The last one means the
   2909      * application's enabled state is based on the original information in
   2910      * the manifest as found in {@link ComponentInfo}.
   2911      * @throws IllegalArgumentException if the named package does not exist.
   2912      */
   2913     public abstract int getApplicationEnabledSetting(String packageName);
   2914 
   2915     /**
   2916      * Return whether the device has been booted into safe mode.
   2917      */
   2918     public abstract boolean isSafeMode();
   2919 
   2920     /**
   2921      * Attempts to move package resources from internal to external media or vice versa.
   2922      * Since this may take a little while, the result will
   2923      * be posted back to the given observer.   This call may fail if the calling context
   2924      * lacks the {@link android.Manifest.permission#MOVE_PACKAGE} permission, if the
   2925      * named package cannot be found, or if the named package is a "system package".
   2926      *
   2927      * @param packageName The name of the package to delete
   2928      * @param observer An observer callback to get notified when the package move is
   2929      * complete. {@link android.content.pm.IPackageMoveObserver#packageMoved(boolean)} will be
   2930      * called when that happens.  observer may be null to indicate that no callback is desired.
   2931      * @param flags To indicate install location {@link #MOVE_INTERNAL} or
   2932      * {@link #MOVE_EXTERNAL_MEDIA}
   2933      *
   2934      * @hide
   2935      */
   2936     public abstract void movePackage(
   2937             String packageName, IPackageMoveObserver observer, int flags);
   2938 
   2939     /**
   2940      * Returns the device identity that verifiers can use to associate their scheme to a particular
   2941      * device. This should not be used by anything other than a package verifier.
   2942      *
   2943      * @return identity that uniquely identifies current device
   2944      * @hide
   2945      */
   2946     public abstract VerifierDeviceIdentity getVerifierDeviceIdentity();
   2947 
   2948     /**
   2949      * Returns the data directory for a particular user and package, given the uid of the package.
   2950      * @param uid uid of the package, including the userId and appId
   2951      * @param packageName name of the package
   2952      * @return the user-specific data directory for the package
   2953      * @hide
   2954      */
   2955     public static String getDataDirForUser(int userId, String packageName) {
   2956         // TODO: This should be shared with Installer's knowledge of user directory
   2957         return Environment.getDataDirectory().toString() + "/user/" + userId
   2958                 + "/" + packageName;
   2959     }
   2960 }
   2961