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