<?xml version="1.0" encoding="utf-8"?>
<!--
/* Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<resources>
    <!-- **************************************************************** -->
    <!-- These are the attributes used in AndroidManifest.xml. -->
    <!-- **************************************************************** -->
    <eat-comment />

    <!-- The overall theme to use for an activity.  Use with either the
         application tag (to supply a default theme for all activities) or
         the activity tag (to supply a specific theme for that activity).
    
         <p>This automatically sets
         your activity's Context to use this theme, and may also be used
         for "starting" animations prior to the activity being launched (to
         better match what the activity actually looks like).  It is a reference
         to a style resource defining the theme.  If not set, the default
         system theme will be used. -->
    <attr name="theme" format="reference" />

    <!-- A user-legible name for the given item.  Use with the
         application tag (to supply a default label for all application
         components), or with the activity, receiver, service, or instrumentation
         tag (to supply a specific label for that component).  It may also be
         used with the intent-filter tag to supply a label to show to the
         user when an activity is being selected based on a particular Intent.
    
         <p>The given label will be used wherever the user sees information
         about its associated component; for example, as the name of a
         main activity that is displayed in the launcher.  You should
         generally set this to a reference to a string resource, so that
         it can be localized, however it is also allowed to supply a plain
         string for quick and dirty programming. -->
    <attr name="label" format="reference|string" />
    
    <!-- A Drawable resource providing a graphical representation of its
         associated item.  Use with the
         application tag (to supply a default icon for all application
         components), or with the activity, receiver, service, or instrumentation
         tag (to supply a specific icon for that component).  It may also be
         used with the intent-filter tag to supply an icon to show to the
         user when an activity is being selected based on a particular Intent.
    
         <p>The given icon will be used to display to the user a graphical
         representation of its associated component; for example, as the icon
         for main activity that is displayed in the launcher.  This must be
         a reference to a Drawable resource containing the image definition. -->
    <attr name="icon" format="reference" />

    <!-- A Drawable resource providing an extended graphical banner for its
         associated item. Use with the application tag (to supply a default
         banner for all application activities), or with the activity, tag to
         supply a banner for a specific activity.

         <p>The given banner will be used to display to the user a graphical
         representation of an activity in the Leanback application launcher.
         Since banners are displayed only in the Leanback launcher, they should
         only be used with activities (and applications) that support Leanback
         mode. These are activities that handle Intents of category
         {@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER
         Intent.CATEGORY_LEANBACK_LAUNCHER}.
         <p>This must be a reference to a Drawable resource containing the image definition. -->
    <attr name="banner" format="reference" />

    <!-- A Drawable resource providing an extended graphical logo for its
         associated item. Use with the application tag (to supply a default
         logo for all application components), or with the activity, receiver,
         service, or instrumentation tag (to supply a specific logo for that
         component). It may also be used with the intent-filter tag to supply
         a logo to show to the user when an activity is being selected based
         on a particular Intent.

         <p>The given logo will be used to display to the user a graphical
         representation of its associated component; for example as the
         header in the Action Bar. The primary differences between an icon
         and a logo are that logos are often wider and more detailed, and are
         used without an accompanying text caption. This must be a reference
         to a Drawable resource containing the image definition. -->
    <attr name="logo" format="reference" />

    <!-- Name of the activity to be launched to manage application's space on
         device. The specified activity gets automatically launched when the
         application's space needs to be managed and is usually invoked 
         through user actions. Applications can thus provide their own custom
         behavior for managing space for various scenarios like out of memory
         conditions. This is an optional attribute and
         applications can choose not to specify a default activity to 
         manage space. -->
    <attr name="manageSpaceActivity" format="string" />

    <!-- Option to let applications specify that user data can/cannot be 
         cleared. This flag is turned on by default.
         <em>This attribute is usable only by applications
         included in the system image. Third-party apps cannot use it.</em> -->
    <attr name="allowClearUserData" format="boolean" />

    <!-- Option to let applications specify that user data should
         never be encrypted if an Encrypted File System solution
         is enabled. Specifically, this is an "opt-out" feature, meaning
         that, by default, user data will be encrypted if the EFS feature
         is enabled. -->
    <attr name="neverEncrypt" format="boolean" />

    <!-- Option to indicate this application is only for testing purposes.
         For example, it may expose functionality or data outside of itself
         that would cause a security hole, but is useful for testing.  This
         kind of application can not be installed without the
         INSTALL_ALLOW_TEST flag, which means only through adb install.  -->
    <attr name="testOnly" format="boolean" />
    
    <!-- A unique name for the given item.  This must use a Java-style naming
         convention to ensure the name is unique, for example
         "com.mycompany.MyName". -->  
    <attr name="name" format="string" />
    
    <!-- Specify a permission that a client is required to have in order to
    	 use the associated object.  If the client does not hold the named
    	 permission, its request will fail.  See the
         <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a>
         document for more information on permissions. -->
    <attr name="permission" format="string" />
    
    <!-- A specific {@link android.R.attr#permission} name for read-only
         access to a {@link android.content.ContentProvider}.  See the
         <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a>
         document for more information on permissions. -->
    <attr name="readPermission" format="string" />
    
    <!-- A specific {@link android.R.attr#permission} name for write
         access to a {@link android.content.ContentProvider}.  See the
         <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a>
         document for more information on permissions. -->
    <attr name="writePermission" format="string" />
    
    <!-- If true, the {@link android.content.Context#grantUriPermission
         Context.grantUriPermission} or corresponding Intent flags can
         be used to allow others to access specific URIs in the content
         provider, even if they do not have an explicit read or write
         permission.  If you are supporting this feature, you must be
         sure to call {@link android.content.Context#revokeUriPermission
         Context.revokeUriPermission} when URIs are deleted from your
         provider.-->
    <attr name="grantUriPermissions" format="boolean" />
    
    <!-- Characterizes the potential risk implied in a permission and
         indicates the procedure the system should follow when determining
         whether to grant the permission to an application requesting it. {@link
         android.Manifest.permission Standard permissions} have a predefined and
         permanent protectionLevel. If you are creating a custom permission in an
         application, you can define a protectionLevel attribute with one of the
         values listed below. If no protectionLevel is defined for a custom
         permission, the system assigns the default ("normal"). -->
    <attr name="protectionLevel">
        <!-- A lower-risk permission that gives an application access to isolated
             application-level features, with minimal risk to other applications,
             the system, or the user. The system automatically grants this type
             of permission to a requesting application at installation, without
             asking for the user's explicit approval (though the user always
             has the option to review these permissions before installing). -->
        <flag name="normal" value="0" />
        <!-- A higher-risk permission that would give a requesting application
             access to private user data or control over the device that can
             negatively impact the user.  Because this type of permission
             introduces potential risk, the system may not automatically
             grant it to the requesting application.  For example, any dangerous
             permissions requested by an application may be displayed to the
             user and require confirmation before proceeding, or some other
             approach may be taken to avoid the user automatically allowing
             the use of such facilities.  -->
        <flag name="dangerous" value="1" />
        <!-- A permission that the system is to grant only if the requesting
             application is signed with the same certificate as the application
             that declared the permission. If the certificates match, the system
             automatically grants the permission without notifying the user or
             asking for the user's explicit approval. -->
        <flag name="signature" value="2" />
        <!-- A permission that the system is to grant only to packages in the
             Android system image <em>or</em> that are signed with the same
             certificates. Please avoid using this option, as the
             signature protection level should be sufficient for most needs and
             works regardless of exactly where applications are installed.  This
             permission is used for certain special situations where multiple
             vendors have applications built in to a system image which need
             to share specific features explicitly because they are being built
             together. -->
        <flag name="signatureOrSystem" value="3" />
        <!-- Additional flag from base permission type: this permission can also
             be granted to any applications installed on the system image.
             Please avoid using this option, as the
             signature protection level should be sufficient for most needs and
             works regardless of exactly where applications are installed.  This
             permission flag is used for certain special situations where multiple
             vendors have applications built in to a system image which need
             to share specific features explicitly because they are being built
             together. -->
        <flag name="system" value="0x10" />
        <!-- Additional flag from base permission type: this permission can also
             (optionally) be granted to development applications. -->
        <flag name="development" value="0x20" />
        <!-- Additional flag from base permission type: this permission is closely
             associated with an app op for controlling access. -->
        <flag name="appop" value="0x40" />
    </attr>

    <!-- Flags indicating more context for a permission group. -->
    <attr name="permissionGroupFlags">
        <!-- Set to indicate that this permission group contains permissions
             protecting access to some information that is considered
             personal to the user (such as contacts, e-mails, etc). -->
        <flag name="personalInfo" value="0x0001" />
    </attr>

    <!-- Flags indicating more context for a permission. -->
    <attr name="permissionFlags">
        <!-- Set to indicate that this permission allows an operation that
             may cost the user money.  Such permissions may be highlighted
             when shown to the user with this additional information.  -->
        <flag name="costsMoney" value="0x0001" />
        <!-- Additional flag from base permission type: this permission is hidden
             and should not show in the UI. -->
        <flag name="hide" value="0x2" />
    </attr>

    <!-- Specified the name of a group that this permission is associated
         with.  The group must have been defined with the
         {@link android.R.styleable#AndroidManifestPermissionGroup permission-group} tag. -->
    <attr name="permissionGroup" format="string" />
    
    <!-- Specify the name of a user ID that will be shared between multiple
         packages.  By default, each package gets its own unique user-id.
         By setting this value on two or more packages, each of these packages
         will be given a single shared user ID, so they can for example run
         in the same process.  Note that for them to actually get the same
         user ID, they must also be signed with the same signature. -->
    <attr name="sharedUserId" format="string" />
    
    <!-- Specify a label for the shared user UID of this package.  This is
         only used if you have also used android:sharedUserId.  This must
         be a reference to a string resource; it can not be an explicit
         string. -->
    <attr name="sharedUserLabel" format="reference" />
    
    <!-- Internal version code.  This is the number used to determine whether
         one version is more recent than another: it has no other meaning than
         that higher numbers are more recent.  You could use this number to
         encode a "x.y" in the lower and upper 16 bits, make it a build
         number, simply increase it by one each time a new version is
         released, or define it however else you want, as long as each
         successive version has a higher number.  This is not a version
         number generally shown to the user, that is usually supplied 
         with {@link android.R.attr#versionName}.  When an app is delivered
         as multiple split APKs, each APK must have the exact same versionCode. -->
    <attr name="versionCode" format="integer" />

    <!-- Internal revision code.  This number is the number used to determine
         whether one APK is more recent than another: it has no other meaning
         than that higher numbers are more recent.  This value is only meaningful
         when the two {@link android.R.attr#versionCode} values are already
         identical.  When an app is delivered as multiple split APKs, each
         APK may have a different revisionCode value. -->
    <attr name="revisionCode" format="integer" />

    <!-- The text shown to the user to indicate the version they have.  This
         is used for no other purpose than display to the user; the actual
         significant version number is given by {@link android.R.attr#versionCode}. -->
    <attr name="versionName" format="string" />
    
    <!-- Flag to control special persistent mode of an application.  This should
         not normally be used by applications; it requires that the system keep
         your application running at all times. -->
    <attr name="persistent" format="boolean" />

    <!-- Flag to specify if this application needs to be present for all users. Only pre-installed
         applications can request this feature. Default value is false. -->
    <attr name="requiredForAllUsers" format="boolean" />

    <!-- Flag indicating whether the application can be debugged, even when
         running on a device that is running in user mode. -->
    <attr name="debuggable" format="boolean" />
    
    <!-- Flag indicating whether the application requests the VM to operate in
         the safe mode.  -->
    <attr name="vmSafeMode" format="boolean" />

    <!-- <p>Flag indicating whether the application's rendering should be hardware
         accelerated if possible. This flag is turned on by default for applications
         that are targeting {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}
         or later.</p>
         <p>This flag can be set on the application and any activity declared
         in the manifest. When enabled for the application, each activity is
         automatically assumed to be hardware accelerated. This flag can be
         overridden in the activity tags, either turning it off (if on for the
         application) or on (if off for the application.)</p>
         <p>When this flag is turned on for an activity (either directly or via
         the application tag), every window created from the activity, including
         the activity's own window, will be hardware accelerated, if possible.</p>
         <p>Please refer to the documentation of
         {@link android.view.WindowManager.LayoutParams#FLAG_HARDWARE_ACCELERATED}
         for more information on how to control this flag programmatically.</p> -->
    <attr name="hardwareAccelerated" format="boolean" />

    <!-- Flag indicating whether the given application component is available
         to other applications.  If false, it can only be accessed by
         applications with its same user id (which usually means only by
         code in its own package).  If true, it can be invoked by external
         entities, though which ones can do so may be controlled through
         permissions.  The default value is false for activity, receiver,
         and service components that do not specify any intent filters; it
         is true for activity, receiver, and service components that do
         have intent filters (implying they expect to be invoked by others
         who do not know their particular component name) and for all
         content providers. -->
    <attr name="exported" format="boolean" />

    <!-- A boolean flag used to indicate if an application is a Game or not.
         <p>This information can be used by the system to group together
         applications that are classified as games, and display them separately
         from the other applications. -->
    <attr name="isGame" format="boolean" />

    <!-- If set to true, a single instance of this component will run for
         all users.  That instance will run as user 0, the default/primary
         user.  When the app running is in processes for other users and interacts
         with this component (by binding to a service for example) those processes will
         always interact with the instance running for user 0.  Enabling
         single user mode forces "exported" of the component to be false, to
         help avoid introducing multi-user security bugs.  This feature is only
         available to applications built in to the system image; you must hold the
         permission INTERACT_ACROSS_USERS in order
         to use this feature.  This flag can only be used with services,
         receivers, and providers; it can not be used with activities. -->
    <attr name="singleUser" format="boolean" />

    <!-- Specify a specific process that the associated code is to run in.
         Use with the application tag (to supply a default process for all
         application components), or with the activity, receiver, service,
         or provider tag (to supply a specific icon for that component).
    
         <p>Application components are normally run in a single process that
         is created for the entire application.  You can use this tag to modify
         where they run.  If the process name begins with a ':' character,
         a new process private to that application will be created when needed
         to run that component (allowing you to spread your application across
         multiple processes).  If the process name begins with a lower-case
         character, the component will be run in a global process of that name,
         provided that you have permission to do so, allowing multiple
         applications to share one process to reduce resource usage. -->
    <attr name="process" format="string" />
    
    <!-- Specify a task name that activities have an "affinity" to.
         Use with the application tag (to supply a default affinity for all
         activities in the application), or with the activity tag (to supply
         a specific affinity for that component).
    
         <p>The default value for this attribute is the same as the package
         name, indicating that all activities in the manifest should generally
         be considered a single "application" to the user.  You can use this
         attribute to modify that behavior: either giving them an affinity
         for another task, if the activities are intended to be part of that
         task from the user's perspective, or using an empty string for
         activities that have no affinity to a task. -->
    <attr name="taskAffinity" format="string" />
    
    <!-- Specify that an activity can be moved out of a task it is in to
         the task it has an affinity for when appropriate.  Use with the
         application tag (to supply a default for all activities in the
         application), or with an activity tag (to supply a specific
         setting for that component).
    
         <p>Normally when an application is started, it is associated with
         the task of the activity that started it and stays there for its
         entire lifetime.  You can use the allowTaskReparenting feature to force an
         activity to be re-parented to a different task when the task it is
         in goes to the background.  Typically this is used to cause the
         activities of an application to move back to the main task associated
         with that application.  The activity is re-parented to the task
         with the same {@link android.R.attr#taskAffinity} as it has. -->
    <attr name="allowTaskReparenting" format="boolean" />

    <!-- Declare that this application may use cleartext traffic, such as HTTP rather than HTTPS;
         WebSockets rather than WebSockets Secure; XMPP, IMAP, STMP without STARTTLS or TLS.
         Defaults to true. If set to false {@code false}, the application declares that it does not
         intend to use cleartext network traffic, in which case platform components (e.g. HTTP
         stacks, {@code DownloadManager}, {@code MediaPlayer}) will refuse applications's requests
         to use cleartext traffic. Third-party libraries are encouraged to honor this flag as well.
         -->
    <attr name="usesCleartextTraffic" format="boolean" />

    <!-- Declare that code from this application will need to be loaded into other
         applications' processes. On devices that support multiple instruction sets,
         this implies the code might be loaded into a process that's using any of the devices
         supported instruction sets.
         
         <p> The system might treat such applications specially, for eg., by
         extracting the application's native libraries for all supported instruction
         sets or by compiling the application's dex code for all supported instruction
         sets. -->
    <attr name="multiArch" format ="boolean" />
    
    <!-- Specify whether a component is allowed to have multiple instances
         of itself running in different processes.  Use with the activity
         and provider tags.
    
         <p>Normally the system will ensure that all instances of a particular
         component are only running in a single process.  You can use this
         attribute to disable that behavior, allowing the system to create
         instances wherever they are used (provided permissions allow it).
         This is most often used with content providers, so that instances
         of a provider can be created in each client process, allowing them
         to be used without performing IPC.  -->
    <attr name="multiprocess" format="boolean" />
    
    <!-- Specify whether an activity should be finished when its task is
         brought to the foreground by relaunching from the home screen.
         
         <p>If both this option and {@link android.R.attr#allowTaskReparenting} are
         specified, the finish trumps the affinity: the affinity will be
         ignored and the activity simply finished. -->
    <attr name="finishOnTaskLaunch" format="boolean" />
    
    <!-- Specify whether an activity should be finished when a "close system
         windows" request has been made.  This happens, for example, when
         the home key is pressed, when the device is locked, when a system
         dialog showing recent applications is displayed, etc. -->
    <attr name="finishOnCloseSystemDialogs" format="boolean" />
    
    <!-- Specify whether an activity's task should be cleared when it
         is re-launched from the home screen.  As a result, every time the
         user starts the task, they will be brought to its root activity,
         regardless of whether they used BACK or HOME to last leave it.
         This flag only applies to activities that
         are used to start the root of a new task.
         
         <p>An example of the use of this flag would be for the case where
         a user launches activity A from home, and from there goes to
         activity B.  They now press home, and then return to activity A.
         Normally they would see activity B, since that is what they were
         last doing in A's task.  However, if A has set this flag to true,
         then upon going to the background all of the tasks on top of it (B
         in this case) are removed, so when the user next returns to A they
         will restart at its original activity.
         
         <p>When this option is used in conjunction with
         {@link android.R.attr#allowTaskReparenting}, the allowTaskReparenting trumps the
         clear.  That is, all activities above the root activity of the
         task will be removed: those that have an affinity will be moved
         to the task they are associated with, otherwise they will simply
         be dropped as described here. -->
    <attr name="clearTaskOnLaunch" format="boolean" />
    
    <!-- Specify whether an activity should be kept in its history stack.
         If this attribute is set, then as soon as the user navigates away
         from the activity it will be finished and they will no longer be
         able to return to it. -->
    <attr name="noHistory" format="boolean" />
    
    <!-- Specify whether an acitivty's task state should always be maintained
         by the system, or if it is allowed to reset the task to its initial
         state in certain situations.
         
         <p>Normally the system will reset a task (remove all activities from
         the stack and reset the root activity) in certain situations when
         the user re-selects that task from the home screen.  Typically this
         will be done if the user hasn't visited that task for a certain
         amount of time, such as 30 minutes.
         
         <p>By setting this attribute, the user will always return to your
         task in its last state, regardless of how they get there.  This is
         useful, for example, in an application like the web browser where there
         is a lot of state (such as multiple open tabs) that the application
         would not like to lose. -->
    <attr name="alwaysRetainTaskState" format="boolean" />
    
    <!-- Indicates that an Activity does not need to have its freeze state
         (as returned by {@link android.app.Activity#onSaveInstanceState}
         retained in order to be restarted.  Generally you use this for activities
         that do not store any state.  When this flag is set, if for some reason
         the activity is killed before it has a chance to save its state,
         then the system will not remove it from the activity stack like
         it normally would.  Instead, the next time the user navigates to
         it its {@link android.app.Activity#onCreate} method will be called
         with a null icicle, just like it was starting for the first time.
         
         <p>This is used by the Home activity to make sure it does not get
         removed if it crashes for some reason. -->
    <attr name="stateNotNeeded" format="boolean" />

    <!-- Indicates that an Activity should be excluded from the list of
         recently launched activities. -->
    <attr name="excludeFromRecents" format="boolean" />

    <!-- Specify that an Activity should be shown over the lock screen and,
         in a multiuser environment, across all users' windows.
         @deprecated use {@link android.R.attr#showForAllUsers} instead. -->
    <attr name="showOnLockScreen" format="boolean" />

    <!-- Specify that an Activity should be shown even if the current/foreground user
         is different from the user of the Activity. This will also force the
         <code>android.view.LayoutParams.FLAG_SHOW_WHEN_LOCKED</code> flag
         to be set for all windows of this activity -->
    <attr name="showForAllUsers" format="boolean" />

    <!-- Specify the authorities under which this content provider can be
         found.  Multiple authorities may be supplied by separating them
         with a semicolon.  Authority names should use a Java-style naming
         convention (such as <code>com.google.provider.MyProvider</code>)
         in order to avoid conflicts.  Typically this name is the same
         as the class implementation describing the provider's data structure. -->
    <attr name="authorities" format="string" />
    
    <!-- Flag indicating whether this content provider would like to
         participate in data synchronization. -->
    <attr name="syncable" format="boolean" />
    
    <!-- Flag declaring this activity to be 'immersive'; immersive activities
         should not be interrupted with other activities or notifications. -->
    <attr name="immersive" format="boolean" />

    <!-- Specify the order in which content providers hosted by a process
         are instantiated when that process is created.  Not needed unless
         you have providers with dependencies between each other, to make
         sure that they are created in the order needed by those dependencies.
         The value is a simple integer, with higher numbers being
         initialized first. -->
    <attr name="initOrder" format="integer" />
    
    <!-- Specify the relative importance or ability in handling a particular
         Intent.  For receivers, this controls the order in which they are
         executed to receive a broadcast (note that for
         asynchronous broadcasts, this order is ignored).  For activities,
         this provides information about how good an activity is handling an
         Intent; when multiple activities match an intent and have different
         priorities, only those with the higher priority value will be
         considered a match.
         
         <p>Only use if you really need to impose some specific
         order in which the broadcasts are received, or want to forcibly
         place an activity to always be preferred over others.  The value is a
         single integer, with higher numbers considered to be better. -->
    <attr name="priority" format="integer" />
    
    <!-- Specify how an activity should be launched.  See the
         <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back
         Stack</a> document for important information on how these options impact
         the behavior of your application.
         
         <p>If this attribute is not specified, <code>standard</code> launch
         mode will be used.  Note that the particular launch behavior can
         be changed in some ways at runtime through the
         {@link android.content.Intent} flags
         {@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP},
         {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}, and
         {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}. -->
    <attr name="launchMode">
        <!-- The default mode, which will usually create a new instance of
             the activity when it is started, though this behavior may change
             with the introduction of other options such as
             {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK
             Intent.FLAG_ACTIVITY_NEW_TASK}. -->
        <enum name="standard" value="0" />
        <!-- If, when starting the activity, there is already an
            instance of the same activity class in the foreground that is
            interacting with the user, then
            re-use that instance.  This existing instance will receive a call to
            {@link android.app.Activity#onNewIntent Activity.onNewIntent()} with
            the new Intent that is being started. -->
        <enum name="singleTop" value="1" />
        <!-- If, when starting the activity, there is already a task running
            that starts with this activity, then instead of starting a new
            instance the current task is brought to the front.  The existing
            instance will receive a call to {@link android.app.Activity#onNewIntent
            Activity.onNewIntent()}
            with the new Intent that is being started, and with the
            {@link android.content.Intent#FLAG_ACTIVITY_BROUGHT_TO_FRONT
            Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT} flag set.  This is a superset
            of the singleTop mode, where if there is already an instance
            of the activity being started at the top of the stack, it will
            receive the Intent as described there (without the
            FLAG_ACTIVITY_BROUGHT_TO_FRONT flag set).  See the
            <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back
            Stack</a> document for more details about tasks.-->
        <enum name="singleTask" value="2" />
        <!-- Only allow one instance of this activity to ever be 
            running.  This activity gets a unique task with only itself running 
            in it; if it is ever launched again with the same Intent, then that 
            task will be brought forward and its 
            {@link android.app.Activity#onNewIntent Activity.onNewIntent()}
            method called.  If this 
            activity tries to start a new activity, that new activity will be 
            launched in a separate task.  See the
            <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back
            Stack</a> document for more details about tasks.-->
        <enum name="singleInstance" value="3" />
    </attr>
    
    <!-- Specify the orientation an activity should be run in.  If not
         specified, it will run in the current preferred orientation
         of the screen.
         <p>This attribute is supported by the <a
            href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity>}</a>
            element. -->
    <attr name="screenOrientation">
        <!-- No preference specified: let the system decide the best
             orientation.  This will either be the orientation selected
             by the activity below, or the user's preferred orientation
             if this activity is the bottom of a task. If the user
             explicitly turned off sensor based orientation through settings
             sensor based device rotation will be ignored. If not by default
             sensor based orientation will be taken into account and the 
             orientation will changed based on how the user rotates the device.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_UNSPECIFIED}. -->
        <enum name="unspecified" value="-1" />
        <!-- Would like to have the screen in a landscape orientation: that
             is, with the display wider than it is tall, ignoring sensor data.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}. -->
        <enum name="landscape" value="0" />
        <!-- Would like to have the screen in a portrait orientation: that
             is, with the display taller than it is wide, ignoring sensor data.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_PORTRAIT}. -->
        <enum name="portrait" value="1" />
        <!-- Use the user's current preferred orientation of the handset.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_USER}. -->
        <enum name="user" value="2" />
        <!-- Keep the screen in the same orientation as whatever is behind
             this activity.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_BEHIND}. -->
        <enum name="behind" value="3" />
        <!-- Orientation is determined by a physical orientation sensor:
             the display will rotate based on how the user moves the device.
             Ignores user's setting to turn off sensor-based rotation.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR}. -->
        <enum name="sensor" value="4" />
        <!-- Always ignore orientation determined by orientation sensor:
             the display will not rotate when the user moves the device.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_NOSENSOR}. -->
        <enum name="nosensor" value="5" />
        <!-- Would like to have the screen in landscape orientation, but can
             use the sensor to change which direction the screen is facing.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR_LANDSCAPE}. -->
        <enum name="sensorLandscape" value="6" />
        <!-- Would like to have the screen in portrait orientation, but can
             use the sensor to change which direction the screen is facing.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR_PORTRAIT}. -->
        <enum name="sensorPortrait" value="7" />
        <!-- Would like to have the screen in landscape orientation, turned in
             the opposite direction from normal landscape.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_REVERSE_LANDSCAPE}. -->
        <enum name="reverseLandscape" value="8" />
        <!-- Would like to have the screen in portrait orientation, turned in
             the opposite direction from normal portrait.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_REVERSE_PORTRAIT}. -->
        <enum name="reversePortrait" value="9" />
        <!-- Orientation is determined by a physical orientation sensor:
             the display will rotate based on how the user moves the device.
             This allows any of the 4 possible rotations, regardless of what
             the device will normally do (for example some devices won't
             normally use 180 degree rotation).
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_FULL_SENSOR}. -->
        <enum name="fullSensor" value="10" />
        <!-- Would like to have the screen in landscape orientation, but if
             the user has enabled sensor-based rotation then we can use the
             sensor to change which direction the screen is facing.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_USER_LANDSCAPE}. -->
        <enum name="userLandscape" value="11" />
        <!-- Would like to have the screen in portrait orientation, but if
             the user has enabled sensor-based rotation then we can use the
             sensor to change which direction the screen is facing.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_USER_PORTRAIT}. -->
        <enum name="userPortrait" value="12" />
        <!-- Respect the user's sensor-based rotation preference, but if
             sensor-based rotation is enabled then allow the screen to rotate
             in all 4 possible directions regardless of what
             the device will normally do (for example some devices won't
             normally use 180 degree rotation).
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_FULL_USER}. -->
        <enum name="fullUser" value="13" />
        <!-- Screen is locked to its current rotation, whatever that is.
             Corresponds to
             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LOCKED}. -->
        <enum name="locked" value="14" />
    </attr>
    
    <!-- Specify one or more configuration changes that the activity will
         handle itself.  If not specified, the activity will be restarted
         if any of these configuration changes happen in the system.  Otherwise,
         the activity will remain running and its
         {@link android.app.Activity#onConfigurationChanged Activity.onConfigurationChanged}
         method called with the new configuration.
         
         <p>Note that all of these configuration changes can impact the
         resource values seen by the application, so you will generally need
         to re-retrieve all resources (including view layouts, drawables, etc)
         to correctly handle any configuration change.
         
         <p>These values must be kept in sync with those in
         {@link android.content.pm.ActivityInfo} and
         include/utils/ResourceTypes.h. -->
    <attr name="configChanges">
        <!-- The IMSI MCC has changed, that is a SIM has been detected and
             updated the Mobile Country Code. -->
        <flag name="mcc" value="0x0001" />
        <!-- The IMSI MNC has changed, that is a SIM has been detected and
             updated the Mobile Network Code. -->
        <flag name="mnc" value="0x0002" />
        <!-- The locale has changed, that is the user has selected a new
             language that text should be displayed in. -->
        <flag name="locale" value="0x0004" />
        <!-- The touchscreen has changed.  Should never normally happen. -->
        <flag name="touchscreen" value="0x0008" />
        <!-- The keyboard type has changed, for example the user has plugged
             in an external keyboard. -->
        <flag name="keyboard" value="0x0010" />
        <!-- The keyboard or navigation accessibility has changed, for example
             the user has slid the keyboard out to expose it.  Note that
             despite its name, this applied to any accessibility: keyboard
             or navigation. -->
        <flag name="keyboardHidden" value="0x0020" />
        <!-- The navigation type has changed.  Should never normally happen. -->
        <flag name="navigation" value="0x0040" />
        <!-- The screen orientation has changed, that is the user has
             rotated the device. -->
        <flag name="orientation" value="0x0080" />
        <!-- The screen layout has changed.  This might be caused by a
             different display being activated. -->
        <flag name="screenLayout" value="0x0100" />
        <!-- The global user interface mode has changed.  For example,
             going in or out of car mode, night mode changing, etc. -->
        <flag name="uiMode" value="0x0200" />
        <!-- The current available screen size has changed.  If applications don't
             target at least {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}
             then the activity will always handle this itself (the change
             will not result in a restart).  This represents a change in the
             currently available size, so will change when the user switches
             between landscape and portrait. -->
        <flag name="screenSize" value="0x0400" />
        <!-- The physical screen size has changed.  If applications don't
             target at least {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}
             then the activity will always handle this itself (the change
             will not result in a restart).  This represents a change in size
             regardless of orientation, so will only change when the actual
             physical screen size has changed such as switching to an external
             display. -->
        <flag name="smallestScreenSize" value="0x0800" />
        <!-- The layout direction has changed. For example going from LTR to RTL. -->
        <flag name="layoutDirection" value="0x2000" />
        <!-- The font scaling factor has changed, that is the user has
             selected a new global font size. -->
        <flag name="fontScale" value="0x40000000" />
    </attr>

    <!-- Indicate that the activity can be launched as the embedded child of another
         activity. Particularly in the case where the child lives in a container
         such as a Display owned by another activity.

         <p>The default value of this attribute is <code>false</code>. -->
    <attr name="allowEmbedded" format="boolean" />

    <!-- Descriptive text for the associated data. -->
    <attr name="description" format="reference" />
    
    <!-- The name of the application package that an Instrumentation object
         will run against. -->
    <attr name="targetPackage" format="string" />
    
    <!-- Flag indicating that an Instrumentation class wants to take care
         of starting/stopping profiling itself, rather than relying on
         the default behavior of profiling the complete time it is running.
         This allows it to target profiling data at a specific set of
         operations. -->
    <attr name="handleProfiling" format="boolean" />
    
    <!-- Flag indicating that an Instrumentation class should be run as a
         functional test. -->
    <attr name="functionalTest" format="boolean" />

    <!-- The touch screen type used by an application. -->
    <attr name="reqTouchScreen">
        <enum name="undefined" value="0" />
        <enum name="notouch" value="1" />
        <enum name="stylus" value="2" />
        <enum name="finger" value="3" />
    </attr>

    <!-- The input method preferred by an application. -->
    <attr name="reqKeyboardType">
        <enum name="undefined" value="0" />
        <enum name="nokeys" value="1" />
        <enum name="qwerty" value="2" />
        <enum name="twelvekey" value="3" />
    </attr>

    <!-- Application's requirement for a hard keyboard -->
    <attr name="reqHardKeyboard" format="boolean" />

    <!-- The navigation device preferred by an application. -->
    <attr name="reqNavigation">
        <enum name="undefined" value="0" />
        <enum name="nonav" value="1" />
        <enum name="dpad" value="2" />
        <enum name="trackball" value="3" />
        <enum name="wheel" value="4" />
    </attr>

    <!-- Application's requirement for five way navigation -->
    <attr name="reqFiveWayNav" format="boolean" />

    <!-- The name of the class subclassing <code>BackupAgent</code> to manage
         backup and restore of the application's data on external storage. -->
    <attr name="backupAgent" format="string" />

    <!-- Whether to allow the application to participate in the backup
         and restore infrastructure.  If this attribute is set to <code>false</code>,
         no backup or restore of the application will ever be performed, even by a
         full-system backup that would otherwise cause all application data to be saved
         via adb.  The default value of this attribute is <code>true</code>. -->
    <attr name="allowBackup" format="boolean" />

    <!-- Applications will set this in their manifest to opt-in to or out of full app data back-up
         and restore. Alternatively they can set it to an xml resource within their app that will
         be parsed by the BackupAgent to selectively backup files indicated within that xml. -->
    <attr name="fullBackupContent" format="reference|boolean" />

    <!-- Indicates that even though the application provides a <code>BackupAgent</code>,
         only full-data streaming backup operations are to be performed to save the app's
         data.  This lets the app rely on full-data backups while still participating in
         the backup and restore process via the BackupAgent's full-data backup APIs.
         When this attribute is <code>true</code> the app's BackupAgent overrides of
         the onBackup() and onRestore() callbacks can be empty stubs. -->
    <attr name="fullBackupOnly" format="boolean" />

    <!-- Whether the application in question should be terminated after its
         settings have been restored during a full-system restore operation.
         Single-package restore operations will never cause the application to
         be shut down.  Full-system restore operations typically only occur once,
         when the phone is first set up.  Third-party applications will not usually
         need to use this attribute.

         <p>The default is <code>true</code>, which means that after the application
         has finished processing its data during a full-system restore, it will be
         terminated. -->
    <attr name="killAfterRestore" format="boolean" />

    <!-- @deprecated This attribute is not used by the Android operating system. -->
    <attr name="restoreNeedsApplication" format="boolean" />

    <!-- Indicate that the application is prepared to attempt a restore of any
         backed-up dataset, even if the backup is apparently from a newer version
         of the application than is currently installed on the device.  Setting
         this attribute to <code>true</code> will permit the Backup Manager to
         attempt restore even when a version mismatch suggests that the data are
         incompatible.  <em>Use with caution!</em>

         <p>The default value of this attribute is <code>false</code>. -->
    <attr name="restoreAnyVersion" format="boolean" />

    <!-- The default install location defined by an application. -->
    <attr name="installLocation">
        <!-- Let the system decide ideal install location -->
        <enum name="auto" value="0" />
        <!-- Explicitly request to be installed on internal phone storage
             only. -->
        <enum name="internalOnly" value="1" />
        <!-- Prefer to be installed on SD card. There is no guarantee that
             the system will honor this request. The application might end
             up being installed on internal storage if external media
             is unavailable or too full. -->
        <enum name="preferExternal" value="2" />
    </attr>

    <!-- Extra options for an activity's UI. Applies to either the {@code &lt;activity&gt;} or
         {@code &lt;application&gt;} tag. If specified on the {@code &lt;application&gt;}
         tag these will be considered defaults for all activities in the
         application. -->
    <attr name="uiOptions">
        <!-- No extra UI options. This is the default. -->
        <flag name="none" value="0" />
        <!-- Split the options menu into a separate bar at the bottom of
             the screen when severely constrained for horizontal space.
             (e.g. portrait mode on a phone.) Instead of a small number
             of action buttons appearing in the action bar at the top
             of the screen, the action bar will split into the top navigation
             section and the bottom menu section. Menu items will not be
             split across the two bars; they will always appear together. -->
        <flag name="splitActionBarWhenNarrow" value="1" />
    </attr>

    <!-- The name of the logical parent of the activity as it appears in the manifest. -->
    <attr name="parentActivityName" format="string" />

    <!-- Define how an activity persist across reboots. Activities defined as "never" will not
         be persisted. Those defined as "always" will be persisted. Those defined as "taskOnly"
         will persist the root activity of the task only. See below for more detail as to
         what gets persisted. -->
    <attr name="persistableMode">
        <!-- The default. If this activity forms the root of a task then that task will be
             persisted across reboots but only the launching intent will be used. If the task
             relinquishes its identity then the intent used is that of the topmost inherited
             identity. All activities above this activity in the task will not be persisted.
             In addition this activity will not be passed a PersistableBundle into which it
             could have stored its state. -->
        <enum name="persistRootOnly" value="0" />
        <!-- If this activity forms the root of a task then that task will not be persisted
             across reboots -->
        <enum name="persistNever" value="1" />
        <!-- If this activity forms the root of a task then the task and this activity will
             be persisted across reboots. If the activity above this activity is also
             tagged with the attribute <code>"persist"</code> then it will be persisted as well.
             And so on up the task stack until either an activity without the
             <code>persistableMode="persistAcrossReboots"</code> attribute or one that was launched
             with the flag Intent.FLAG_CLEAR_TASK_WHEN_RESET is encountered.

             <p>Activities that are declared with the persistAcrossReboots attribute will be
             provided with a PersistableBundle in onSavedInstanceState(), These activities may
             use this PeristableBundle to save their state. Then, following a reboot, that
             PersistableBundle will be provided back to the activity in its onCreate() method. -->
        <enum name="persistAcrossReboots" value="2" />
    </attr>

    <!-- This attribute specifies that an activity shall become the root activity of a
         new task each time it is launched. Using this attribute permits the user to
         have multiple documents from the same applications appear in the recent tasks list.

         <p>Such a document is any kind of item for which an application may want to
         maintain multiple simultaneous instances. Examples might be text files, web
         pages, spreadsheets, or emails. Each such document will be in a separate
         task in the recent taskss list.

         <p>This attribute is equivalent to adding the flag {@link
         android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} to every Intent used to launch
         the activity.

         <p>The documentLaunchMode attribute may be assigned one of four values, "none",
         "intoExisting", "always" and "never", described in detail below. For values other than
         <code>none</code> and <code>never</code> the activity must be defined with
         {@link android.R.attr#launchMode} <code>standard</code>.
         If this attribute is not specified, <code>none</code> will be used.
         Note that <code>none</code> can be overridden at run time if the Intent used
         to launch it contains the flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT
         Intent.FLAG_ACTIVITY_NEW_DOCUMENT}.
         Similarly <code>intoExisting</code> will be overridden by the flag
         {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT
         Intent.FLAG_ACTIVITY_NEW_DOCUMENT} combined with
         {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK
         Intent.FLAG_ACTIVITY_MULTIPLE_TASK}. If the value of
         documentLaunchModes is <code>never</code> then any use of
         {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT
         Intent.FLAG_ACTIVITY_NEW_DOCUMENT} to launch this activity will be ignored. -->
    <attr name="documentLaunchMode">
        <!-- The default mode, which will create a new task only when
             {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK
             Intent.FLAG_ACTIVITY_NEW_TASK} is set. -->
        <enum name="none" value="0" />
        <!-- All tasks will be searched for one whose base Intent's ComponentName and
             data URI match those of the launching Intent. If such a task is found
             that task will be cleared and restarted with the root activity receiving a call
             to {@link android.app.Activity#onNewIntent Activity.onNewIntent}. If no
             such task is found a new task will be created.
             <p>This is the equivalent of launching an activity with {@link
             android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT Intent.FLAG_ACTIVITY_NEW_DOCUMENT}
             set and without {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK
             Intent.FLAG_ACTIVITY_MULTIPLE_TASK} set. -->
        <enum name="intoExisting" value="1" />
        <!-- A new task rooted at this activity will be created. This will happen whether or
             not there is an existing task whose ComponentName and data URI match
             that of the launcing intent This is the equivalent of launching an activity
             with {@link
             android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT Intent.FLAG_ACTIVITY_NEW_DOCUMENT}
             and {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK
             Intent.FLAG_ACTIVITY_MULTIPLE_TASK} both set. -->
        <enum name="always" value="2" />
        <!-- This activity will not be launched into a new document even if the Intent contains
             {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT
             Intent.FLAG_ACTIVITY_NEW_DOCUMENT}. This gives the activity writer ultimate
             control over how their activity is used. Note that applications prior to api
             21 will default to documentLaunchMode="none" so only activities that explicitly
             opt out with <code>"never"</code> may do so. -->
        <enum name="never" value="3" />
    </attr>

    <!-- The maximum number of entries of tasks rooted at this activity in the recent task list.
         When this number of entries is reached the least recently used instance of this activity
         will be removed from recents. The value will be clamped between 1 and 100 inclusive.
         The default value for this if it is not specified is 15. -->
    <attr name="maxRecents" format="integer" />

    <!-- Tasks launched by activities with this attribute will remain in the recent tasks
         list until the last activity in the task is completed.  When that happens the task
         will be automatically removed from the recent tasks list.  This overrides the caller's
         use of {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS
         Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS} -->
    <attr name="autoRemoveFromRecents" format="boolean" />

    <!-- Tasks whose root has this attribute set to true will replace baseIntent with that of the
         next activity in the task. If the next activity also has this attribute set to true then
         it will yield the baseIntent to any activity that it launches in the same task. This
         continues until an activity is encountered which has this attribute set to false. False
         is the default. This attribute set to true also permits activity's use of the
         TaskDescription to change labels, colors and icons in the recent task list. -->
    <attr name="relinquishTaskIdentity" format="boolean" />

    <!-- Indicate that it is okay for this activity be resumed while the previous
         activity is in the process of pausing, without waiting for the previous pause
         to complete.  Use this with caution: your activity can not acquire any exclusive
         resources (such as opening the camera or recording audio) when it launches, or it
         may conflict with the previous activity and fail.

         <p>The default value of this attribute is <code>false</code>. -->
    <attr name="resumeWhilePausing" format="boolean" />

    <!-- Indicates that it is okay for this activity to be resized to any dimension. Intended for a
         multi-window device where there can be multiple activities of various sizes on the screen
         at the same time.

         <p>The default value is <code>false</code> for applications with
         <code>targetSdkVersion</code> lesser than {@link android.os.Build.VERSION_CODES#MNC} and
         <code>true</code> otherwise.

         <p>NOTE: A task's root activity value is applied to all additional activities launched in
         the task. That is if the root activity of a task is resizeable then the system will treat
         all other activities in the task as resizeable and will not if the root activity isn't
         resizeable.

         <p>NOTE: The value of {@link android.R.attr#screenOrientation} will be ignored for
         resizeable activities as the system doesn't support fixed orientation on a resizeable
         activity.
         @hide -->
    <attr name="resizeableActivity" format="boolean" />

    <!-- This value indicates how tasks rooted at this activity will behave in lockTask mode.
         While in lockTask mode the system will not launch non-permitted tasks until
         lockTask mode is disabled.
         <p>While in lockTask mode with multiple permitted tasks running, each launched task is
         permitted to finish, transitioning to the previous locked task, until there is only one
         task remaining. At that point the last task running is not permitted to finish, unless it
         uses the value always. -->
    <attr name="lockTaskMode">
        <!-- This is the default value. Tasks will not launch into lockTask mode but can be
             placed there by calling {@link android.app.Activity#startLockTask}. If a task with
             this mode has been whitelisted using {@link
             android.app.admin.DevicePolicyManager#setLockTaskPackages} then calling
             {@link android.app.Activity#startLockTask} will enter lockTask mode immediately,
             otherwise the user will be presented with a dialog to approve entering pinned mode.
             <p>If the system is already in lockTask mode when a new task rooted at this activity
             is launched that task will or will not start depending on whether the package of this
             activity has been whitelisted.
             <p>Tasks rooted at this activity can only exit lockTask mode using
             {@link android.app.Activity#stopLockTask}. -->
        <enum name="normal" value="0"/>
        <!-- Tasks will not launch into lockTask mode and cannot be placed there using
             {@link android.app.Activity#startLockTask} or be pinned from the Overview screen.
             If the system is already in lockTask mode when a new task rooted at this activity is
             launched that task will not be started.
             <p>Note: This mode is only available to system and privileged applications.
             Non-privileged apps with this value will be treated as normal.
             -->
        <enum name="never" value="1"/>
        <!-- Tasks rooted at this activity will always launch into lockTask mode. If the system is
             already in lockTask mode when this task is launched then the new task will be launched
             on top of the current task. Tasks launched in this mode are capable of exiting
             lockTask mode using {@link android.app.Activity#finish()}.
             <p>Note: This mode is only available to system and privileged applications.
             Non-privileged apps with this value will be treated as normal.
             -->
        <enum name="always" value="2"/>
        <!-- If the DevicePolicyManager (DPM) authorizes this package ({@link
             android.app.admin.DevicePolicyManager#setLockTaskPackages}) then this mode is
             identical to always, except that the activity needs to call
             {@link android.app.Activity#stopLockTask} before being able to finish if it is the last
             locked task.
             If the DPM does not authorize this package then this mode is identical to normal. -->
        <enum name="if_whitelisted" value="3"/>
    </attr>
    <!-- When set installer will extract native libraries. If set to false
         libraries in the apk must be stored and page-aligned.  -->
    <attr name="extractNativeLibs" format="boolean"/>

    <!-- Specify whether an activity intent filter will need to be verified thru its set
         of data URIs. This will only be used when the Intent's action is set to
         {@link android.content.Intent#ACTION_VIEW Intent.ACTION_VIEW} and the Intent's category is
         set to {@link android.content.Intent#CATEGORY_BROWSABLE Intent.CATEGORY_BROWSABLE} and the
         intern filter data scheme is set to "http" or "https". When set to true, the intent filter
         will need to use its data tag for getting the URIs to verify with.

         For each URI, an HTTPS network request will be done to <code>/.well-known/statements.json</code>
         host to verify that the web site is okay with the app intercepting the URI.
         -->
    <attr name="autoVerify" format="boolean" />

    <!-- The <code>manifest</code> tag is the root of an
         <code>AndroidManifest.xml</code> file,
         describing the contents of an Android package (.apk) file.  One
         attribute must always be supplied: <code>package</code> gives a
         unique name for the package, using a Java-style naming convention
         to avoid name collisions.  For example, applications published
         by Google could have names of the form
         <code>com.google.app.<em>appname</em></code>

         <p>Inside of the manifest tag, may appear the following tags
         in any order: {@link #AndroidManifestPermission permission},
         {@link #AndroidManifestPermissionGroup permission-group},
         {@link #AndroidManifestPermissionTree permission-tree},
         {@link #AndroidManifestUsesSdk uses-sdk},
         {@link #AndroidManifestUsesPermission uses-permission},
         {@link #AndroidManifestUsesConfiguration uses-configuration},
         {@link #AndroidManifestApplication application},
         {@link #AndroidManifestInstrumentation instrumentation},
         {@link #AndroidManifestUsesFeature uses-feature}.  -->
    <declare-styleable name="AndroidManifest">
        <attr name="versionCode" />
        <attr name="versionName" />
        <attr name="revisionCode" />
        <attr name="sharedUserId" />
        <attr name="sharedUserLabel" />
        <attr name="installLocation" />
    </declare-styleable>

    <!-- The <code>application</code> tag describes application-level components
         contained in the package, as well as general application
         attributes.  Many of the attributes you can supply here (such
         as theme, label, icon, permission, process, taskAffinity,
         and allowTaskReparenting) serve
         as default values for the corresponding attributes of components
         declared inside of the application.

         <p>Inside of this element you specify what the application contains,
         using the elements {@link #AndroidManifestProvider provider},
         {@link #AndroidManifestService service},
         {@link #AndroidManifestReceiver receiver},
         {@link #AndroidManifestActivity activity},
         {@link #AndroidManifestActivityAlias activity-alias}, and
         {@link #AndroidManifestUsesLibrary uses-library}.  The application tag
         appears as a child of the root {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestApplication" parent="AndroidManifest">
        <!-- An optional name of a class implementing the overall
             {@link android.app.Application} for this package.  When the
             process for your package is started, this class is instantiated
             before any of the other application components.  Note that this
             is not required, and in fact most applications will probably
             not need it. -->
        <attr name="name" />
        <attr name="theme" />
        <attr name="label" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
        <attr name="description" />
        <attr name="permission" />
        <attr name="process" />
        <attr name="taskAffinity" />
        <attr name="allowTaskReparenting" />
        <!-- Indicate whether this application contains code.  If set to false,
             there is no code associated with it and thus the system will not
             try to load its code when launching components.  The default is true
             for normal behavior. -->
        <attr name="hasCode" format="boolean" />
        <attr name="persistent" />
        <attr name="requiredForAllUsers" />
        <!-- Specify whether the components in this application are enabled or not (that is, can be
             instantiated by the system).
             If "false", it overrides any component specific values (a value of "true" will not
             override the component specific values). -->
        <attr name="enabled" />
        <attr name="debuggable" />
        <attr name="vmSafeMode" />
        <attr name="hardwareAccelerated" />
        <!-- Name of activity to be launched for managing the application's space on the device. -->
        <attr name="manageSpaceActivity" />
        <attr name="allowClearUserData" />
        <attr name="testOnly" />
        <attr name="backupAgent" />
        <attr name="allowBackup" />
        <attr name="fullBackupOnly" />
        <attr name="fullBackupContent" />
        <attr name="killAfterRestore" />
        <attr name="restoreNeedsApplication" />
        <attr name="restoreAnyVersion" />
        <attr name="neverEncrypt" />
        <!-- Request that your application's processes be created with
             a large Dalvik heap.  This applies to <em>all</em> processes
             created for the application.  It only applies to the first
             application loaded into a process; if using a sharedUserId
             to allow multiple applications to use a process, they all must
             use this option consistently or will get unpredictable results. -->
        <attr name="largeHeap" format="boolean" />
        <!-- Declare that this application can't participate in the normal
             state save/restore mechanism.  Since it is not able to save and
             restore its state on demand,
             it can not participate in the normal activity lifecycle.  It will
             not be killed while in the background; the user must explicitly
             quit it.  Only one such app can be running at a time; if the user
             tries to launch a second such app, they will be prompted
             to quit the first before doing so.  While the
             application is running, the user will be informed of this.
             @hide -->
        <attr name="cantSaveState" format="boolean" />
        <attr name="uiOptions" />
        <!-- Declare that your application will be able to deal with RTL (right to left) layouts.
             If set to  false (default value), your application will not care about RTL layouts. -->
        <attr name="supportsRtl" format="boolean" />
        <!-- Declare that this application requires access to restricted accounts of a certain
             type. The default value is null and restricted accounts won\'t be visible to this
             application. The type should correspond to the account authenticator type, such as
             "com.google". -->
        <attr name="restrictedAccountType" format="string"/>
        <!-- Declare that this application requires an account of a certain
             type. The default value is null and indicates that the application can work without
             any accounts. The type should correspond to the account authenticator type, such as
             "com.google". -->
        <attr name="requiredAccountType" format="string"/>
        <attr name="isGame" />
        <!-- Declare that this application may use cleartext traffic, such as HTTP rather than
             HTTPS; WebSockets rather than WebSockets Secure; XMPP, IMAP, STMP without STARTTLS or
             TLS). Defaults to true. If set to false {@code false}, the application declares that it
             does not intend to use cleartext network traffic, in which case platform components
             (e.g. HTTP stacks, {@code DownloadManager}, {@code MediaPlayer}) will refuse
             applications's requests to use cleartext traffic. Third-party libraries are encouraged
             to honor this flag as well. -->
        <attr name="usesCleartextTraffic" />
        <attr name="multiArch" />
        <attr name="extractNativeLibs" />
    </declare-styleable>
    <!-- The <code>permission</code> tag declares a security permission that can be
         used to control access from other packages to specific components or
         features in your package (or other packages).  See the
         <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a>
         document for more information on permissions.
         
         <p>This appears as a child tag of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestPermission" parent="AndroidManifest">
        <!-- Required public name of the permission, which other components and
        packages will use when referring to this permission.  This is a string using
        Java-style scoping to ensure it is unique.  The prefix will often
        be the same as our overall package name, for example
        "com.mycompany.android.myapp.SomePermission". -->
        <attr name="name" />
        <attr name="label" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
        <attr name="permissionGroup" />
        <attr name="description" />
        <attr name="protectionLevel" />
        <attr name="permissionFlags" />
    </declare-styleable>
    
    <!-- The <code>permission-group</code> tag declares a logical grouping of
         related permissions.
         
         <p>Note that this tag does not declare a permission itself, only
         a namespace in which further permissions can be placed.  See
         the {@link #AndroidManifestPermission &lt;permission&gt;} tag for
         more information.
         
         <p>This appears as a child tag of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestPermissionGroup" parent="AndroidManifest">
        <!-- Required public name of the permission group, permissions will use
        to specify the group they are in.  This is a string using
        Java-style scoping to ensure it is unique.  The prefix will often
        be the same as our overall package name, for example
        "com.mycompany.android.myapp.SomePermission". -->
        <attr name="name" />
        <attr name="label" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
        <attr name="description" />
        <attr name="permissionGroupFlags" />
        <attr name="priority" />
    </declare-styleable>
    
    <!-- The <code>permission-tree</code> tag declares the base of a tree of
         permission values: it declares that this package has ownership of
         the given permission name, as well as all names underneath it
         (separated by '.').  This allows you to use the
         {@link android.content.pm.PackageManager#addPermission
         PackageManager.addPermission()} method to dynamically add new
         permissions under this tree.
         
         <p>Note that this tag does not declare a permission itself, only
         a namespace in which further permissions can be placed.  See
         the {@link #AndroidManifestPermission &lt;permission&gt;} tag for
         more information.
         
         <p>This appears as a child tag of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestPermissionTree" parent="AndroidManifest">
        <!-- Required public name of the permission tree, which is the base name
        of all permissions under it.  This is a string using
        Java-style scoping to ensure it is unique.  The prefix will often
        be the same as our overall package name, for example
        "com.mycompany.android.myapp.SomePermission".  A permission tree name
        must have more than two segments in its path; that is,
        "com.me.foo" is okay, but not "com.me" or "com". -->
        <attr name="name" />
        <attr name="label" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
    </declare-styleable>
    
    <!-- The <code>uses-permission</code> tag requests a
         {@link #AndroidManifestPermission &lt;permission&gt;} that the containing
         package must be granted in order for it to operate correctly. For runtime
         permissions, i.e. ones with <code>dangerous</code> protection level, on a
         platform that supports runtime permissions, the permission will not be
         granted until the app explicitly requests it at runtime and the user approves
         the grant. You cannot request at runtime permissions that are not declared
         as used in the manifest. See the
         <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a>
         document for more information on permissions.  Also available is a
         {@link android.Manifest.permission list of permissions} included
         with the base platform.
         
         <p>This appears as a child tag of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestUsesPermission" parent="AndroidManifest">
        <!-- Required name of the permission you use, as published with the
        corresponding name attribute of a
        {@link android.R.styleable#AndroidManifestPermission &lt;permission&gt;}
        tag; often this is one of the {@link android.Manifest.permission standard
        system permissions}. -->
        <attr name="name" />
        <!-- Optional: specify the maximum version of the Android OS for which the
             application wishes to request the permission.  When running on a version
             of Android higher than the number given here, the permission will not
             be requested.  -->
        <attr name="maxSdkVersion" format="integer" />
    </declare-styleable>

    <!-- The <code>uses-configuration</code> tag specifies
         a specific hardware configuration value used by the application.
         For example an application might specify that it requires
         a physical keyboard or a particular navigation method like
         trackball. Multiple such attribute values can be specified by the
         application.

         <p>This appears as a child tag of the root
         {@link #AndroidManifest manifest} tag.

         @deprecated Use <code>feature-group</code> instead.-->
    <declare-styleable name="AndroidManifestUsesConfiguration" parent="AndroidManifest">
        <!-- The type of touch screen used by an application. -->
        <attr name="reqTouchScreen" />
        <attr name="reqKeyboardType" />
        <attr name="reqHardKeyboard" />
        <attr name="reqNavigation" />
        <attr name="reqFiveWayNav" />
    </declare-styleable>

    <!-- The <code>uses-feature</code> tag specifies
         a specific feature used by the application.
         For example an application might specify that it requires
         specific version of OpenGL. Multiple such attribute
         values can be specified by the application.

         <p>This appears as a child tag of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestUsesFeature" parent="AndroidManifest">
        <!-- The GLES driver version number needed by an application.
             The higher 16 bits represent the major number and the lower 16 bits
             represent the minor number. For example for GL 1.2 referring to
             0x00000102, the actual value should be set as 0x00010002. -->
        <attr name="glEsVersion" format="integer"/>
        <!--  The name of the feature that is being used. -->
        <attr name="name" />
        <!--  Specify whether this feature is required for the application.
              The default is true, meaning the application requires the
              feature, and does not want to be installed on devices that
              don't support it.  If you set this to false, then this will
              not impose a restriction on where the application can be
              installed. -->
        <attr name="required" format="boolean" />
    </declare-styleable>

    <!-- The <code>feature-group</code> tag specifies
         a set of one or more <code>uses-feature</code> elements that
         the application can utilize. An application uses multiple
         <code>feature-group</code> sets to indicate that it can support
         different combinations of features.

         <p>This appears as a child tag of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestFeatureGroup">
        <!-- The human-readable name of the feature group. -->
        <attr name="label" />
    </declare-styleable>

    <!-- The <code>uses-sdk</code> tag describes the SDK features that the
         containing package must be running on to operate correctly.
         
         <p>This appears as a child tag of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestUsesSdk" parent="AndroidManifest">
        <!-- This is the minimum SDK version number that the application
             requires.  This number is an abstract integer, from the list
             in {@link android.os.Build.VERSION_CODES}  If
             not supplied, the application will work on any SDK.  This
             may also be string (such as "Donut") if the application was built
             against a development branch, in which case it will only work against
             the development builds. -->
        <attr name="minSdkVersion" format="integer|string" />
        <!-- This is the SDK version number that the application is targeting.
             It is able to run on older versions (down to minSdkVersion), but
             was explicitly tested to work with the version specified here.
             Specifying this version allows the platform to disable compatibility
             code that are not required or enable newer features that are not
             available to older applications.  This may also be a string
             (such as "Donut") if this is built against a development
             branch, in which case minSdkVersion is also forced to be that
             string. -->
        <attr name="targetSdkVersion" format="integer|string" />
        <!-- This is the maximum SDK version number that an application works
             on.  You can use this to ensure your application is filtered out
             of later versions of the platform when you know you have
             incompatibility with them. -->
        <attr name="maxSdkVersion" />
    </declare-styleable>
    
    <!-- The <code>library</code> tag declares that this apk is providing itself
         as a shared library for other applications to use.  It can only be used
         with apks that are built in to the system image.  Other apks can link to
         it with the {@link #AndroidManifestUsesLibrary uses-library} tag.

         <p>This appears as a child tag of the
         {@link #AndroidManifestApplication application} tag. -->
    <declare-styleable name="AndroidManifestLibrary" parent="AndroidManifest">
        <!-- Required public name of the library, which other components and
        packages will use when referring to this library.  This is a string using
        Java-style scoping to ensure it is unique.  The name should typically
        be the same as the apk's package name. -->
        <attr name="name" />
    </declare-styleable>

    <!-- The <code>uses-libraries</code> specifies a shared library that this
         package requires to be linked against.  Specifying this flag tells the
         system to include this library's code in your class loader.
         
         <p>This appears as a child tag of the
         {@link #AndroidManifestApplication application} tag. -->
    <declare-styleable name="AndroidManifestUsesLibrary" parent="AndroidManifestApplication">
        <!-- Required name of the library you use. -->
        <attr name="name" />
        <!--  Specify whether this library is required for the application.
              The default is true, meaning the application requires the
              library, and does not want to be installed on devices that
              don't support it.  If you set this to false, then this will
              allow the application to be installed even if the library
              doesn't exist, and you will need to check for its presence
              dynamically at runtime. -->
        <attr name="required" />
    </declare-styleable>
    
    <!-- The <code>supports-screens</code> specifies the screen dimensions an
         application supports.  By default a modern application supports all
         screen sizes and must explicitly disable certain screen sizes here;
         older applications are assumed to only support the traditional normal
         (HVGA) screen size.  Note that screen size is a separate axis from
         density, and is determined as the available pixels to an application
         after density scaling has been applied.
         
         <p>This appears as a child tag of the
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestSupportsScreens" parent="AndroidManifest">
        <!-- Starting with {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2},
             this is the new way to specify the minimum screen size an application is
             compatible with.  This attribute provides the required minimum
             "smallest screen width" (as per the -swNNNdp resource configuration)
             that the application can run on.  For example, a typical phone
             screen is 320, a 7" tablet 600, and a 10" tablet 720.  If the
             smallest screen width of the device is below the value supplied here,
             then the application is considered incompatible with that device.
             If not supplied, then any old smallScreens, normalScreens, largeScreens,
             or xlargeScreens attributes will be used instead. -->
        <attr name="requiresSmallestWidthDp" format="integer" />
        <!-- Starting with {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2},
             this is the new way to specify the largest screens an application is
             compatible with.  This attribute provides the maximum
             "smallest screen width" (as per the -swNNNdp resource configuration)
             that the application is designed for.  If this value is smaller than
             the "smallest screen width" of the device it is running on, the user
             is offered to run it in a compatibility mode that emulates a
             smaller screen and zooms it to fit the screen. Currently the compatibility mode only
             emulates phone screens with a 320dp width, so compatibility mode is not applied if the
             value for compatibleWidthLimitDp is larger than 320. -->
        <attr name="compatibleWidthLimitDp" format="integer" />
        <!-- Starting with {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2},
             this is the new way to specify the screens an application is
             compatible with.  This attribute provides the maximum
             "smallest screen width" (as per the -swNNNdp resource configuration)
             that the application can work well on.  If this value is smaller than
             the "smallest screen width" of the device it is running on, the
             application will be forced in to screen compatibility mode with
             no way for the user to turn it off. Currently the compatibility mode only
             emulates phone screens with a 320dp width, so compatibility mode is not applied if the
             value for largestWidthLimitDp is larger than 320. -->
        <attr name="largestWidthLimitDp" format="integer" />
        <!-- Indicates whether the application supports smaller screen form-factors.
             A small screen is defined as one with a smaller aspect ratio than
             the traditional HVGA screen; that is, for a portrait screen, less
             tall than an HVGA screen.  In practice, this means a QVGA low
             density or VGA high density screen.  An application that does
             not support small screens <em>will not be available</em> for
             small screen devices, since there is little the platform can do
             to make such an application work on a smaller screen. -->
        <attr name="smallScreens" format="boolean" />
        <!-- Indicates whether an application supports the normal screen
             form-factors.  Traditionally this is an HVGA normal density
             screen, but WQVGA low density and WVGA high density are also
             considered to be normal.  This attribute is true by default,
             and applications currently should leave it that way. -->
        <attr name="normalScreens" format="boolean" />
        <!-- Indicates whether the application supports larger screen form-factors.
             A large screen is defined as a screen that is significantly larger
             than a normal phone screen, and thus may require some special care
             on the application's part to make good use of it.  An example would
             be a VGA <em>normal density</em> screen, though even larger screens
             are certainly possible.  An application that does not support
             large screens will be placed as a postage stamp on such a
             screen, so that it retains the dimensions it was originally
             designed for. -->
        <attr name="largeScreens" format="boolean" />
        <!-- Indicates whether the application supports extra large screen form-factors. -->
        <attr name="xlargeScreens" format="boolean" />
        <!-- Indicates whether the application can resize itself to newer
             screen sizes.  This is mostly used to distinguish between old
             applications that may not be compatible with newly introduced
             screen sizes and newer applications that should be; it will be
             set for you automatically based on whether you are targeting
             a newer platform that supports more screens. -->
        <attr name="resizeable" format="boolean" />
        <!-- Indicates whether the application can accommodate any screen
             density.  Older applications are assumed to not be able to,
             new ones able to.  You can explicitly supply your abilities
             here. -->
        <attr name="anyDensity" format="boolean" />
    </declare-styleable>

    <!-- Private tag to declare system protected broadcast actions.

         <p>This appears as a child tag of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestProtectedBroadcast" parent="AndroidManifest">
        <attr name="name" />
    </declare-styleable>

    <!-- Private tag to declare the original package name that this package is
         based on.  Only used for packages installed in the system image.  If
         given, and different than the actual package name, and the given
         original package was previously installed on the device but the new
         one was not, then the data for the old one will be renamed to be
         for the new package.

         <p>This appears as a child tag of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestOriginalPackage" parent="AndroidManifest">
        <attr name="name" />
    </declare-styleable>

    <!-- The <code>provider</code> tag declares a
         {@link android.content.ContentProvider} class that is available
         as part of the package's application components, supplying structured
         access to data managed by the application.
         
         <p>This appears as a child tag of the
         {@link #AndroidManifestApplication application} tag. -->
    <declare-styleable name="AndroidManifestProvider" parent="AndroidManifestApplication">
        <!-- Required name of the class implementing the provider, deriving from
            {@link android.content.ContentProvider}.  This is a fully
            qualified class name (for example, com.mycompany.myapp.MyProvider); as a
            short-hand if the first character of the class
            is a period then it is appended to your package name. -->
        <attr name="name" />
        <attr name="label" />
        <attr name="description" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
        <attr name="process" />
        <attr name="authorities" />
        <attr name="syncable" />
        <attr name="readPermission" />
        <attr name="writePermission" />
        <attr name="grantUriPermissions" />
        <attr name="permission" />
        <attr name="multiprocess" />
        <attr name="initOrder" />
        <!-- Specify whether this provider is enabled or not (that is, can be instantiated by the system).
             It can also be specified for an application as a whole, in which case a value of "false"
             will override any component specific values (a value of "true" will not override the
             component specific values). -->
        <attr name="enabled" />
        <attr name="exported" />
        <attr name="singleUser" />
    </declare-styleable>
    
    <!-- Attributes that can be supplied in an AndroidManifest.xml
         <code>grant-uri-permission</code> tag, a child of the
         {@link #AndroidManifestProvider provider} tag, describing a specific
         URI path that can be granted as a permission.  This tag can be
         specified multiple time to supply multiple paths. -->
    <declare-styleable name="AndroidManifestGrantUriPermission"  parent="AndroidManifestProvider">
        <!-- Specify a URI path that must exactly match, as per
             {@link android.os.PatternMatcher} with
             {@link android.os.PatternMatcher#PATTERN_LITERAL}. -->
        <attr name="path" format="string" />
        <!-- Specify a URI path that must be a prefix to match, as per
             {@link android.os.PatternMatcher} with
             {@link android.os.PatternMatcher#PATTERN_PREFIX}. -->
        <attr name="pathPrefix" format="string" />
        <!-- Specify a URI path that matches a simple pattern, as per
             {@link android.os.PatternMatcher} with
             {@link android.os.PatternMatcher#PATTERN_SIMPLE_GLOB}. 
             Note that because '\' is used as an escape character when
             reading the string from XML (before it is parsed as a pattern),
             you will need to double-escape: for example a literal "*" would
             be written as "\\*" and a literal "\" would be written as
             "\\\\".  This is basically the same as what you would need to
             write if constructing the string in Java code. -->
        <attr name="pathPattern" format="string" />
    </declare-styleable>
    
    <!-- Attributes that can be supplied in an AndroidManifest.xml
         <code>path-permission</code> tag, a child of the
         {@link #AndroidManifestProvider provider} tag, describing a permission
         that allows access to a specific path in the provider.  This tag can be
         specified multiple time to supply multiple paths. -->
    <declare-styleable name="AndroidManifestPathPermission"  parent="AndroidManifestProvider">
        <attr name="path" />
        <attr name="pathPrefix" />
        <attr name="pathPattern" />
        <attr name="permission" />
        <attr name="readPermission" />
        <attr name="writePermission" />
    </declare-styleable>
    
    <!-- The <code>service</code> tag declares a
         {@link android.app.Service} class that is available
         as part of the package's application components, implementing
         long-running background operations or a rich communication API
         that can be called by other packages.
         
         <p>Zero or more {@link #AndroidManifestIntentFilter intent-filter}
         tags can be included inside of a service, to specify the Intents
         that can connect with it.  If none are specified, the service can
         only be accessed by direct specification of its class name.
         The service tag appears as a child tag of the
         {@link #AndroidManifestApplication application} tag. -->
    <declare-styleable name="AndroidManifestService" parent="AndroidManifestApplication">
        <!-- Required name of the class implementing the service, deriving from
            {@link android.app.Service}.  This is a fully
            qualified class name (for example, com.mycompany.myapp.MyService); as a
            short-hand if the first character of the class
            is a period then it is appended to your package name. -->
        <attr name="name" />
        <attr name="label" />
        <attr name="description" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
        <attr name="permission" />
        <attr name="process" />
        <!-- Specify whether the service is enabled or not (that is, can be instantiated by the system).
             It can also be specified for an application as a whole, in which case a value of "false"
             will override any component specific values (a value of "true" will not override the
             component specific values). -->
        <attr name="enabled" />
        <attr name="exported" />
        <!-- If set to true, this service with be automatically stopped
             when the user remove a task rooted in an activity owned by
             the application.  The default is false. -->
        <attr name="stopWithTask" format="boolean" />
        <!-- If set to true, this service will run under a special process
             that is isolated from the rest of the system.  The only communication
             with it is through the Service API (binding and starting). -->
        <attr name="isolatedProcess" format="boolean" />
        <attr name="singleUser" />
    </declare-styleable>
    
    <!-- The <code>receiver</code> tag declares an
         {@link android.content.BroadcastReceiver} class that is available
         as part of the package's application components, allowing the
         application to receive actions or data broadcast by other
         applications even if it is not currently running.
         
         <p>Zero or more {@link #AndroidManifestIntentFilter intent-filter}
         tags can be included inside of a receiver, to specify the Intents
         it will receive.  If none are specified, the receiver will only
         be run when an Intent is broadcast that is directed at its specific
         class name.  The receiver tag appears as a child tag of the
         {@link #AndroidManifestApplication application} tag. -->
    <declare-styleable name="AndroidManifestReceiver" parent="AndroidManifestApplication">
        <!-- Required name of the class implementing the receiver, deriving from
            {@link android.content.BroadcastReceiver}.  This is a fully
            qualified class name (for example, com.mycompany.myapp.MyReceiver); as a
            short-hand if the first character of the class
            is a period then it is appended to your package name. -->
        <attr name="name" />
        <attr name="label" />
        <attr name="description" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
        <attr name="permission" />
        <attr name="process" />
        <!-- Specify whether the receiver is enabled or not (that is, can be instantiated by the system).
             It can also be specified for an application as a whole, in which case a value of "false"
             will override any component specific values (a value of "true" will not override the
             component specific values). -->
        <attr name="enabled" />
        <attr name="exported" />
        <attr name="singleUser" />
    </declare-styleable>

    <!-- The <code>activity</code> tag declares an
         {@link android.app.Activity} class that is available
         as part of the package's application components, implementing
         a part of the application's user interface.

         <p>Zero or more {@link #AndroidManifestIntentFilter intent-filter}
         tags can be included inside of an activity, to specify the Intents
         that it can handle.  If none are specified, the activity can
         only be started through direct specification of its class name.
         The activity tag appears as a child tag of the
         {@link #AndroidManifestApplication application} tag. -->
    <declare-styleable name="AndroidManifestActivity" parent="AndroidManifestApplication">
        <!-- Required name of the class implementing the activity, deriving from
            {@link android.app.Activity}.  This is a fully
            qualified class name (for example, com.mycompany.myapp.MyActivity); as a
            short-hand if the first character of the class
            is a period then it is appended to your package name. -->
        <attr name="name" />
        <attr name="theme" />
        <attr name="label" />
        <attr name="description" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
        <attr name="launchMode" />
        <attr name="screenOrientation" />
        <attr name="configChanges" />
        <attr name="permission" />
        <attr name="multiprocess" />
        <attr name="process" />
        <attr name="taskAffinity" />
        <attr name="allowTaskReparenting" />
        <attr name="finishOnTaskLaunch" />
        <attr name="finishOnCloseSystemDialogs" />
        <attr name="clearTaskOnLaunch" />
        <attr name="noHistory" />
        <attr name="alwaysRetainTaskState" />
        <attr name="stateNotNeeded" />
        <attr name="excludeFromRecents" />
        <!-- @deprecated use {@link android.R.attr#showForAllUsers} instead. -->
        <attr name="showOnLockScreen" />
        <!-- Specify whether the activity is enabled or not (that is, can be instantiated by the system).
             It can also be specified for an application as a whole, in which case a value of "false"
             will override any component specific values (a value of "true" will not override the
             component specific values). -->
        <attr name="enabled" />
        <attr name="exported" />
        <!-- Specify the default soft-input mode for the main window of
             this activity.  A value besides "unspecified" here overrides
             any value in the theme. -->
        <attr name="windowSoftInputMode" />
        <attr name="immersive" />
        <attr name="hardwareAccelerated" />
        <attr name="uiOptions" />
        <attr name="parentActivityName" />
        <attr name="singleUser" />
        <!-- @hide This broacast receiver will only receive broadcasts for the
             primary user.  Can only be used with receivers. -->
        <attr name="primaryUserOnly" format="boolean" />
        <attr name="persistableMode" />
        <attr name="allowEmbedded" />
        <attr name="documentLaunchMode" />
        <attr name="maxRecents" />
        <attr name="autoRemoveFromRecents" />
        <attr name="relinquishTaskIdentity" />
        <attr name="resumeWhilePausing" />
        <!-- @hide -->
        <attr name="resizeableActivity" />
        <attr name="lockTaskMode" />
        <attr name="showForAllUsers" />
    </declare-styleable>

    <!-- The <code>activity-alias</code> tag declares a new
         name for an existing {@link #AndroidManifestActivity activity}
         tag.

         <p>Zero or more {@link #AndroidManifestIntentFilter intent-filter}
         tags can be included inside of an activity-alias, to specify the Intents
         that it can handle.  If none are specified, the activity can
         only be started through direct specification of its class name.
         The activity-alias tag appears as a child tag of the
         {@link #AndroidManifestApplication application} tag. -->
    <declare-styleable name="AndroidManifestActivityAlias" parent="AndroidManifestApplication">
        <!-- Required name of the class implementing the activity, deriving from
            {@link android.app.Activity}.  This is a fully
            qualified class name (for example, com.mycompany.myapp.MyActivity); as a
            short-hand if the first character of the class
            is a period then it is appended to your package name. -->
        <attr name="name" />
        <!-- The name of the activity this alias should launch.  The activity
             must be in the same manifest as the alias, and have been defined
             in that manifest before the alias here.  This must use a Java-style
             naming convention to ensure the name is unique, for example
             "com.mycompany.MyName". -->
        <attr name="targetActivity" format="string" />
        <attr name="label" />
        <attr name="description" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
        <attr name="permission" />
        <!-- Specify whether the activity-alias is enabled or not (that is, can be instantiated by the system).
             It can also be specified for an application as a whole, in which case a value of "false"
             will override any component specific values (a value of "true" will not override the
             component specific values). -->
        <attr name="enabled" />
        <attr name="exported" />
        <attr name="parentActivityName" />
    </declare-styleable>

    <!-- The <code>meta-data</code> tag is used to attach additional
         arbitrary data to an application component.  The data can later
         be retrieved programmatically from the
         {@link android.content.pm.ComponentInfo#metaData
         ComponentInfo.metaData} field.  There is no meaning given to this
         data by the system.  You may supply the data through either the
         <code>value</code> or <code>resource</code> attribute; if both
         are given, then <code>resource</code> will be used.
         
         <p>It is highly recommended that you avoid supplying related data as
         multiple separate meta-data entries.  Instead, if you have complex
         data to associate with a component, then use the <code>resource</code>
         attribute to assign an XML resource that the client can parse to
         retrieve the complete data. -->
    <declare-styleable name="AndroidManifestMetaData"
         parent="AndroidManifestApplication
                 AndroidManifestActivity
                 AndroidManifestReceiver
                 AndroidManifestProvider
                 AndroidManifestService
                 AndroidManifestPermission
                 AndroidManifestPermissionGroup
                 AndroidManifestInstrumentation">
        <attr name="name" />
        <!-- Concrete value to assign to this piece of named meta-data.
             The data can later be retrieved from the meta data Bundle
             through {@link android.os.Bundle#getString Bundle.getString},
             {@link android.os.Bundle#getInt Bundle.getInt},
             {@link android.os.Bundle#getBoolean Bundle.getBoolean},
             or {@link android.os.Bundle#getFloat Bundle.getFloat} depending
             on the type used here. -->
        <attr name="value" format="string|integer|color|float|boolean" />
        <!-- Resource identifier to assign to this piece of named meta-data.
             The resource identifier can later be retrieved from the meta data
             Bundle through {@link android.os.Bundle#getInt Bundle.getInt}. -->
        <attr name="resource" format="reference" />
    </declare-styleable>
    
    <!-- The <code>intent-filter</code> tag is used to construct an
         {@link android.content.IntentFilter} object that will be used
         to determine which component can handle a particular
         {@link android.content.Intent} that has been given to the system.
         It can be used as a child of the
         {@link #AndroidManifestActivity activity},
         {@link #AndroidManifestReceiver receiver} and 
         {@link #AndroidManifestService service}
         tags.
         
         <p> Zero or more {@link #AndroidManifestAction action},
         {@link #AndroidManifestCategory category}, and/or
         {@link #AndroidManifestData data} tags should be
         included inside to describe the contents of the filter.
         
         <p> The optional label and icon attributes here are used with
         an activity to supply an alternative description of that activity
         when it is being started through an Intent matching this filter. -->
    <declare-styleable name="AndroidManifestIntentFilter"
         parent="AndroidManifestActivity AndroidManifestReceiver AndroidManifestService">
        <attr name="label" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
        <attr name="priority" />
        <attr name="autoVerify" />
    </declare-styleable>
    
    <!-- Attributes that can be supplied in an AndroidManifest.xml
         <code>action</code> tag, a child of the
         {@link #AndroidManifestIntentFilter intent-filter} tag.
         See {@link android.content.IntentFilter#addAction} for
         more information. -->
    <declare-styleable name="AndroidManifestAction" parent="AndroidManifestIntentFilter">
        <!-- The name of an action that is handled, using the Java-style
             naming convention.  For example, to support
             {@link android.content.Intent#ACTION_VIEW Intent.ACTION_VIEW}
             you would put <code>android.intent.action.VIEW</code> here.
             Custom actions should generally use a prefix matching the
             package name. -->
        <attr name="name" />
    </declare-styleable>
    
    <!-- Attributes that can be supplied in an AndroidManifest.xml
         <code>data</code> tag, a child of the
         {@link #AndroidManifestIntentFilter intent-filter} tag, describing
         the types of data that match.  This tag can be specified multiple
         times to supply multiple data options, as described in the
         {@link android.content.IntentFilter} class.  Note that all such
         tags are adding options to the same IntentFilter so that, for example,
         <code>&lt;data android:scheme="myscheme" android:host="me.com" /&gt;</code>
         is equivalent to <code>&lt;data android:scheme="myscheme" /&gt;
         &lt;data android:host="me.com" /&gt;</code>. -->
    <declare-styleable name="AndroidManifestData" parent="AndroidManifestIntentFilter">
        <!-- Specify a MIME type that is handled, as per
             {@link android.content.IntentFilter#addDataType
             IntentFilter.addDataType()}.
             <p><em>Note: MIME type matching in the Android framework is
             case-sensitive, unlike formal RFC MIME types.  As a result,
             MIME types here should always use lower case letters.</em></p> -->
        <attr name="mimeType" format="string" />
        <!-- Specify a URI scheme that is handled, as per
             {@link android.content.IntentFilter#addDataScheme
             IntentFilter.addDataScheme()}.
             <p><em>Note: scheme matching in the Android framework is
             case-sensitive, unlike the formal RFC.  As a result,
             schemes here should always use lower case letters.</em></p> -->
        <attr name="scheme" format="string" />
        <!-- Specify a URI scheme specific part that must exactly match, as per
             {@link android.content.IntentFilter#addDataSchemeSpecificPart
             IntentFilter.addDataSchemeSpecificPart()} with
             {@link android.os.PatternMatcher#PATTERN_LITERAL}. -->
        <attr name="ssp" format="string" />
        <!-- Specify a URI scheme specific part that must be a prefix to match, as per
             {@link android.content.IntentFilter#addDataSchemeSpecificPart
             IntentFilter.addDataSchemeSpecificPart()} with
             {@link android.os.PatternMatcher#PATTERN_PREFIX}. -->
        <attr name="sspPrefix" format="string" />
        <!-- Specify a URI scheme specific part that matches a simple pattern, as per
             {@link android.content.IntentFilter#addDataSchemeSpecificPart
             IntentFilter.addDataSchemeSpecificPart()} with
             {@link android.os.PatternMatcher#PATTERN_SIMPLE_GLOB}.
             Note that because '\' is used as an escape character when
             reading the string from XML (before it is parsed as a pattern),
             you will need to double-escape: for example a literal "*" would
             be written as "\\*" and a literal "\" would be written as
             "\\\\".  This is basically the same as what you would need to
             write if constructing the string in Java code. -->
        <attr name="sspPattern" format="string" />
        <!-- Specify a URI authority host that is handled, as per
             {@link android.content.IntentFilter#addDataAuthority
             IntentFilter.addDataAuthority()}.
             <p><em>Note: host name matching in the Android framework is
             case-sensitive, unlike the formal RFC.  As a result,
             host names here should always use lower case letters.</em></p> -->
        <attr name="host" format="string" />
        <!-- Specify a URI authority port that is handled, as per
             {@link android.content.IntentFilter#addDataAuthority
             IntentFilter.addDataAuthority()}.  If a host is supplied
             but not a port, any port is matched. -->
        <attr name="port" format="string" />
        <!-- Specify a URI path that must exactly match, as per
             {@link android.content.IntentFilter#addDataPath
             IntentFilter.addDataPath()} with
             {@link android.os.PatternMatcher#PATTERN_LITERAL}. -->
        <attr name="path" />
        <!-- Specify a URI path that must be a prefix to match, as per
             {@link android.content.IntentFilter#addDataPath
             IntentFilter.addDataPath()} with
             {@link android.os.PatternMatcher#PATTERN_PREFIX}. -->
        <attr name="pathPrefix" />
        <!-- Specify a URI path that matches a simple pattern, as per
             {@link android.content.IntentFilter#addDataPath
             IntentFilter.addDataPath()} with
             {@link android.os.PatternMatcher#PATTERN_SIMPLE_GLOB}. 
             Note that because '\' is used as an escape character when
             reading the string from XML (before it is parsed as a pattern),
             you will need to double-escape: for example a literal "*" would
             be written as "\\*" and a literal "\" would be written as
             "\\\\".  This is basically the same as what you would need to
             write if constructing the string in Java code. -->
        <attr name="pathPattern" />
    </declare-styleable>
    
    <!-- Attributes that can be supplied in an AndroidManifest.xml
         <code>category</code> tag, a child of the
         {@link #AndroidManifestIntentFilter intent-filter} tag. 
         See {@link android.content.IntentFilter#addCategory} for
         more information. -->
    <declare-styleable name="AndroidManifestCategory" parent="AndroidManifestIntentFilter">
        <!-- The name of category that is handled, using the Java-style
             naming convention.  For example, to support
             {@link android.content.Intent#CATEGORY_LAUNCHER Intent.CATEGORY_LAUNCHER}
             you would put <code>android.intent.category.LAUNCHER</code> here.
             Custom actions should generally use a prefix matching the
             package name. -->
        <attr name="name" />
    </declare-styleable>
    
    <!-- Attributes that can be supplied in an AndroidManifest.xml
         <code>instrumentation</code> tag, a child of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestInstrumentation" parent="AndroidManifest">
        <!-- Required name of the class implementing the instrumentation, deriving from
            {@link android.app.Instrumentation}.  This is a fully
            qualified class name (for example, com.mycompany.myapp.MyActivity); as a
            short-hand if the first character of the class
            is a period then it is appended to your package name. -->
        <attr name="name" />
        <attr name="targetPackage" />
        <attr name="label" />
        <attr name="icon" />
        <attr name="banner" />
        <attr name="logo" />
        <attr name="handleProfiling" />
        <attr name="functionalTest" />
    </declare-styleable>
    
    <!-- Attributes that can be supplied in an AndroidManifest.xml
         <code>screen</code> tag, a child of <code>compatible-screens</code>,
         which is itself a child of the root
         {@link #AndroidManifest manifest} tag. -->
    <declare-styleable name="AndroidManifestCompatibleScreensScreen"
                       parent="AndroidManifest.AndroidManifestCompatibleScreens">
        <!-- Specifies a compatible screen size, as per the device
             configuration screen size bins. -->
        <attr name="screenSize">
            <!-- A small screen configuration, at least 240x320dp. -->
            <enum name="small" value="200" />
            <!-- A normal screen configuration, at least 320x480dp. -->
            <enum name="normal" value="300" />
            <!-- A large screen configuration, at least 400x530dp. -->
            <enum name="large" value="400" />
            <!-- An extra large screen configuration, at least 600x800dp. -->
            <enum name="xlarge" value="500" />
        </attr>
        <!-- Specifies a compatible screen density, as per the device
             configuration screen density bins. -->
        <attr name="screenDensity" format="integer">
            <!-- A low density screen, approximately 120dpi. -->
            <enum name="ldpi" value="120" />
            <!-- A medium density screen, approximately 160dpi. -->
            <enum name="mdpi" value="160" />
            <!-- A high density screen, approximately 240dpi. -->
            <enum name="hdpi" value="240" />
            <!-- An extra high density screen, approximately 320dpi. -->
            <enum name="xhdpi" value="320" />
        </attr>
    </declare-styleable>

    <!-- The <code>input-type</code> tag is a child of the <code>supports-input</code> tag, which
         is itself a child of the root {@link #AndroidManifest manifest} tag. Each
         <code>input-type</code> tag specifices the name of a specific input device type. When
         grouped with the other elements of the parent <code>supports-input</code> tag it defines
         a collection of input devices, which when all used together, are considered a supported
         input mechanism for the application. There may be multiple <code>supports-input</code>
         tags defined, each containing a different combination of input device types. -->
    <declare-styleable name="AndroidManifestSupportsInputInputType"
                       parent="AndroidManifest.AndroidManifestSupportsInput">
        <!-- Specifices the name of the input device type -->
        <attr name="name" />
    </declare-styleable>

    <!-- The attribute that holds a Base64-encoded public key. -->
    <attr name="publicKey" format="string" />

    <!-- Attributes relating to a package verifier. -->
    <declare-styleable name="AndroidManifestPackageVerifier" parent="AndroidManifest">
        <!-- Specifies the Java-style package name that defines this
             package verifier. -->
        <attr name="name" />

        <!-- The Base64 encoded public key of the package verifier's
             signature. -->
        <attr name="publicKey" />
    </declare-styleable>

    <!-- Attributes relating to resource overlay packages. -->
    <declare-styleable name="AndroidManifestResourceOverlay" parent="AndroidManifest">
        <!-- Package name of base package whose resources will be overlaid. -->
        <attr name="targetPackage" />

        <!-- Load order of overlay package. -->
        <attr name="priority" />

    </declare-styleable>

    <!-- Declaration of an {@link android.content.Intent} object in XML.  May
         also include zero or more {@link #IntentCategory <category> and
         {@link #Extra <extra>} tags. -->
    <declare-styleable name="Intent">
        <!-- The action name to assign to the Intent, as per
            {@link android.content.Intent#setAction Intent.setAction()}. -->
        <attr name="action" format="string" />
        <!-- The data URI to assign to the Intent, as per
            {@link android.content.Intent#setData Intent.setData()}.
            <p><em>Note: scheme and host name matching in the Android framework is
            case-sensitive, unlike the formal RFC.  As a result,
            URIs here should always be normalized to use lower case letters
            for these elements (as well as other proper Uri normalization).</em></p> -->
        <attr name="data" format="string" />
        <!-- The MIME type name to assign to the Intent, as per
            {@link android.content.Intent#setType Intent.setType()}.
            <p><em>Note: MIME type matching in the Android framework is
            case-sensitive, unlike formal RFC MIME types.  As a result,
            MIME types here should always use lower case letters.</em></p> -->
        <attr name="mimeType" />
        <!-- The package part of the ComponentName to assign to the Intent, as per
            {@link android.content.Intent#setComponent Intent.setComponent()}. -->
        <attr name="targetPackage" />
        <!-- The class part of the ComponentName to assign to the Intent, as per
            {@link android.content.Intent#setComponent Intent.setComponent()}. -->
        <attr name="targetClass" format="string" />
    </declare-styleable>
    
    <!-- A category to add to an Intent, as per
            {@link android.content.Intent#addCategory Intent.addCategory()}. -->
    <declare-styleable name="IntentCategory" parent="Intent">
        <!-- Required name of the category. -->
        <attr name="name" />
    </declare-styleable>
    
    <!-- An extra data value to place into a an extra/name value pair held
            in a Bundle, as per {@link android.os.Bundle}. -->
    <declare-styleable name="Extra" parent="Intent">
        <!-- Required name of the extra data. -->
        <attr name="name" />
        <!-- Concrete value to put for this named extra data. -->
        <attr name="value" />
    </declare-styleable>

    <!-- Groups signing keys into a {@code KeySet} for easier reference in
            other APIs. However, currently no APIs use this. -->
    <attr name="keySet" />
    <declare-styleable name="AndroidManifestPublicKey">
        <attr name="name" />
        <attr name="value" />
    </declare-styleable>
    <declare-styleable name="AndroidManifestKeySet">
        <attr name="name" />
    </declare-styleable>

    <!-- Associate declared KeySets with upgrading capability -->
    <declare-styleable name="AndroidManifestUpgradeKeySet" parent="AndroidManifest">
      <attr name="name" />
    </declare-styleable>

</resources>
