Merge "docs: Updated L Preview Highlights." into klp-modular-dev

This commit is contained in:
Quddus Chong
2014-06-23 16:43:08 +00:00
committed by Android (Google) Code Review
7 changed files with 154 additions and 105 deletions

View File

@@ -18,7 +18,7 @@ sdk.platform.apiLevel=20
<li><a href="#ART">New Android Runtime (ART)</a></li>
<li><a href="#BehaviorNotifications">If your app implements notifications...</a></li>
<li><a href="#BehaviorMediaControl">If your app uses RemoteControlClient...</a></li>
<li><a href="#BehaviorGetRecentTasks">If your app uses ActivityManager.getRecentTasks()...</a></li>
<li><a href="#BehaviorGetRecentTasks">If your app uses ActivityManager.getRecentTasks()...</a></li>
</ol>
</li>
<li><a href="#UI">User Interface</a>
@@ -69,7 +69,7 @@ sdk.platform.apiLevel=20
<li><a href="#Enterprise">Enterprise</a>
<ol>
<li><a href="#ManagedProvisioning">Managed provisioning</a></li>
<li><a href="#LockToAppMode">Lock-to-App mode</a></li>
<li><a href="#TaskLocking">Task locking</a></li>
</ol>
</li>
<li><a href="#Printing">Printing Framework</a>
@@ -163,10 +163,10 @@ Behavior on the Android Runtime (ART)</a>. Pay particular attention if:</p>
backgrounds to match the new material design widgets. Make sure that all your
notifications look right with the new color scheme:</p>
<div class="figure" style="width:220px">
<div class="figure" style="width:320px">
<img src="images/hun-example.png"
srcset="images/hun-example@2x.png 2x"
alt="" width="220" height="372" id="figure1" />
alt="" width="320" height="541" id="figure1" />
<p class="img-caption">
<strong>Figure 1.</strong> Fullscreen activity showing a heads-up notification
</p>
@@ -177,7 +177,7 @@ notifications look right with the new color scheme:</p>
<li>Update or remove assets that involve color.</li>
<li>The system automatically inverts action icons in notifications. Use
{@code android.app.Notification.Builder.setColor()} to set an accent color
{@code android.app.Notification. Builder.setColor()} to set an accent color
in a circle behind your {@link android.app.Notification#icon} image.</li>
<li>The system ignores all non-alpha channels in action icons and the main
@@ -188,7 +188,9 @@ notifications look right with the new color scheme:</p>
<p>If you are currently adding sounds and vibrations to your notifications by
using the {@link android.media.Ringtone}, {@link android.media.MediaPlayer},
or {@link android.os.Vibrator} classes, remove this code so that
the system can present notifications correctly in <a href="#DoNotDisturb">Do Not Disturb</a> mode. Instead, use the {@link android.app.Notification.Builder} methods instead to add sounds and vibration.</p>
the system can present notifications correctly in <a href="#DoNotDisturb">Do
Not Disturb</a> mode. Instead, use the {@link android.app.Notification.Builder}
methods instead to add sounds and vibration.</p>
<p>Notifications now appear in a small floating window
(also called a <em>heads-up notification</em>) when the device is active
@@ -218,40 +220,46 @@ gives your app more control over the presentation of media buttons, while
providing a consistent experience for users across the lockscreen and
unlocked device.</p>
<p>The L Developer Preview introduces a new {@code android.app.Notification.MediaStyle} template which is recommended for this purpose. {@code MediaStyle} converts notification actions that you added with {@link android.app.Notification.Builder#addAction(int, java.lang.CharSequence, android.app.PendingIntent) Notification.Builder.addAction()} into compact buttons embedded in your app's media playback notifications.</p>
<p>The L Developer Preview introduces a new
{@code android.app.Notification.MediaStyle} template which is recommended for
this purpose. {@code MediaStyle} converts notification actions that you added
with
{@link android.app.Notification.Builder#addAction(int, java.lang.CharSequence,
android.app.PendingIntent)
Notification.Builder.addAction()} into compact buttons embedded in your app's
media playback notifications.</p>
<p>If you are using the new
{@code android.media.session.MediaSession} class (see <a href="#MediaPlaybackControl">Media Playback Control</a> below), attach your session
token with {@code Notification.MediaStyle.setMediaToken()} to inform the
system that this notification controls an ongoing media session.</p>
{@code android.media.session.MediaSession} class
(see <a href="#MediaPlaybackControl">Media Playback Control</a> below), attach
your session token with {@code Notification.MediaStyle.setMediaToken()} to
inform the system that this notification controls an ongoing media session.</p>
<p>Call {@code
Notification.Builder.setVisibility(Notification.VISIBILITY_PUBLIC)} to mark a
notification as safe to show atop any lockscreen (secure or otherwise). For more information, see
<a href="#LockscreenNotifications">Lockscreen Notifications</a>.</p>
notification as safe to show atop any lockscreen (secure or otherwise). For more
information, see <a href="#LockscreenNotifications">Lockscreen Notifications</a>.</p>
<h3 id="BehaviorGetRecentTasks">If your app uses ActivityManager.getRecentTasks()...</h3>
<p>With the introduction of the new <em>concurrent documents and activities tasks</em> feature in the upcoming
release (see <a href="#Recents">Concurrent documents and activities in Recents
screen</a> below),
<p>With the introduction of the new <em>concurrent documents and activities
tasks</em> feature in the upcoming release (see <a href="#Recents">Concurrent
documents and activities in Recents screen</a> below),
the {@link android.app.ActivityManager#getRecentTasks
ActivityManager.getRecentTasks()} method is now
deprecated to improve user privacy. For backward
compatibility, this method still returns a small subset of its data, including the
calling applications own tasks and possibly some other non-sensitive tasks
(such as Home). If your app is using this method to retrieve its own tasks,
use {@code android.app.ActivityManager.getAppTasks()} instead to retrieve that
information.</p>
ActivityManager.getRecentTasks()} method is now deprecated to improve user
privacy. For backward compatibility, this method still returns a small subset of
its data, including the calling applications own tasks and possibly some other
non-sensitive tasks (such as Home). If your app is using this method to retrieve
its own tasks, use {@code android.app.ActivityManager.getAppTasks()} instead to
retrieve that information.</p>
<h2 id="UI">User Interface</h2>
<h3 id="MaterialDesign">Material design support</h3>
<p>The upcoming release adds support for Android's new <em>material</em> design
style. You can create
apps with material design that are visually dynamic and have UI element transitions
that feel natural to users. This support includes:</p>
style. You can create apps with material design that are visually dynamic and
have UI element transitions that feel natural to users. This support includes:</p>
<ul>
@@ -268,9 +276,9 @@ that feel natural to users. This support includes:</p>
<a href="{@docRoot}preview/material/index.html">Material Design</a>.</p>
<h3 id="LockscreenNotifications">Lockscreen notifications</h3>
<p>Lockscreens in the L Developer Preview have the ability to present notifications.
Users can choose via <em>Settings</em> whether to allow sensitive notification
content to be shown over a secure lockscreen.</p>
<p>Lockscreens in the L Developer Preview have the ability to present
notifications. Users can choose via <em>Settings</em> whether to allow
sensitive notification content to be shown over a secure lockscreen.</p>
<p>Your app can control the level of detail visible when its notifications are
displayed over the secure lockscreen. To control the visibility level, call
@@ -287,8 +295,12 @@ notifications icon.</li>
<p>When {@code VISIBILITY_PRIVATE} is set, you can also provide a redacted
version of the notification content that hides personal details. For example,
an SMS app might display a notification that shows "You have 3 new text messages." but hides the message content and senders. To provide this alternative notification, first create the replacement notification using {@link android.app.Notification.Builder}. When you create the private notification object, attach
the replacement notification to it through the {@code Notification.Builder.setPublicVersion()} method.</p>
an SMS app might display a notification that shows "You have 3 new text messages."
but hides the message content and senders. To provide this alternative
notification, first create the replacement notification using
{@link android.app.Notification.Builder}. When you create the private
notification object, attach the replacement notification to it through the
{@code Notification.Builder.setPublicVersion()} method.</p>
<h3 id="DoNotDisturb">Do Not Disturb mode</h3>
@@ -354,7 +366,8 @@ through the {@code android.app.ActivityManager.AppTask} class.</p>
<p>To insert a logical break so that the system treats your activity as a new
task, use {@code android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT} when
launching the activity with {@link android.app.Activity#startActivity(android.content.Intent) startActivity()}. You can also get this behavior by declaring the
launching the activity with {@link android.app.Activity#startActivity(android.content.Intent)
startActivity()}. You can also get this behavior by declaring the
<a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a>
attribute {@code documentLaunchMode="intoExisting"} or {@code ="always"} in your
manifest.</p>
@@ -381,7 +394,8 @@ as well as bug fixes. The default user-agent string for a
been updated to incorporate 36.0.0.0 as the version number.</p>
<p>Additionally, this release brings support for the
<a href="https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html">WebAudio</a>, <a href="https://www.khronos.org/webgl/">WebGL</a>, and
<a href="https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html">WebAudio</a>,
<a href="https://www.khronos.org/webgl/">WebGL</a>, and
<a href="http://www.webrtc.org/">WebRTC</a> open standards. To learn more about
the new features included in this release, see <a href="https://developer.chrome.com/multidevice/webview/overview">WebView for Android</a>.</p>
@@ -424,8 +438,10 @@ ES 3.1. Key new functionality provided in OpenGL ES 3.1 includes:</p>
<li>Backward compatibility with OpenGL ES 2.0 and 3.0
</ul>
<p>The Java interface for OpenGL ES 3.1 on Android is provided with GLES31. When using OpenGL ES 3.1, be sure that you declare it in your manifest file with the
<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a> tag and the {@code android:glEsVversion} attribute. For example:</p>
<p>The Java interface for OpenGL ES 3.1 on Android is provided with GLES31. When
using OpenGL ES 3.1, be sure that you declare it in your manifest file with the
<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
tag and the {@code android:glEsVversion} attribute. For example:</p>
<pre>
&lt;manifest&gt;
@@ -434,7 +450,9 @@ ES 3.1. Key new functionality provided in OpenGL ES 3.1 includes:</p>
&lt;/manifest&gt;
</pre>
<p>For more information about using OpenGL ES, including how to check the devices supported OpenGL ES version at runtime, see the <a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API guide</a>.</p>
<p>For more information about using OpenGL ES, including how to check the
devices supported OpenGL ES version at runtime, see the
<a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API guide</a>.</p>
<h2 id="Multimedia">Multimedia</h2>
@@ -462,12 +480,13 @@ capture request. Now when the system completes the image capture request, your
<ul>
<li>Your app can now supply audio data in floating-point format
({@code android.media.AudioFormat.ENCODING_PCM_FLOAT}). This permits greater
dynamic range, more consistent precision, and greater headroom. Floating-point arithmetic is especially useful during intermediate calculations. Playback
dynamic range, more consistent precision, and greater headroom. Floating-point
arithmetic is especially useful during intermediate calculations. Playback
end-points use integer format for audio data, and with lower bit-depth. (In the
L Developer Preview, portions of the internal pipeline are not yet
floating-point.)
<li>Your app can now supply audio data as a {@link java.nio.ByteBuffer}, in the same
format as provided by {@link android.media.MediaCodec}.
<li>Your app can now supply audio data as a {@link java.nio.ByteBuffer}, in
the same format as provided by {@link android.media.MediaCodec}.
<li>The {@code WRITE_NON_BLOCKING} option can simplify buffering and
multithreading for some apps.
</ul>
@@ -501,33 +520,40 @@ knows about your playback and can extract and show album art.</p>
<h3 id="DirectorySelection">Directory selection</h3>
<p>The L Developer Preview extends the <a href="{@docRoot}guide/topics/providers/document-provider.html">Storage Access Framework</a> to let users select an entire directory, rather than individual files, to
give your app read/write access to media files. When a directory is selected,
your app also has access to all its child directories and content.</p>
<p>The L Developer Preview extends the <a href="{@docRoot}guide/topics/providers/document-provider.html">Storage Access Framework</a> to let users select an entire directory subtree,
giving apps read/write access to all contained documents without requiring user
confirmation for each item.</p>
<p>To get the absolute paths to directories on external storage devices where
applications can store media files, call the new
{@code android.content.Context.getExternalMediaDirs()} method. No
additional
permissions are needed by your app to read or write to the returned paths.
In this context, "external storage devices" are those devices which the system
considers to be a
permanent part of the device, and includes emulated external storage and
physical media slots such as SD cards in battery compartments.</p>
<p>To select a directory subtree, build and send an
{@code android.intent.action.OPEN_DOCUMENT_TREE} {@link android.content.Intent}.
The system displays all
{@link android.provider.DocumentsProvider} instances that support subtree selection,
letting the user browse and select a directory. The returned URI represents access to the selected
subtree. You can then use {@code DocumentsContract.buildChildDocumentsUriUsingTree()}
and {@code DocumentsContract.buildDocumentUriUsingTree()} along with
{@code ContentResolver.query()} to explore the subtree.</p>
<p>You can bring up a system UI to allow the user to pick a directory subtree.
To do so, send {@code android.intent.action.OPEN_DOCUMENT_TREE} in an
{@link android.content.Intent}. If the call is successful, the system displays
the {@link android.provider.DocumentsProvider} instances installed on the
device for the user to select. When the user selects a directory from this UI,
the system returns a URI representing the selected directory tree.</p>
<p>The new {@code DocumentsContract.createDocument()} method lets you create
new documents or directories anywhere under the subtree. To manage
existing documents, use {@code DocumentsContract.renameDocument()} and
{@code DocumentsContract.deleteDocument()}. Check {@code DocumentsContract.Document.COLUMN_FLAGS}
to verify provider support for these calls before issuing them.</p>
<p>If you want to access a document in an existing directory, call the
{@code android.provider.DocumentsContract.buildDocumentViaUri()} method.
Pass the method a URI representing the path to the parent directory, and the
target document
ID. The method returns a new {@link android.net.Uri} which your app can
use to write media content with {@code DocumentsContract.createDocument()}.
<p>If you're implementing a {@link android.provider.DocumentsProvider} and want
to support subtree selection, implement {@code DocumentsProvider.isChildDocument()}
and include {@code Documents.Contract.FLAG_SUPPORTS_IS_CHILD} in your
{@code Root.COLUMN_FLAGS}.</p>
<p>The L Developer Preview also introduces new package-specific directories on
shared storage where your app can place media files for inclusion in
{@link android.provider.MediaStore}. The new
{@code android.content.Context.getExternalMediaDirs()} returns paths to these
directories on all shared storage devices. Similarly to
{@link android.content.Context#getExternalFilesDir(java.lang.String) Context.getExternalFilesDir()},
no additional permissions are needed by your app to access the returned paths. The
platform periodically scans for new media in these directories, but you can also
use {@link android.media.MediaScannerConnection} to explicitly scan for new
content.</p>
<h2 id="Wireless">Wireless &amp; Connectivity</h2>
@@ -561,7 +587,8 @@ information about the network, or to direct traffic to use the selected
network.</p>
<h3 id="BluetoothBroadcasting">Bluetooth broadcasting</h3>
<p>Android 4.3 introduced platform support for <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">Bluetooth Low Energy</a>
<p>Android 4.3 introduced platform support for
<a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">Bluetooth Low Energy</a>
(BLE) in the central role. In the L Developer Preview, an Android device can now
act as a Bluetooth LE <em>peripheral device</em>. Apps can use this capability
to make their presence known to
@@ -569,7 +596,8 @@ nearby devices. For instance, you can build apps that allow a device to
function as a pedometer or health monitor and communicate its data with another
BLE device.</p>
<p>The new {@code android.bluetooth.le} APIs enable your apps to broadcast advertisements, scan for responses, and form connections with nearby BLE devices.
<p>The new {@code android.bluetooth.le} APIs enable your apps to broadcast
advertisements, scan for responses, and form connections with nearby BLE devices.
You must add the {@code android.permission.BLUETOOTH_ADMIN} permission in your
manifest in order for your app to use the new advertising and scanning features.</a>
@@ -692,7 +720,7 @@ in {@code &lt;sdk&gt;/tools}.</p>
<img src="images/battery_historian.png"
srcset="images/battery_historian@2x.png 2x"
alt="" width="440" height="240"
alt="" width="760" height="462"
id="figure2" />
<p class="img-caption">
<strong>Figure 2.</strong>HTML visualization generated by the Battery
@@ -726,7 +754,7 @@ $ historian.par [-p powerfile] bugreport.txt > out.html
<div class="figure" style="width:360px">
<img src="images/managed_apps_launcher.png"
srcset="images/managed_apps_launcher@2x.png 2x"
alt="" width="360" height="572" id="figure3" />
alt="" width="360" height="609" id="figure3" />
<p class="img-caption">
<strong>Figure 3.</strong> Launcher screen showing managed apps (marked with
a lock badge)
@@ -734,17 +762,10 @@ $ historian.par [-p powerfile] bugreport.txt > out.html
</div>
<p>The L Developer Preview provides new functionality for running apps within
an enterprise environment:</p>
<ul>
<li><strong>Create managed user profiles</strong>. A device administrator can
initiate a managed provisioning process to add a co-present but separate managed
profile to a device with an existing personal account. The administrator has
control over the managed profile.</li>
<li><strong>Set device owner</strong>. Device administrators can also initiate a
managed provisioning process to automatically provision a
currently-unprovisioned device such that they have full control over the
device.</li>
</ul>
an enterprise environment. A device administrator can
initiate a managed provisioning process to add a co-present but separate <em>managed
profile</em> to a device with an existing personal account. The administrator has
control over the managed profile.</p>
<p>To start the managed provisioning process, send {@code
ACTION_PROVISION_MANAGED_PROFILE} in an {@link android.content.Intent}. If the
@@ -767,47 +788,71 @@ for the current user and any associated managed profiles. Your Launcher can make
the managed apps visually prominent by appending a “work” badge to the icon
drawable with {@code android.os.UserManager.getBadgeDrawableForUser()}.</p>
<h3 id="LockToAppMode">Lock-to-App mode</h3>
<p>The L Developer Preview introduces a new <em>Lock-to-App</em> mode that
<h3 id="TaskLocking">Task locking</h3>
<p>The L Developer Preview introduces a new task locking API that
lets you temporarily restrict users from leaving your app or being interrupted
by notifications. Once your app activates this mode, users will not be able to
see notifications, access other apps, or return to the Home screen, until your
by notifications. This could be used, for example, if you are developing an
education app to support high stakes assessment requirements on Android.
Once your app activates this mode, users will not be able to see
notifications, access other apps, or return to the Home screen, until your
app exits the mode.</p>
<p>To prevent unauthorized usage, the device on which you want to activate
this mode must have managed profiles or must be fully controlled by a device administrator (see <a href="#ManagedProvisioning">Managed Provisioning</a> for more information). Furthermore, the device or managed profile owner must
authorize apps to use this mode by calling {@code android.app.admin.DevicePolicyManager.setLockTaskComponents()}.</p>
<p>To prevent unauthorized usage, only authorized apps can activate task locking.
Furthermore, task locking authorization must be granted by a
specially-configured <em>device owner</em> app, through the {@code android.app.admin.DevicePolicyManager.setLockTaskComponents()} method.</p>
<p>Before activating this mode in your app, verify that your activity is authorized by calling {@code DevicePolicyManager.isLockTaskPermitted()}.</p>
<p>To set up a device owner, follow these steps:</p>
<ol>
<li>Attach a device running an <a href="https://source.android.com/source/building-running.html">Android {@code userdebug} build</a> to your development machine.</li>
<li>Install your device owner app.</li>
<li>Create a {@code device_owner.xml} file and save it to the {@code /data/system}
directory on the device.
<pre>
$ adb root
$ adb shell stop
$ rm /tmp/device_owner.xml
$ echo "&lt;?xml version='1.0' encoding='utf-8' standalone='yes' ?&gt;"
&gt;&gt; /tmp/device_owner.xml
$ echo "&device-owner package=\"&lt;your_device_owner_package&gt;\"
name=\"*&lt;your_organization_name&gt;\" /&gt;" &gt;&gt; /tmp/device_owner.xml
$ adb push /tmp/device_owner.xml /data/system/device_owner.xml
$ adb reboot
</pre>
</li>
</ol>
<p>To activate <em>Lock-to-App</em> mode, call
<p>Before using the task locking API in your app, verify that your activity is
authorized by calling {@code DevicePolicyManager.isLockTaskPermitted()}.</p>
<p>To activate task locking, call
{@code android.app.Activity.startLockTask()} from your authorized activity.</p>
<p>When <em>Lock-to-App</em> mode is active, the following behavior takes
effect:</p>
<p>When task locking is active, the following behavior takes effect:</p>
<ul>
<li>The status bar is blank, and user notifications and status information is hidden.</li>
<li>The Home and Recent Apps button is hidden.</li>
<li>The status bar is blank, and user notifications and status information is
hidden.</li>
<li>The Home and Recent Apps buttons are hidden.</li>
<li>Other apps may not launch new activities.</li>
<li>The current app may start new activities, as long as doing so does not
create new tasks.</li>
<li>The user remains locked on your app until an authorized activity calls
{@code Activity.stopLockTask()}.</li>
</ul>
<p>The device will remain in this mode until an authorized activity calls
{@code Activity.stopLockTask()}.
<h2 id="Printing">Printing Framework</h2>
<h3 id="PDFRender">Render PDF as bitmap</h3>
<p>You can now render PDF document pages into bitmap images for printing by
using the new {@code android.graphics.pdf.PdfRenderer} class. You must specify a
{@link android.os.ParcelFileDescriptor} that is seekable (that is, the content can be randomly
accessed) on which the system writes the the printable content. Your app can
obtain a page for rendering with {@code openPage()}, then call {@code render()}
to turn the opened {@code PdfRenderer.Page} into a bitmap. You can also set
additional parameters if you only want to convert a portion of the document into
a bitmap image (for example, to implement <a href="http://en.wikipedia.org/wiki/Tiled_rendering">tiled rendering</a> in order to zoom in on the document).</p>
{@link android.os.ParcelFileDescriptor} that is seekable (that is, the content
can be randomly accessed) on which the system writes the the printable content.
Your app can obtain a page for rendering with {@code openPage()}, then call
{@code render()} to turn the opened {@code PdfRenderer.Page} into a bitmap. You
can also set additional parameters if you only want to convert a portion of the
document into a bitmap image (for example, to implement
<a href="http://en.wikipedia.org/wiki/Tiled_rendering">tiled rendering</a> in
order to zoom in on the document).</p>
<h2 id="TestingA11y">Testing &amp; Accessibility </h2>
@@ -833,8 +878,7 @@ allows you to use shell based tools such as {@code dumpsys}, {@code am},
can now retrieve detailed information about the properties of windows on the
screen that sighted users can interact with. To retrieve a list of
{@code android.view.accessibility.AccessibilityWindowInfo} objects
representing the
windows information, call the new
representing the windows information, call the new
{@code android.accessibilityservice.AccessibilityService.getWindows()} method.
<li>You can use the new {@code android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction} to define standard or customized
actions to perform on an {@link android.view.accessibility.AccessibilityNodeInfo}.
@@ -845,13 +889,16 @@ previously found in {@code AccessibilityNodeInfo}.
<h2 id="Manifest">Manifest Declarations</h2>
<h3 id="ManifestFeatures">Declarable required features</h3>
<p>The following values are now supported in the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a> element, so you
can ensure that your app is installed only on devices that provide the features
<p>The following values are now supported in the
<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
element, so you can ensure that your app is installed only on devices that provide the features
your app needs.</p>
<ul>
<li>{@code FEATURE_LEANBACK}. Declares that your app must be installed only on
devices that support the <a href="{@docRoot}training/tv/index.html}">Android TV</a>user interface. Example:
devices that support the
<a href="{@docRoot}training/tv/index.html}">Android TV</a> user interface.
Example:
<pre>
&lt;uses-feature android:name="android.software.leanback"
android:required="true" /&gt;
@@ -866,7 +913,9 @@ devices that fully implement the {@code android.webkit.*} APIs. Example:
</ul>
<h3 id="ManifestPermissions">User permissions</h3>
<p>The following values are now supported in the <a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code &lt;uses-permission&gt;}</a> to declare the
<p>The following values are now supported in the
<a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code
&lt;uses-permission&gt;}</a> to declare the
permissions your app requires in order to access certain APIs.
<ul>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 841 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 638 KiB

After

Width:  |  Height:  |  Size: 3.1 MiB