Merge "docs: Add screenrecord command to adb docs" into klp-dev
diff --git a/docs/html/about/about_toc.cs b/docs/html/about/about_toc.cs
index b752e20..a657ee3 100644
--- a/docs/html/about/about_toc.cs
+++ b/docs/html/about/about_toc.cs
@@ -7,6 +7,13 @@
</ul>
</li>
<li class="nav-section">
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>about/versions/kitkat.html">
+ <span class="en">KitKat</span></a></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>about/versions/android-4.4.html">Android 4.4 APIs</a></li>
+ </ul>
+ </li>
+ <li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>about/versions/jelly-bean.html">
<span class="en">Jelly Bean</span></a></div>
<ul>
diff --git a/docs/html/about/versions/android-4.4.jd b/docs/html/about/versions/android-4.4.jd
new file mode 100644
index 0000000..6ef0337
--- /dev/null
+++ b/docs/html/about/versions/android-4.4.jd
@@ -0,0 +1,579 @@
+page.title=Android 4.4 APIs
+excludeFromSuggestions=true
+sdk.platform.version=4.4
+sdk.platform.apiLevel=19
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document
+ <a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle">
+ <span class="more">show more</span>
+ <span class="less" style="display:none">show less</span></a></h2>
+
+<ol id="toc44" class="hide-nested">
+ <li><a href="#ApiLevel">Update your target API level</a></li>
+ <li><a href="#Behaviors">Important Behavior Changes</a>
+ <ol>
+ <li><a href="#BehaviorStorage">If your app reads from external storage...</a></li>
+ <li><a href="#BehaviorWebView">If your app uses WebView...</a></li>
+ <li><a href="#BehaviorAlarms">If your app uses AlarmManager...</a></li>
+ <li><a href="#BehaviorSync">If your app syncs data using ContentResolver...</a></li>
+ </ol>
+ </li>
+ <li><a href="#Printing">Printing Framework</a>
+ <ol>
+ <li><a href="#PrintingGeneric">Printing generic content</a></li>
+ <li><a href="#PrintingImages">Printing images</a></li>
+ <li><a href="#PrintService">Building print services</a></li>
+ </ol>
+ </li>
+ <li><a href="#SMS">SMS Provider</a></li>
+ <li><a href="#Wireless">Wireless and Connectivity</a>
+ <ol>
+ <li><a href="#HCE">Host card emulation</a></li>
+ <li><a href="#ReaderMode">NFC reader mode</a></li>
+ <li><a href="#IR">Infrared transmitters</a></li>
+ </ol>
+ </li>
+ <li><a href="#Multimedia">Multimedia</a>
+ <ol>
+ <li><a href="#AdaptivePlayback">Adaptive playback</a></li>
+ <li><a href="#AudioTimestamp">On-demand audio timestamps</a></li>
+ <li><a href="#ImageReader">Surface image reader</a></li>
+ <li><a href="#PeakRms">Peak and RMS measurement</a></li>
+ <li><a href="#LoudnessEnhancer">Loudness enhancer</a></li>
+ <li><a href="#RemoteController">Remote controllers</a></li>
+ <li><a href="#Ratings">Ratings from remote controllers</a></li>
+ <li><a href="#ClosedCaptions">Closed captions</a></li>
+ </ol>
+ </li>
+ <li><a href="#Animations">Animation & Graphics</a>
+ <ol>
+ <li><a href="#Transitions">Scenes and transitions</a></li>
+ <li><a href="#AnimatorPause">Animator pausing</a></li>
+ <li><a href="#ReusableBitmaps">Reusable bitmaps</a></li>
+ </ol>
+ </li>
+ <li><a href="#UserContent">User Content</a>
+ <ol>
+ <li><a href="#StorageAccess">Storage access framework</a></li>
+ <li><a href="#ExternalStorage">External storage access</a></li>
+ <li><a href="#SyncAdapter">Sync adapters</a></li>
+ </ol>
+ </li>
+ <li><a href="#UserInput">User Input</a>
+ <ol>
+ <li><a href="#NewSensors">New sensor types</a></li>
+ <li><a href="#BatchSensors">Batched sensor events</a></li>
+ <li><a href="#Controllers">Controller identities</a></li>
+ </ol>
+ </li>
+ <li><a href="#UI">User Interface</a>
+ <ol>
+ <li><a href="#ImmersiveMode">Immersive full-screen mode</a></li>
+ <li><a href="#TranslucentBars">Translucent system bars</a></li>
+ <li><a href="#NotificationListener">Enhanced notification listener</a></li>
+ <li><a href="#DrawableMirroring">Drawable mirroring for RTL layouts</a></li>
+ <li><a href="#A11y">Accessibility</a></li>
+ </ol>
+ </li>
+ <li><a href="#Permissions">App Permissions</a></li>
+ <li><a href="#DeviceFeatures">Device Features</a></li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+<li><a href="{@docRoot}sdk/api_diff/19/changes.html">API
+Differences Report »</a> </li>
+</ol>
+
+</div>
+</div>
+
+
+
+
+<p>API Level: {@sdkPlatformApiLevel}</p>
+
+<p>Android 4.4 ({@link android.os.Build.VERSION_CODES#KITKAT}) is a new release for the Android platform that offers new features for users and app developers. This document provides an introduction to the most notable new APIs.</p>
+
+<p>As an app developer, you should download the Android {@sdkPlatformVersion} system image
+and SDK platform from the <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a> as
+soon as possible. If you don't have a device running Android {@sdkPlatformVersion} on which to
+test your app, use the Android {@sdkPlatformVersion} system
+image to test your app on the <a href="{@docRoot}tools/devices/emulator.html">Android emulator</a>.
+Then build your apps against the Android {@sdkPlatformVersion} platform to begin using the
+latest APIs.</p>
+
+
+<h3 id="ApiLevel">Update your target API level</h3>
+
+<p>To better optimize your app for devices running Android {@sdkPlatformVersion},
+ you should set your <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
+<code>"{@sdkPlatformApiLevel}"</code>, install it on an Android {@sdkPlatformVersion} system image,
+test it, then publish an update with this change.</p>
+
+<p>You can use APIs in Android {@sdkPlatformVersion} while also supporting older versions by adding
+conditions to your code that check for the system API level before executing
+APIs not supported by your <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a>.
+To learn more about maintaining backward compatibility, read <a
+href="{@docRoot}training/basics/supporting-devices/platforms.html">Supporting Different
+Platform Versions</a>.</p>
+
+<p>For more information about how API levels work, read <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
+Level?</a></p>
+
+
+
+
+
+<h2 id="Behaviors">Important Behavior Changes</h2>
+
+<p>If you have previously published an app for Android, be aware that your app might
+be affected by changes in Android {@sdkPlatformVersion}.</p>
+
+
+<h3 id="BehaviorStorage">If your app reads from external storage...</h3>
+
+<p>Your app can not read shared files on the external storage when running on Android 4.4, unless your app has the {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} permission. That is, files within the directory returned by {@link android.os.Environment#getExternalStoragePublicDirectory getExternalStoragePublicDirectory()} are no longer accessible without the permission. However, if you need to access only your app-specific directories, provided by {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}, then you do not need the {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} permission.</p>
+
+
+<h3 id="BehaviorWebView">If your app uses WebView...</h3>
+
+<p>Your app might behave differently when running on Android 4.4, especially when you update your app's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to "19" or higher.</p>
+
+<p>The code underlying the {@link android.webkit.WebView} class and related APIs has been upgraded to be based on a modern snapshot of the Chromium source code. This brings a variety of improvements for performance, support for new HTML5 features, and support for remote debugging of your {@link android.webkit.WebView} content. The scope of this upgrade means that if your app uses {@link android.webkit.WebView}, it's behavior may be impacted in some cases. Although known behavior changes are documented and mostly affect your app only when you update your app's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to "19" or higher—the new {@link android.webkit.WebView} operates in "quirks mode" to provide some legacy functionality in apps that target API level 18 and lower—it's possible that your app depends on unknown behaviors from the previous version of {@link android.webkit.WebView}.</p>
+
+<p>So if your existing app uses {@link android.webkit.WebView}, it's important that you test on Android 4.4 as soon as possible and consult <a href="{@docRoot}guide/webapps/migrating.html">Migrating to WebView in Android 4.4</a> for information about how your app might be affected when you update your <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to "19" or higher.</p>
+
+
+<h3 id="BehaviorAlarms">If your app uses AlarmManager...</h3>
+
+<p>When you set your app's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to "19" or higher, alarms that you create using either {@link android.app.AlarmManager#set set()} or {@link android.app.AlarmManager#setRepeating setRepeating()} will be inexact.</p>
+
+<p>To improve power efficiency, Android now batches together alarms from all apps that occur at reasonably similar times so the system wakes the device once instead of several times to handle each alarm.</p>
+
+<p>If your alarm is not associated with an exact clock time, but it's still important that your alarm be invoked during a specific time range (such as between 2pm and 4pm), then you can use the new {@link android.app.AlarmManager#setWindow setWindow()} method, which accepts an "earliest" time for the alarm and a "window" of time following the earliest time within which the system should invoke the alarm.</p>
+
+<p>If your alarm must be pinned to an exact clock time (such as for a calendar event reminder), then you can use the new {@link android.app.AlarmManager#setExact setExact()} method.</p>
+
+<p>This inexact batching behavior applies only to updated apps. If you've set the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to "18" or lower, your alarms will continue behave as they have on previous versions when running on Android 4.4.</p>
+
+
+<h3 id="BehaviorSync">If your app syncs data using ContentResolver...</h3>
+
+<p>When you set your app's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to "19" or higher, creating a sync with {@link android.content.ContentResolver#addPeriodicSync addPeriodicSync()} will perform your sync operations within a default flex interval of approximately 4% of the period you specify. For example, if your poll frequency is 24 hours, then your sync operation may occur within roughly a one-hour window of time each day, instead of at exactly the same time each day.</p>
+
+<p>To specify your own flex interval for sync operations, you should begin using the new {@link android.content.ContentResolver#requestSync requestSync()} method. For more details, see the section below about <a href="#SyncAdapter">Sync Adapters</a>.</p>
+
+<p>This flex interval behavior applies only to updated apps. If you've set the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to "18" or lower, your existing sync requests will continue to behave as they have on previous versions when running on Android 4.4.</p>
+
+
+
+
+
+
+
+
+
+
+<h2 id="Printing">Printing Framework</h2>
+
+<p>Android now includes a complete framework that allows users to print any document using a printer connected over Wi-Fi, Bluetooth, or other services. The system handles the transaction between an app that wants to print a document and the services that deliver print jobs to a printer. The {@link android.print} framework provides all the APIs necessary to specify a print document and deliver it to the system for printing. Which APIs you actually need for a given print job depends on your content.</p>
+
+<h3 id="PrintingGeneric">Printing generic content</h3>
+
+<p>If you want to print content from your UI as a document, you need to first create a subclass of {@link android.print.PrintDocumentAdapter}. Within this class, you must implement a few callback methods, including {@link android.print.PrintDocumentAdapter#onLayout onLayout()} to establish your layout based on the provided printing properties, and {@link android.print.PrintDocumentAdapter#onWrite onWrite()} to serialize your printable content into a {@link android.os.ParcelFileDescriptor}. </p>
+
+<p>In order to write your content to the {@link android.os.ParcelFileDescriptor} you must pass it a PDF. The new {@link android.graphics.pdf.PdfDocument} APIs offer a convenient way to do this by providing a {@link android.graphics.Canvas} from {@link android.graphics.pdf.PdfDocument.Page#getCanvas getCanvas()}, on which you can draw your printable content. Then write the {@link android.graphics.pdf.PdfDocument} to the {@link android.os.ParcelFileDescriptor} using the {@link android.graphics.pdf.PdfDocument#writeTo writeTo()} method.</p>
+
+<p>Once you've defined your implementation for {@link android.print.PrintDocumentAdapter}, you can execute print jobs upon the user's request using the {@link android.print.PrintManager} method, {@link android.print.PrintManager#print print()}, which takes the {@link android.print.PrintDocumentAdapter} as one of its arguments.</p>
+
+<h3 id="PrintingImages">Printing images</h3>
+
+<p>If you want to print just a photo or other bitmap, then the helper APIs in the support library do all the work for you. Simply create a new instance of {@link android.support.v4.print.PrintHelper}, set the scale mode with {@link android.support.v4.print.PrintHelper#setScaleMode setScaleMode()}, then pass your {@link android.graphics.Bitmap} to {@link android.support.v4.print.PrintHelper#printBitmap printBitmap()}. That's it. The library handles all the remaining interaction with the system to deliver the bitmap to the printer.</p>
+
+<h3 id="PrintService">Building print services</h3>
+
+<p>As a printer OEM, you can use the {@link android.printservice} framework to provide interoperability with your printers from Android devices. You can build and distribute print services as APKs, which users can install on their devices . A print service app operates primarily as a headless service by subclassing the {@link android.printservice.PrintService} class, which receives print jobs from the system and communicates the jobs to its printers using the appropriate protocols.</p>
+
+<p>For more information about how to print your app content, read <a href="{@docRoot}training/printing/index.html">Printing Content</a>.</p>
+
+
+
+
+
+
+
+<h2 id="SMS">SMS Provider</h2>
+
+<p>The {@link android.provider.Telephony} content provider (the "SMS Provider") allows apps to read and write SMS and MMS messages on the device. It includes tables for SMS and MMS messages received, drafted, sent, pending, and more.</p>
+
+<p>Beginning with Android 4.4, the system settings allow users to select a "default SMS app." Once selected, only the default SMS app is able to write to the SMS Provider and only the default SMS app receives the {@link android.provider.Telephony.Sms.Intents#SMS_DELIVER_ACTION} broadcast when the user receives an SMS or the {@link android.provider.Telephony.Sms.Intents#WAP_PUSH_DELIVER_ACTION} broadcast when the user receives an MMS. The default SMS app is responsible for writing details to the SMS Provider when it receives or sends a new message.</p>
+
+<p>Other apps that are not selected as the default SMS app can only read the SMS Provider, but may also be notified when a new SMS arrives by listening for the {@link android.provider.Telephony.Sms.Intents#SMS_RECEIVED_ACTION} broadcast, which is a non-abortable broadcast that may be delivered to multiple apps. This broadcast is intended for apps that---while not selected as the default SMS app---need to read special incoming messages such as to perform phone number verification.</p>
+
+<p>For more information, read the blog post, <a href="http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html">Getting Your SMS Apps Ready for KitKat</a>.</p>
+
+
+
+
+
+
+
+
+
+<h2 id="Wireless">Wireless and Connectivity</h2>
+
+<h3 id="HCE">Host card emulation</h3>
+
+<p>Android apps can now emulate ISO14443-4 (ISO-DEP) NFC cards that use APDUs for data exchange (as specified in ISO7816-4). This allows an NFC-enabled device running Android 4.4 to emulate multiple NFC cards at the same time, and allows an NFC payment terminal or other NFC reader to initiate a transaction with the appropriate NFC card based on the application identifier (AID).</p>
+
+<p>If you want to emulate an NFC card that is using these protocols in your app, create a service component based on the {@link android.nfc.cardemulation.HostApduService} class. Whereas if your app instead uses a secure element for card emulation, you need to create a service based on the {@link android.nfc.cardemulation.OffHostApduService} class, which will not directly be involved in the transactions but is necessary to register the AIDs that should be handled by the secure element.</p>
+
+<p>For more information, read the <a href="">NFC Card Emulation</a> guide.</p>
+
+
+<h3 id="ReaderMode">NFC reader mode</h3>
+
+<p>A new NFC reader mode allows an activity to restrict all NFC activity to only reading the types of tags the activity is interested in while in the foreground. You can enable reader mode for your activity with {@link android.nfc.NfcAdapter#enableReaderMode enableReaderMode()}, providing an implementation of {@link android.nfc.NfcAdapter.ReaderCallback} that receives a callback when new tags are detected.</p>
+
+<p>This new capability, in conjunction with host card emulation, allows Android to operate on both ends of a mobile payment interface: One devices operates as the payment terminal (a device running a reader mode activity) and another device operates as the payment client (a device emulating an NFC card).</p>
+
+<h3 id="IR">Infrared transmitters</h3>
+
+<p>When running on a device that includes an infrared (IR) transmitter, you can now transmit IR signals using the {@link android.hardware.ConsumerIrManager} APIs. To get an instance of {@link android.hardware.ConsumerIrManager}, call {@link android.content.Context#getSystemService getSystemService()} with {@link android.content.Context#CONSUMER_IR_SERVICE} as the argument. You can then query the device's supported IR frequencies with {@link android.hardware.ConsumerIrManager#getCarrierFrequencies()} and transmit signals by passing your desired frequency and signal pattern with {@link android.hardware.ConsumerIrManager#transmit transmit()}.</p>
+
+<p>You should always first check whether a device includes an IR transmitter by calling {@link android.hardware.ConsumerIrManager#hasIrEmitter()}, but if your app is compatible only with devices that do have one, you should include a <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> element in your manifest for {@code "android.hardware.consumerir"} ({@link android.content.pm.PackageManager#FEATURE_CONSUMER_IR}).</p>
+
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="Multimedia">Multimedia</h2>
+
+<h3 id="AdaptivePlayback">Adaptive playback</h3>
+
+<p>Support for adaptive video playback is now available with the {@link android.media.MediaCodec} APIs, enabling seamless change in resolution during playback onto a {@link android.view.Surface}—you can feed the decoder input frames of a new resolution and the resolution of the output buffers change without a significant gap.</p>
+
+<p>You can enable adaptive playback by adding two keys to {@link android.media.MediaFormat} that specify the maximum resolution that your app requires from the codec: {@link android.media.MediaFormat#KEY_MAX_WIDTH} and {@link android.media.MediaFormat#KEY_MAX_HEIGHT}. With these added to your {@link android.media.MediaFormat}, pass the {@link android.media.MediaFormat} to your {@link android.media.MediaCodec} instance with {@link android.media.MediaCodec#configure configure()}.</p>
+
+<p>The codec will transition between resolutions that are the same as or smaller than these values in a seamless fashion. The codec may also support resolutions larger than the specified maximums (as long as it is within the limits of supported profiles), but transitions to larger resolutions may not be seamless.</p>
+
+<p>To change the resolution while decoding H.264 video, continue to queue frames using MediaCodec.queueInputBuffer(), but be certain that you provide the new Sequence Parameter Set (SPS) and Picture Parameter Set (PPS) values together with the Instantaneous Decoder Refresh (IDR) frame in a single buffer.</p>
+
+<p>However, before you attempt to configure your codec for adaptive playback, you must verify that the device supports adaptive playback by calling {@link android.media.MediaCodecInfo.CodecCapabilities#isFeatureSupported} with {@link android.media.MediaCodecInfo.CodecCapabilities#FEATURE_AdaptivePlayback}.</p>
+
+<p class="note"><strong>Note:</strong> Support for adaptive playback is vendor specific. Some codecs may require more memory for larger resolution hints. Therefore, you should set the resolution maximums based on the source material you are decoding.</p>
+
+<h3 id="AudioTimestamp">On-demand audio timestamps</h3>
+
+<p>To facilitate audio-video synchronization, the new {@link android.media.AudioTimestamp} class provides timeline details about a specific "frame" in an audio stream handled by {@link android.media.AudioTrack}. To get the most recent timestamp available, instantiate an {@link android.media.AudioTimestamp} object and pass it to {@link android.media.AudioTrack#getTimestamp getTimestamp()}. If the request for the timestamp succeeds, the {@link android.media.AudioTrack} instance is filled in with a position in frame units, together with the estimated time when that frame either was presented or is committed to be presented.</p>
+
+<p>You can use the value of {@code nanoTime} in the {@link android.media.AudioTimestamp} (which is monotonic) to find the closest associated video frame compared to {@code framePosition} so you can drop, duplicate, or interpolate video frames to match the audio. Alternatively, you can determine the delta time between the value of {@code nanoTime} and a future video frame’s expected time (with consideration for the sample rate) to predict which audio frame is expected at the same moment as a video frame.</p>
+
+<h3 id="ImageReader">Surface image reader</h3>
+
+<p>The new {@link android.media.ImageReader} API provides you direct access to image buffers as they are rendered into a {@link android.view.Surface}. You can acquire an {@link android.media.ImageReader} with the static method {@link android.media.ImageReader#newInstance newInstance()}. Then call {@link android.media.ImageReader#getSurface()} to create a new {@link android.view.Surface} and deliver your image data with a producer such as {@link android.media.MediaPlayer} or {@link android.media.MediaCodec}. To be notified when new images are available from the surface, implement the {@link android.media.ImageReader.OnImageAvailableListener} interface and register it with {@link android.media.ImageReader#setOnImageAvailableListener setOnImageAvailableListener()}.</p>
+
+<p>Now as you draw content to your {@link android.view.Surface}, your {@link android.media.ImageReader.OnImageAvailableListener} receives a call to {@link android.media.ImageReader.OnImageAvailableListener#onImageAvailable onImageAvailable()} as each new image frame becomes available, providing you with the corresponding {@link android.media.ImageReader}. You can use the {@link android.media.ImageReader} to acquire the frame's image data as an {@link android.media.Image} object by calling {@link android.media.ImageReader#acquireLatestImage()} or {@link android.media.ImageReader#acquireNextImage()}.</p>
+
+<p>The {@link android.media.Image} object provides direct access to the image's timestamp, format, dimensions, and pixel data in a {@link java.nio.ByteBuffer}. However, in order for the {@link android.media.Image} class to interpret your images, they must be formatted according to one of the types defined by constants in either {@link android.graphics.ImageFormat} or {@link android.graphics.PixelFormat}. </p>
+
+<h3 id="PeakRms">Peak and RMS measurement</h3>
+
+<p>You can now query the peak and RMS of the current audio stream from {@link android.media.audiofx.Visualizer} by creating a new instance of {@link android.media.audiofx.Visualizer.MeasurementPeakRms} and passing it to {@link android.media.audiofx.Visualizer#getMeasurementPeakRms getMeasurementPeakRms()}. When you call this method, the peak and RMS values of the given {@link android.media.audiofx.Visualizer.MeasurementPeakRms} are set to the latest measured values.</p>
+
+<h3 id="LoudnessEnhancer">Loudness enhancer</h3>
+
+<p>The {@link android.media.audiofx.LoudnessEnhancer} is a new subclass of {@link android.media.audiofx.AudioEffect} that allows you to increase the audible volume of your {@link android.media.MediaPlayer} or {@link android.media.AudioTrack}. This can be especially useful in conjunction with the new {@link android.media.audiofx.Visualizer#getMeasurementPeakRms getMeasurementPeakRms()} method mentioned above, in order to increase the volume of spoken audio tracks while other media is currently playing.</p>
+
+<h3 id="RemoteController">Remote controllers</h3>
+
+<p>Android 4.0 (API level 14) introduced the {@link android.media.RemoteControlClient} APIs that allow media apps to consume media controller events from remote clients such as media controls on the lock screen. Now the new {@link android.media.RemoteController} APIs allow you to build your own remote controller, enabling the creation of innovative new apps and peripherals that can control the playback of any media app that integrates with {@link android.media.RemoteControlClient}.</p>
+
+<p>To build a remote controller, you can implement your user interface any way you want to, but to deliver the media button events to the user's media app you must create a service that extends the {@link android.service.notification.NotificationListenerService} class and implements the {@link android.media.RemoteController.OnClientUpdateListener} interface. Using the {@link android.service.notification.NotificationListenerService} as the basis is important because it provides the appropriate privacy restrictions, which require users to enable your app as a notification listener within the system security settings.</p>
+
+<p>The {@link android.service.notification.NotificationListenerService} class includes a couple abstract methods you must implement, but if you are only concerned with the media controller events for handling media playback, you can leave your implementation for those empty and instead focus on the {@link android.media.RemoteController.OnClientUpdateListener} methods.</p>
+
+<h3 id="Ratings">Ratings from remote controllers</h3>
+
+<p>Android 4.4 builds upon the existing capabilities for remote control clients (apps that receive media control events with the {@link android.media.RemoteControlClient}) by adding the ability for users to rate the current track from the remote controller.</p>
+
+<p>The new {@link android.media.Rating} class encapsulates information about a user rating. A rating is defined by its rating style (either {@link android.media.Rating#RATING_HEART}, {@link android.media.Rating#RATING_THUMB_UP_DOWN}, {@link android.media.Rating#RATING_3_STARS}, {@link android.media.Rating#RATING_4_STARS}, {@link android.media.Rating#RATING_5_STARS} or {@link android.media.Rating#RATING_PERCENTAGE}) and the rating value that's appropriate for that style.</p>
+
+<p>To allow users to rate your tracks from a remote controller:</p>
+<ul>
+<li> Signal that you'd like to expose the rating UI to the user (if applicable) by adding the {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_RATING} flag in {@link android.media.RemoteControlClient#setTransportControlFlags setTransportControlFlags()}. </li>
+<li>Call {@link android.media.RemoteControlClient#editMetadata editMetadata()} to retrieve a {@link android.media.RemoteControlClient.MetadataEditor} and pass it {@link android.media.MediaMetadataEditor#RATING_KEY_BY_USER} with {@link android.media.MediaMetadataEditor#addEditableKey addEditableKey()}. </li>
+<li>Then specify the rating style by calling {@link android.media.MediaMetadataEditor#putObject putObject()} and passing it {@link android.media.MediaMetadataEditor#RATING_KEY_BY_USER} as the key and one of the above rating styles as the value.</li>
+</ul>
+
+<p>To receive a callback when the user changes the rating from the remote controller, implement the new {@link android.media.RemoteControlClient.OnMetadataUpdateListener} interface and pass an instance to {@link android.media.RemoteControlClient#setMetadataUpdateListener setMetadataUpdateListener()}. When the user changes the rating, your {@link android.media.RemoteControlClient.OnMetadataUpdateListener} receives a call to {@link android.media.RemoteControlClient.OnMetadataUpdateListener#onMetadataUpdate onMetadataUpdate()}, passing {@link android.media.MediaMetadataEditor#RATING_KEY_BY_USER} as the key and a {@link android.media.Rating} object as the value.</p>
+
+<h3 id="ClosedCaptions">Closed captions</h3>
+
+<p>{@link android.widget.VideoView} now supports <a href="http://dev.w3.org/html5/webvtt/" class="external-link">WebVTT</a> subtitle tracks when playing HTTP Live Stream (HLS) videos, displaying the subtitle track according to the closed caption preferences the user has defined in system settings. </p>
+
+<p>You can also provide {@link android.widget.VideoView} with your WebVTT subtitle tracks using the {@link android.widget.VideoView#addSubtitleSource addSubtitleSource()} method. This method accepts an {@link java.io.InputStream} that carries the subtitle data and a {@link android.media.MediaFormat} object that specifies the format for the subtitle data, which you can specify using {@link android.media.MediaFormat#createSubtitleFormat createSubtitleFormat()}. These subtitles also appear over the video according to the user's preferences. </p>
+
+<p>If you do not use {@link android.widget.VideoView} to display your video content, you should make your subtitle overlay match the user's closed captioning preference as closely as possible. A new {@link android.view.accessibility.CaptioningManager} API allows you to query the user’s closed captioning preferences, including styles defined by {@link android.view.accessibility.CaptioningManager.CaptionStyle}, such as typeface and color. In case the user adjusts some preferences once your video has already started, you should listen for changes to the preferences by registering an instance of {@link android.view.accessibility.CaptioningManager.CaptioningChangeListener} to receive a callback when any of the preferences change, then update your subtitles as necessary.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="Animations">Animation & Graphics</h2>
+
+
+<h3 id="Transitions">Scenes and transitions</h3>
+
+<p>The new {@link android.transition} framework provides APIs that facilitate animations between different states of your user interface. A key feature is the ability for you to define distinct states of your UI, known as "scenes," by creating a separate layout for each one. When you want to animate from one scene to another, execute a "transition," which calculates the necessary animation to change the layout from the current scene to the next scene.</p>
+
+<p>To transition between two scenes, you generally need to perform the following:</p>
+<ol>
+<li>Specify the {@link android.view.ViewGroup} containing the UI components you want to change.</li>
+<li>Specify the layout representing the end-result of the change (the next scene).</li>
+<li>Specify the type of transition that should animate the layout change.</li>
+<li>Execute the transition.</li>
+</ol>
+
+<p>You can use a {@link android.transition.Scene} object to accomplish steps 1 and 2. A {@link android.transition.Scene} contains metadata describing the properties of a layout that are necessary to perform a transition, including the scene's parent view and the scene's layout. You can create a {@link android.transition.Scene} using a class constructor or the static method {@link android.transition.Scene#getSceneForLayout getSceneForLayout()}.</p>
+
+<p>You must then use the {@link android.transition.TransitionManager} to accomplish steps 3 and 4. One way is to pass your {@link android.transition.Scene} to the static method {@link android.transition.TransitionManager#go go()}. This finds the scene's parent view in the current layout and performs a transition on the child views in order to reach the layout defined by the {@link android.transition.Scene}.</p>
+
+<p>Alternatively, you don't need to create a {@link android.transition.Scene} object at all, but can instead call {@link android.transition.TransitionManager#beginDelayedTransition beginDelayedTransition()}, specifying a {@link android.view.ViewGroup} that contains the views you want to change. Then add, remove, or reconfigure the target views. After the system lays out the changes as necessary, a transition starts to animate all the affected views.</p>
+
+<p>For additional control, you can define sets of transitions that should occur between pre-defined scenes, using an XML file in your project {@code res/transition/} directory. Inside a {@code <transitionManager>} element, specify one or more {@code <transition>} tags that each specify a scene (a reference to a layout file) and the transition to apply when entering and/or exiting that scene. Then inflate this set of transitions using {@link android.transition.TransitionInflater#inflateTransitionManager inflateTransitionManager()}. Use the returned {@link android.transition.TransitionManager} to execute each transition with {@link android.transition.TransitionManager#transitionTo transitionTo()}, passing a {@link android.transition.Scene} that is represented by one of the {@code <transition>} tags. You can also define sets of transitions programmatically with the {@link android.transition.TransitionManager} APIs.</p>
+
+<p>When specifying a transition, you can use several predefined types defined by subclasses of {@link android.transition.Transition}, such as {@link android.transition.Fade} and {@link android.transition.ChangeBounds}. If you don't specify a transition type, the system uses {@link android.transition.AutoTransition} by default, which automatically fades, moves, and resizes views as necessary. Additionally, you can create custom transitions by extending any of these classes to perform the animations however you'd like. A custom transition can track any property changes you'd like, and create any animation you want to based on those changes. For example, you could provide a subclass of {@link android.transition.Transition} that listens for changes to the "rotation" property of a view then animate any changes.</p>
+
+<p>For more information, see the {@link android.transition.TransitionManager} documentation.</p>
+
+<h3 id="AnimatorPause">Animator pausing</h3>
+
+<p>The {@link android.animation.Animator} APIs now allow you to pause and resume an ongoing animation with methods {@link android.animation.Animator#pause()} and {@link android.animation.Animator#resume()}.</p>
+
+<p>To track the state of an animation, you can implement the {@link android.animation.Animator.AnimatorPauseListener} interface, which provides callbacks when an animation is paused and resumed: {@link android.animation.Animator#pause()} and {@link android.animation.Animator#resume()}. Then add the listener to an {@link android.animation.Animator} object with {@link android.animation.Animator#addPauseListener addPauseListener()}. </p>
+
+<p>Alternatively, you can subclass the {@link android.animation.AnimatorListenerAdapter} abstract class, which now includes empty implementations for the pause and resume callbacks defined by {@link android.animation.Animator.AnimatorPauseListener}.</p>
+
+
+<h3 id="ReusableBitmaps">Reusable bitmaps</h3>
+
+<p>You can now reuse any mutable bitmap in {@link android.graphics.BitmapFactory} to decode any other bitmap—even when the new bitmap is a different size---as long as the resulting byte count of the decoded bitmap (available from {@link android.graphics.Bitmap#getByteCount()}) is less than or equal to the allocated byte count of the reused bitmap (available from {@link android.graphics.Bitmap#getAllocationByteCount()}. For more information, see {@link android.graphics.BitmapFactory.Options#inBitmap}.</p>
+
+<p>New APIs for {@link android.graphics.Bitmap} allow similar reconfiguration for reuse outside of {@link android.graphics.BitmapFactory} (for manual bitmap generation or custom decoding logic). You can now set a bitmap’s dimensions with methods {@link android.graphics.Bitmap#setHeight setHeight()} and {@link android.graphics.Bitmap#setWidth setWidth()}, and specify specify a new {@link android.graphics.Bitmap.Config} with {@link android.graphics.Bitmap#setConfig setConfig()} without affecting the underlying bitmap allocation. The {@link android.graphics.Bitmap#reconfigure reconfigure()} method also provides a convenient way to combine these changes with one call.</p>
+
+<p>However, you should not reconfigure a bitmap that's currently used by the view system, because the underlying pixel buffer will not be remapped in a predictable way.</p>
+
+
+
+
+
+
+
+
+<h2 id="UserContent">User Content</h2>
+
+<h3 id="StorageAccess">Storage access framework</h3>
+
+<p>On previous versions of Android, if you want your app to retrieve a specific type of file from another app, it must invoke an intent with the {@link android.content.Intent#ACTION_GET_CONTENT} action. This action is still the appropriate way to request a file that you want to <em>import</em> into your app. However, Android 4.4 introduces the {@link android.content.Intent#ACTION_OPEN_DOCUMENT} action, which allows the user to select a file of a specific type and grant your app long-term read access to that file (possibly with write access) without importing the file to your app.</p>
+
+<p>If you're developing an app that provides storage services for files (such as a cloud save service), you can participate in this unified UI for picking files by implementing a content provider as a subclass of the new {@link android.provider.DocumentsProvider} class. Your subclass of {@link android.provider.DocumentsProvider} must include an intent filter that accepts the {@link android.provider.DocumentsContract#PROVIDER_INTERFACE} action (<code>"android.content.action.DOCUMENTS_PROVIDER"</code>). You must then implement the four abstract methods in the {@link android.provider.DocumentsProvider}:</p>
+
+<dl>
+<dt>{@link android.provider.DocumentsProvider#queryRoots queryRoots()}</dt>
+<dd>This must return a {@link android.database.Cursor} that describes all the root directories of your document storage, using columns defined in {@link android.provider.DocumentsContract.Root}.</dd>
+<dt>{@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()}</dt>
+<dd>This must return a {@link android.database.Cursor} that describes all the files in the specified directory, using columns defined in {@link android.provider.DocumentsContract.Document}.</dd>
+<dt>{@link android.provider.DocumentsProvider#queryDocument queryDocument()}</dt>
+<dd>This must return a {@link android.database.Cursor} that describes the specified file, using columns defined in {@link android.provider.DocumentsContract.Document}.</dd>
+<dt>{@link android.provider.DocumentsProvider#openDocument openDocument()}</dt>
+<dd>This must return a {@link android.os.ParcelFileDescriptor} representing the specified file. The system calls this method once the user selects a file and the client app requests access to it by calling {@link android.content.ContentResolver#openFileDescriptor openFileDescriptor()}.</dd>
+</dl>
+
+<p>For more information, see the <a href="{@docRoot}guide/topics/providers/document-provider.html">Storage Access Framework</a> guide.</p>
+
+
+<h3 id="ExternalStorage">External storage access</h3>
+
+<p>You can now read and write app-specific files on secondary external storage media, such as when a device provides both emulated storage and an SD card. The new method {@link android.content.Context#getExternalFilesDirs getExternalFilesDirs()} works the same as the existing {@link android.content.Context#getExternalFilesDir getExternalFilesDir()} method except it returns an array of {@link java.io.File} objects. Before reading or writing to any of the paths returned by this method, pass the {@link java.io.File} object to the new {@link android.os.Environment#getStorageState getStorageState()} method to verify the storage is currently available.</p>
+
+<p>Other methods for accessing your app-specific cache directory and OBB directory also now have corresponding versions that provide access to secondary storage devices: {@link android.content.Context#getExternalCacheDirs getExternalCacheDirs()} and {@link android.content.Context#getObbDirs getObbDirs()}, respectively.</p>
+
+<p>The first entry in the returned {@link java.io.File} array is considered the device's primary external storage, which is the same as the {@link java.io.File} returned by existing methods such as {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}.</p>
+
+<p class="note"><strong>Note:</strong> Beginning with Android 4.4, the platform no longer requires that your app acquire the {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} or {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} when you need to access only your app-specific regions of the external storage using the methods above. However, the permissions are required if you want to access the shareable regions of the external storage, provided by {@link android.os.Environment#getExternalStoragePublicDirectory getExternalStoragePublicDirectory()}. </p>
+
+<h3 id="SyncAdapter">Sync adapters</h3>
+
+<p>The new {@link android.content.ContentResolver#requestSync requestSync()} method in {@link android.content.ContentResolver} simplifies some of the procedure for defining a sync request for your {@link android.content.ContentProvider} by encapsulating requests in the new {@link android.content.SyncRequest} object, which you can create with {@link android.content.SyncRequest.Builder}. The properties in {@link android.content.SyncRequest} provide the same functionality as the existing {@link android.content.ContentProvider} sync calls, but adds the ability to specify that a sync should be dropped if the network is metered, by enabling {@link android.content.SyncRequest.Builder#setDisallowMetered setDisallowMetered()}.</p>
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="UserInput">User Input</h2>
+
+<h3 id="NewSensors">New sensor types</h3>
+
+<p>The new {@link android.hardware.Sensor#TYPE_GEOMAGNETIC_ROTATION_VECTOR}
+sensor provides rotation vector data based on a magnetometer, which is a useful alternative to the {@link android.hardware.Sensor#TYPE_ROTATION_VECTOR} sensor when a gyroscope is not available or when used with <a href="#BatchSensors">batched sensor events</a> to record the device's orientation while the phone is sleeping. This sensor requires less power than {@link android.hardware.Sensor#TYPE_ROTATION_VECTOR}, but may be prone to noisy event data and is most effective while the user is outdoors.</p>
+
+<p>Android also now supports built-in step sensors in hardware:</p>
+
+<dl>
+<dt>{@link android.hardware.Sensor#TYPE_STEP_DETECTOR}</dt>
+<dd>This sensor triggers an event each time the user takes a step. Upon each user step, this sensor delivers an event with a value of 1.0 and a timestamp indicating when the step occurred.</dd>
+<dt>{@link android.hardware.Sensor#TYPE_STEP_COUNTER}</dt>
+<dd>This sensor also triggers an event upon each detected step, but instead delivers the total accumulated number of steps since this sensor was first registered by an app.</dd>
+</dl>
+
+<p>Be aware that these two step sensors don't always deliver the same results. The {@link android.hardware.Sensor#TYPE_STEP_COUNTER} events occur with a higher latency than those from {@link android.hardware.Sensor#TYPE_STEP_DETECTOR}, but that's because the {@link android.hardware.Sensor#TYPE_STEP_COUNTER} algorithm does more processing to eliminate false positives. So the {@link android.hardware.Sensor#TYPE_STEP_COUNTER} may be slower to deliver events, but its results should be more accurate.</p>
+
+<p>Both step sensors are hardware dependent (Nexus 5 is the first device to support them), so you should check for availability with {@link android.content.pm.PackageManager#hasSystemFeature hasSystemFeature()}, using the {@link android.content.pm.PackageManager#FEATURE_SENSOR_STEP_DETECTOR} and {@link android.content.pm.PackageManager#FEATURE_SENSOR_STEP_COUNTER} constants.</p>
+
+<h3 id="BatchSensors">Batched sensor events</h3>
+
+<p>To better manage device power, the {@link android.hardware.SensorManager} APIs now allow you to specify the frequency at which you'd like the system to deliver batches of sensor events to your app. This doesn't reduce the number of actual sensor events available to your app for a given period of time, but instead reduces the frequency at which the system calls your {@link android.hardware.SensorEventListener} with sensor updates. That is, instead of delivering each event to your app the moment it occurs, the system saves up all the events that occur over a period of time, then delivers them to your app all at once.</p>
+
+<p>To provide batching, the {@link android.hardware.SensorManager} class adds two new versions of the {@link android.hardware.SensorManager#registerListener(SensorEventListener, Sensor, int, int) registerListener()} method that allow you to specify the "maximum report latency." This new parameter specifies the maximum delay that your {@link android.hardware.SensorEventListener} will tolerate for delivery of new sensor events. For example, if you specify a batch latency of one minute, the system will deliver the recent set of batched events at an interval no longer than one minute by making consecutive calls to your {@link android.hardware.SensorEventListener#onSensorChanged onSensorChanged()} method—once for each event that was batched. The sensor events will never be delayed longer than your maximum report latency value, but may arrive sooner if other apps have requested a shorter latency for the same sensor.</p>
+
+<p>However, be aware that the sensor will deliver your app the batched events based on your report latency <strong>only while the CPU is awake</strong>. Although a hardware sensor that supports batching will continue to collect sensor events while the CPU is asleep, it will not wake the CPU to deliver your app the batched events. When the sensor eventually runs out of its memory for events, it will begin dropping the oldest events in order to save the newest events. You can avoid losing events by waking the device before the sensor fills its memory then call {@link android.hardware.SensorManager#flush flush()} to capture the latest batch of events. To estimate when the memory will be full and should be flushed, call {@link android.hardware.Sensor#getFifoReservedEventCount()} to get the maximum number of sensor events it can save, and divide that number by the rate at which your app desires each event. Use that calculation to set wake alarms with {@link android.app.AlarmManager} that invoke your {@link android.app.Service} (which implements the {@link android.hardware.SensorEventListener}) to flush the sensor. It's okay that the alarm may execute even while the device is awake, because the alarm interval should be large enough that it occurs only a few times in a day.</p>
+
+
+<p class="note"><strong>Note:</strong> Not all devices support batching sensor events because it requires support by the hardware sensor. However, beginning with Android 4.4, you should always use the new {@link android.hardware.SensorManager#registerListener(SensorEventListener, Sensor, int, int) registerListener()} methods, because if the device does not support batching, then the system gracefully ignores the batch latency argument and delivers sensor events in real time.</p>
+
+<h3 id="Controllers">Controller identities</h3>
+
+<p>Android now identifies each connected controller with a unique integer that you can query with {@link android.view.InputDevice#getControllerNumber()}, making it easier for you to associate each controller to a different player in a game. The number for each controller may change due to controllers being disconnected, connected, or re-configured by the user, so you should track which controller number corresponds to each input device by registering an instance of {@link android.hardware.input.InputManager.InputDeviceListener}. Then call {@link android.view.InputDevice#getControllerNumber()} for each {@link android.view.InputDevice} when a change occurs.</p>
+
+<p>Connected devices also now provide product and vendor IDs that are available from {@link android.view.InputDevice#getProductId()} and {@link android.view.InputDevice#getVendorId()}. If you need to modify your key mappings based on the available set of keys on a device, you can query the device to check whether certain keys are available with {@link android.view.InputDevice#hasKeys}.</p>
+
+
+
+
+
+
+
+
+<h2 id="UI">User Interface</h2>
+
+<h3 id="ImmersiveMode">Immersive full-screen mode</h3>
+
+<p>To provide your app with a layout that fills the entire screen, the new {@link android.view.View#SYSTEM_UI_FLAG_IMMERSIVE} flag for {@link android.view.View#setSystemUiVisibility setSystemUiVisibility()} (when combined with {@link android.view.View#SYSTEM_UI_FLAG_HIDE_NAVIGATION}) enables a new <em>immersive</em> full-screen mode. While immersive full-screen mode is enabled, your activity continues to receive all touch events. The user can reveal the system bars with an inward swipe along the region where the system bars normally appear. This clears the {@link android.view.View#SYSTEM_UI_FLAG_HIDE_NAVIGATION} flag (and the {@link android.view.View#SYSTEM_UI_FLAG_FULLSCREEN} flag, if applied) so the system bars remain visible. However, if you'd like the system bars to hide again after a few moments, you can instead use the {@link android.view.View#SYSTEM_UI_FLAG_IMMERSIVE_STICKY} flag.</p>
+
+<h3 id="TranslucentBars">Translucent system bars</h3>
+
+<p>You can now make the system bars partially translucent with new themes, {@link android.R.style#Theme_Holo_NoActionBar_TranslucentDecor Theme.Holo.NoActionBar.TranslucentDecor} and {@link android.R.style#Theme_Holo_Light_NoActionBar_TranslucentDecor Theme.Holo.Light.NoActionBar.TranslucentDecor}. By enabling translucent system bars, your layout will fill the area behind the system bars, so you must also enable {@link android.R.attr#fitsSystemWindows} for the portion of your layout that should not be covered by the system bars.</p>
+
+<p>If you're creating a custom theme, set one of these themes as the parent theme or include the {@link android.R.attr#windowTranslucentNavigation} and {@link android.R.attr#windowTranslucentStatus} style properties in your theme.</p>
+
+<h3 id="NotificationListener">Enhanced notification listener</h3>
+
+<p>Android 4.3 added the {@link android.service.notification.NotificationListenerService} APIs, allowing apps to receive information about new notifications as they are posted by the system. In Android 4.4, notification listeners can retrieve additional metadata for the notification and complete details about the notification's actions:</p>
+
+<p>The new {@link android.app.Notification#extras Notification.extras} field includes a {@link android.os.Bundle} to deliver your notification builder additional metadata such as {@link android.app.Notification#EXTRA_TITLE} and {@link android.app.Notification#EXTRA_PICTURE}.
+The new {@link android.app.Notification.Action} class defines the characteristics of an action attached to the notification, which you can retrieve from the new {@link android.app.Notification#actions} field.</p>
+
+<h3 id="DrawableMirroring">Drawable mirroring for RTL layouts</h3>
+
+<p>On previous versions of Android, if your app includes images that should reverse their horizontal orientation for right-to-left layouts, you must include the mirrored image in a <code>drawables-ldrtl/</code> resource directory. Now, the system can automatically mirror images for you by enabling the {@link android.R.attr#autoMirrored} attribute on a drawable resource or by calling {@link android.graphics.drawable.Drawable#setAutoMirrored setAutoMirrored()}. When enabled, the {@link android.graphics.drawable.Drawable} is automatically mirrored when the layout direction is right-to-left.</p>
+
+<h3 id="A11y">Accessibility</h3>
+
+<p>The {@link android.view.View} class now allows you to declare "live regions" for portions of your UI that dynamically update with new text content, by adding the new {@link android.R.attr#accessibilityLiveRegion} attribute to your XML layout or calling {@link android.view.View#setAccessibilityLiveRegion setAccessibilityLiveRegion()}. For example, a login screen with a text field that displays an "incorrect password" notification should be marked as a live region, so the screen reader will recite the message when it changes.</p>
+
+<p>Apps that provide an <a href="{@docRoot}guide/topics/ui/accessibility/services.html">accessibility service</a> can now also enhance their capabilities with new APIs that provide information about view collections such as list or grid views using {@link android.view.accessibility.AccessibilityNodeInfo.CollectionInfo} and {@link android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo}.</p>
+
+
+
+
+
+
+
+
+
+<h2 id="Permissions">App Permissions</h2>
+
+<p>The following are new permissions that your app must request with the <a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code <uses-permission>}</a> tag to use certain new APIs:</p>
+
+<dl>
+<dt>{@link android.Manifest.permission#INSTALL_SHORTCUT}</dt>
+<dd>Allows an application to install a shortcut in Launcher</dd>
+<dt>{@link android.Manifest.permission#UNINSTALL_SHORTCUT} </dt>
+<dd>Allows an application to uninstall a shortcut in Launcher</dd>
+<dt>{@link android.Manifest.permission#TRANSMIT_IR}</dt>
+<dd>Allows an applicaiton to use the device's IR transmitter, if available</dd>
+</dl>
+
+<p class="note"><strong>Note:</strong> Beginning with Android 4.4, the platform no longer requires that your app acquire the {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} or {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} when you want to access your app-specific regions of the external storage using methods such as {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}. However, the permissions are still required if you want to access the shareable regions of the external storage, provided by {@link android.os.Environment#getExternalStoragePublicDirectory getExternalStoragePublicDirectory()}. </p>
+
+
+
+
+
+<h2 id="DeviceFeatures">Device Features</h2>
+
+<p>The following are new device features that you can declare with the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag to declare your app requirements and enable filtering on Google Play or check for at runtime:</p>
+
+<dl>
+<dt>{@link android.content.pm.PackageManager#FEATURE_CONSUMER_IR}</dt>
+<dd>The device is capable of communicating with consumer IR devices.</dd>
+<dt>{@link android.content.pm.PackageManager#FEATURE_DEVICE_ADMIN}</dt>
+<dd>The device supports device policy enforcement via device admins.</dd>
+<dt>{@link android.content.pm.PackageManager#FEATURE_NFC_HOST_CARD_EMULATION}</dt>
+<dd>The device supports host- based NFC card emulation.</dd>
+<dt>{@link android.content.pm.PackageManager#FEATURE_SENSOR_STEP_COUNTER}</dt>
+<dd>The device includes a hardware step counter.</dd>
+<dt>{@link android.content.pm.PackageManager#FEATURE_SENSOR_STEP_DETECTOR}</dt>
+<dd>The device includes a hardware step detector.</dd>
+</dl>
+
+
+
+
+
+
+
+
+<p style="margin-top:50px" class="note">For a detailed view of all API changes in Android 4.3, see the
+<a href="{@docRoot}sdk/api_diff/18/changes.html">API Differences Report</a>.</p>
+
+
+
diff --git a/docs/html/about/versions/kitkat.jd b/docs/html/about/versions/kitkat.jd
new file mode 100644
index 0000000..705e448
--- /dev/null
+++ b/docs/html/about/versions/kitkat.jd
@@ -0,0 +1,931 @@
+page.title=KitKat
+
+@jd:body
+
+
+<style>
+</style>
+
+<script>
+function revealSection(hashy) {
+ if (hashy != "" && !$(hashy).is(":visible")) {
+ sectionId = $(hashy).closest(".version-section").attr("id");
+ link = $("#title-tabs a[href$="+sectionId+"]");
+ link.parent().addClass("selected");
+ link.parent().siblings().removeClass("selected");
+
+ sectionDiv = $(".version-section"+link.attr("href"));
+ if (sectionDiv.length) {
+ $(".version-section").hide();
+ sectionDiv.show();
+ }
+
+ $('html, body').animate({
+ scrollTop: $(hashy).offset().top
+ }, 100);
+ }
+}
+
+$(document).ready(function() {
+ $("#title-tabs li a").each(function() {
+ $(this).click(function(){
+ $(this).parent().addClass("selected");
+ $(this).parent().siblings().removeClass("selected");
+ $(".version-section").hide();
+ $($(this).attr("href")).show();
+ return false;
+ });
+ });
+
+ hashy = escapeHTML(location.hash);
+ revealSection(hashy);
+});
+
+window.onhashchange = function () {
+ revealSection(escapeHTML(location.hash));
+}
+
+</script>
+
+<style>
+
+</style>
+
+<!-- BEGIN ANDROID 4.4 -->
+<div id="44-android-44" class="version-section">
+
+ <div style="padding:0px 0px 0px 60px;margin-top:-3px;float:right;">
+ <img src="{@docRoot}images/kk-android-44.png" alt="Android 4.3 on phone and tablet" width="380">
+ </div>
+
+ <div class="landing-docs" style="float:right;clear:both;margin:22px 0 2em 3em;">
+ <div class="col-4 normal-links highlights" style="font-size:12px;">
+ <h3 id="thisd" >Key Developer Features</h3>
+ <ul style="list-style-type:none;">
+ <!--<li><a href="#44-ui">UI refresh</a></li>-->
+ <li><a href="#44-hce">Host Card Emulation</a></li>
+ <li><a href="#44-printing">Printing framework</a></li>
+ <li><a href="#44-storage-access">Storage access framework</a></li>
+ <li><a href="#44-sensors">Low-power sensors</a></li>
+ <li><a href="#44-sms-provider">SMS provider</a></li>
+ <li><a href="#44-immersive">Full-screen Immersive mode</a></li>
+ <li><a href="#44-transitions">Transitions framework</a></li>
+ <li><a href="#44-webview">Chromium WebView</a></li>
+ <li><a href="#44-screen-recording">Screen recording</a></li>
+ <li><a href="#44-renderscript-ndk">RenderScript NDK</a></li>
+ <li><a href="#44-bluetooth">Bluetooth HOGP and MAP</a></li>
+ <li><a href="#44-ir-blasters">IR Blasters</a></li>
+ <li><a href="#44-closed-captioning">Closed captioning settings</a></li>
+ <li><a href="#44-international-users">RTL features</a></li>
+ <li><a href="#44-security">Security enhancements</a></li>
+ <li><a href="#44-tools">Tools for analyzing memory use</a></li>
+ </ul>
+ </div>
+</div>
+
+
+<p>Welcome to Android 4.4 KitKat!</p>
+
+<p>Android KitKat brings all of Android's
+most innovative, most beautiful, and most useful features to more devices everywhere. </p>
+<p>This document provides a glimpse of what's new for
+developers. </p>
+<p>Find out more about KitKat for consumers at <a
+href="http://www.android.com/whatsnew">www.android.com</a>.</p>
+
+
+<h2 id="svelte" style="line-height:1.25em;">Making Android for everyone</h2>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> is designed to run fast, smooth,
+ and responsively on a much broader range of devices than ever before — including
+ on millions of entry-level devices around the world that have as little as <strong>512MB
+ RAM</strong>. </p>
+
+<!--<p>Now in KitKat, Android brings all of
+its most innovative, most beautiful, and most useful features and APIs to devices everywhere. </p>-->
+<p>KitKat streamlines every major component to reduce memory use and introduces new APIs
+ and tools to help you create innovative, responsive, memory-efficient applications.
+
+<p>OEMs building the next generation of Android devices can take advantage of <strong>targeted recommendations
+ and options</strong> to run <span style="white-space:nowrap;">Android 4.4</span> efficiently, even on low-memory devices. Dalvik JIT code cache tuning,
+ kernel samepage merging (KSM), swap to zRAM, and other optimizations help manage
+ memory. New configuration options let OEMs tune out-of-memory levels for processes, set graphics cache sizes,
+ control memory reclaim, and more. </p>
+
+<p>In Android itself, changes across the system improve memory management and reduce
+ memory footprint. Core system processes are trimmed to <strong>use less heap</strong>, and they now
+ more <strong>aggressively protect system memory</strong> by killing long-running cached and idle
+ processes that consume large memory. When multiple services start at once — such
+ as when network connectivity changes — Android now <strong>launches the services serially</strong>,
+ in small groups, to avoid peak memory demands.</p>
+
+<p>For developers, <span style="white-space:nowrap;">Android 4.4</span> helps you deliver <strong>apps that are efficient and responsive</strong> on all devices. A new API,
+ <span style="font-size:11.5px;font-family:monospace;">ActivityManager.isLowRamDevice()</span>,
+ lets you tune your app's
+ behavior to match the device's memory configuration. You can modify or disable large-memory features
+ as needed, depending on the use-cases you want to support on entry-level devices. Learn more about optimizing your apps for low-memory devices <a href="">here</a>.</p>
+
+<p>New tools give also give you powerful insight into your app's memory use. The <strong>procstats tool</strong> details memory use over time,
+ with run times and memory footprint for foreground
+ apps and background services. An on-device view is also available as a new developer option. The <strong>meminfo tool</strong> is also enhanced to
+ make it easier to spot memory trends and issues, and it reveals additional memory
+ overhead that hasn't previously been visible. </p>
+
+<!--
+ <p>With memory effieciency and , along with the new advantage of memory-saving <span style="font-size:11px;font-family:monospace;">ArrayMap/ArraySet</span>
+ APIs, along many other high-performance, low-power APIs and capabilities in <span style="white-space:nowrap;">Android 4.4</span>. -->
+
+<h2 id="44-hce">New NFC capabilities through Host Card Emulation</h2>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> introduces new platform support for secure NFC-based transactions
+through <strong>Host Card Emulation</strong> (HCE), for payments, loyalty programs,
+card access, transit passes, and other custom services. With HCE, any app on an
+Android device can emulate an NFC smart card, letting users tap to initiate
+transactions with an app of their choice — no provisioned secure element (SE)
+in the device is needed. Apps can also use a new Reader Mode to act as readers
+for HCE cards and other NFC-based transactions.</p>
+
+<div style="float:right;margin:32px;width:200px;">
+ <img src="{@docRoot}images/kk-contactless-card.png" alt="" width="200" style="margin-bottom:0;">
+<!--<p class="img-caption" style="padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;">You can add printing support to your apps or develop print services to support specific types of printers.</p>-->
+</div>
+
+<p>Android HCE emulates ISO/IEC 7816 based smart cards that use the contactless
+ISO/IEC 14443-4 (ISO-DEP) protocol for transmission. These cards are used by
+many systems today, including the existing EMVCO NFC payment infrastructure.
+Android uses Application Identifiers (AIDs) as defined in ISO/IEC 7816-4 as the
+basis for routing transactions to the correct Android applications.</p>
+
+<p>Apps declare the AIDs they support in their manifest files, along with a
+category identifier that indicates the type of support available (for example,
+"payments"). In cases where multiple apps support the same AID in the same
+category, Android displays a dialog that lets the user choose which app to use. </p>
+
+<p>When the user taps to pay at a point-of-sale terminal, the system extracts the
+preferred AID and routes the transaction to the correct application. The app
+reads the transaction data and can use any local or network-based services to
+verify and then complete the transaction. </p>
+
+<p>Android HCE requires an NFC controller to be present in the device. Support for
+HCE is already widely available on most NFC controllers, which offer dynamic
+support for both HCE and SE transactions. <span style="white-space:nowrap;">Android 4.4</span> devices that support NFC
+will include Tap & Pay for easy payments using HCE.</p>
+
+<h2 id="44-printing">Printing framework</h2>
+
+<p>Android apps can now <strong>print any type of content</strong> over Wi-Fi or
+cloud-hosted services such as Google Cloud Print. In print-enabled apps, users
+can discover available printers, change paper sizes, choose specific pages to
+print, and print almost any kind of document, image, or file. </p>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> introduces native platform support for printing, along with APIs for
+managing printing and adding new types of printer support. The platform provides
+a print manager that mediates between apps requesting printing and installed
+print services that handle print requests. The print manager provides shared
+services and a system UI for printing, giving users consistent control over
+printing from any app. The print manager also ensures the security of content as
+it's passed across processes, from an app to a print service.</p>
+
+<div style="float:right;margin:22px 0px 0px 24px;width:490px;">
+ <img src="{@docRoot}images/kk-print-land-n5.png" alt="" width="471" style="margin-bottom:0;">
+<p class="img-caption" style="padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;">You can add printing support to your apps or develop print services to support specific types of printers.</p>
+</div>
+
+
+
+<p>Printer manufacturers can use new APIs to develop their own <strong>print services</strong> —
+pluggable components that add vendor-specific logic and services for
+communicating with specific types of printers. They can build print services and
+distribute them through Google Play, making it easy for users to find and
+install them on their devices. Just as with other apps, you can update print
+services over-the-air at any time.</p>
+
+<p>App developers can use new APIs to <strong>add printing capabilities</strong> to their apps with
+minimal code changes. In most cases, you would add a print action to your Action
+Bar and a UI for choosing items to print. You would also implement APIs to
+create print jobs, query the print manager for status, and cancel jobs. This
+lets you print nearly any type of content, from local images and documents to
+network data or a view rendered to a canvas. </p>
+
+<p>For broadest compatibility, Android uses PDF as its primary file format for
+printing. Before printing, your app needs to generate a properly paginated PDF
+version of your content. For convenience, the printing API provides native and
+WebView helper classes to let you create PDFs using standard Android drawing
+APIs. If your app knows how to draw the content, it can quickly create a PDF for
+printing.</p>
+
+<p>Most devices running <span style="white-space:nowrap;">Android 4.4</span> will include Google Cloud Print pre-installed
+as a print service, as well as several Google apps that support printing,
+including Chrome, Drive, Gallery, and QuickOffice.</p>
+
+<h2 id="44-storage-access">Storage access framework</h2>
+
+
+<p>A new storage access framework makes it
+simple for users to browse and open documents, images, and other files across
+all of their their preferred document storage providers. A
+standard, easy-to-use UI lets users browse files and access recents in a consistent way across apps and providers.</p>
+
+<div style="float:right;margin:22px 0px 0px 24px;width:490px;">
+ <img src="{@docRoot}images/kk-saf2-n5.png" alt="" width="240" style="margin-bottom:0;">
+<img src="{@docRoot}images/kk-saf1-n5.png" alt="" width="240" style="margin-bottom:0;padding-left:6px;">
+
+<p class="img-caption" style="padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;">The storage access framework brings users, apps, and storage services together in a single convenient ecosystem.</p>
+</div>
+
+
+
+<p>Storage services can participate in this ecosystem by implementing a new
+document provider class that encapsulates their services. The provider class
+includes all of the APIs needed to register the provider with the system and
+manage browsing, reading, and writing documents in the provider. The document
+provider can give users access to any local or remote data that can be
+represented as files — from text, photos, and wallpapers to video, audio, and
+more. </p>
+
+<p>If you build a document provider for a local or cloud-based service, you can
+deliver it to users as part of your existing Android app. After downloading and
+installing the app, users will have instant access your service from any app
+that participates in the framework. This can help you gain exposure and user
+engagement, since users will find your services more easily.</p>
+
+<p>If you develop an app that manages files or documents, you can integrate with
+the storage access framework just by using new <span style ="font-size:11.5px;">CREATE_DOCUMENT</span>
+or <span style ="font-size:11.5px;">OPEN_DOCUMENT</span>
+intents to open or create files — the system automatically displays the
+standard UI for browsing documents, including all available document providers.
+
+<p>You can integrate your app one time, for all providers, without any
+ vendor-specific code. As users add or remove providers, they’ll continue to
+ have access to their preferred services from your app, without changes or
+ updates needed in your code.</p>
+
+<p>
+ The storage access framework is integrated with the existing <span style=
+ "font-size:11.5px;">GET_CONTENT</span> intent, so users also have access to
+ all of their previous content and data sources from the new system UI for
+ browsing. Apps can continue using <span style=
+ "font-size:11.5px;">GET_CONTENT</span> as a way to let users import data. The
+ storage access framework and system UI for browsing make it easier for users
+ to find and import their data from a wider range of sources.
+</p>
+
+<p>Most devices running <span style="white-space:nowrap;">Android 4.4</span> will include Google Drive and local
+ storage pre-integrated as document providers, and Google apps that work
+ with files also use the new framework. </p>
+
+
+<h2 id="44-sensors">Low-power sensors</h2>
+
+
+
+<!--<div style="float:right;padding-top:0em;width:372px;margin-left:2em;">
+
+<img src="{@docRoot}images/kk-rs-chart-versions.png" alt="Renderscipt optimizations chart" width="360" height="252" style="border:1px solid #ddd;border-radius: 6px;" />
+<p class="img-caption" style="margin-left:6px;line-height:1.25em;">Performance benchmarks for Android 4.4 relative to Android 4.3, run on the same devices (Nexus 7, Nexus 10).</p>
+</div> -->
+
+<h4 id="44-sensor-batching">Sensor batching</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> introduces platform support for hardware sensor batching, a new
+optimization that can dramatically reduce power consumed by ongoing sensor
+activities. </p>
+
+<p>With sensor batching, Android works with the device hardware to
+collect and deliver sensor events efficiently in batches, rather than
+individually as they are detected. This lets the device's application processor
+remain in a low-power idle state until batches are delivered.</p>
+
+<p>You can request batched events from any sensor using a standard event listener,
+and you can control the interval at which you receive batches. You can also
+request immediate delivery of events between batch cycles. </p>
+
+<!-- <div style="margin:0 0;width:770px;height">
+ <div style="float:right;width:380px;">
+<img src="{@docRoot}images/kk-memdinfo.png" alt="" width="360" height="200" style="margin-bottom:0;box-shadow: 3px 10px 12px 1px #eee;border:1px solid #ddd;border-radius: 6px;">
+<p class="img-caption" style="padding-top:1.5em;line-height:1.25em;">Real-world power reductions for apps.</p>
+</div>
+
+ <div style="width:380px;">
+<img src="{@docRoot}images/kk-procstdats.png" alt="" width="360" height="200" style="margin-bottom:0;box-shadow: 3px 10px 18px 1px #eee;border:1px solid #ddd;border-radius: 6px;">
+<p class="img-caption" style="padding-top:1.5em;line-height:1.25em;">Step detector power use over time.</p>
+</div>
+
+</div>-->
+
+
+
+
+
+
+
+
+
+
+<div style="float:right;margin:1em 2em 0em 5em;width:200px;clear:both">
+ <img src="{@docRoot}images/kk-moves-n5.png" alt="" width="240" style="margin-bottom:0;">
+
+<p class="img-caption" style="padding-top:1.5em;margin-left:6px;line-height:1.25em;"><a class="external-link" href="https://play.google.com/store/apps/details?id=com.protogeo.moves">Moves</a> <!-- and <a class="external-link" href="https://play.google.com/store/apps/details?id=com.runtastic.android.pedometer.lite">Runtastic Pedometer</a> are using --> is using the hardware step-detector to for reduced power comsumption.</p>
+</div>
+
+<p>Sensor batching is
+ideal for low-power, long-running use-cases such as fitness, location tracking,
+monitoring, and more. It can makes your app more efficient and it lets you track
+sensor events continuously — even while the screen is off and the system is
+asleep. </p>
+
+<p>Sensor batching is currently available on Nexus 5, and we're working with our
+chipset partners to bring it to more devices as soon as possible. </p>
+
+<h4 id="44-step-detector">Step Detector and Step Counter</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> also adds platform support for two new composite sensors — step
+detection and step counter — that let your app track steps when the user is
+walking, running, or climbing stairs. These new sensors are implemented in
+hardware for low power consumption.</p>
+
+<p>The step detector analyzes accelerometer input to recognize when the user has
+taken a step, then triggers an event with each step. The step counter tracks the
+total number of steps since the last device reboot and triggers an event with
+each change in the step count. Because the logic and sensor management is built
+into the platform and underlying hardware, you don't need to maintain your own
+detection algorithms in your app. </p>
+
+<p>Step detector and counter sensors are available on Nexus 5, and we're working
+with our chipset partners to bring them to new devices as soon as possible. </p>
+
+
+<h2 id="44-sms-provider">SMS provider</h2>
+
+<p>If you develop a messaging app that uses SMS or MMS, you can now use a shared
+SMS provider and new APIs to manage your app's message storage and retrieval.
+The new SMS provider and APIs define a standardized interaction model for all
+apps that handle SMS or MMS messages. </p>
+
+<p>Along with the new provider and APIs, <span style="white-space:nowrap;">Android 4.4</span> introduces new semantics for
+receiving messages and writing to the provider. When a message is received, the
+system routes it directly to the user's default messaging app using the new
+<span style ="font-size:11.5px;">SMS_DELIVER</span> intent. Other apps can still listen for incoming messages using the
+<span style ="font-size:11.5px;">SMS_RECEIVED</span> intent. Also, the system now allows only the default app to write
+message data to the provider, although other apps can read at any time. Apps
+that are not the user's default can still send messages — the system handles
+writing those messages to the provider on behalf of the app, so that users can
+see them in the default app. </p>
+
+<p>The new provider and semantics help to improve the user's experience when
+multiple messaging apps are installed, and they help you to build new messaging
+features with fully-supported, forward-compatible APIs.</p>
+
+<h2 id="44-beautiful-apps">New ways to build beautiful apps</h2>
+
+
+
+
+<!--
+ <div class="framed-nexus5-port-span-5" style="margin-left:0;padding:auto 1em 1em 0;">
+ <video class="play-on-hover" autoplay="">
+ <source src="{@docRoot}images/home.mp4" type="video/mp4">
+ <source src="{@docRoot}images/immdersive.webm" type="video/webm">
+ <source src="{@docRoot}images/immerdsive.ogv" type="video/ogg">
+ </video>
+ </div>
+ <div class="figure-caption">
+ Home screen...
+ <div class="video-instructions"> </div>
+ </div>
+
+ </div>-->
+
+
+
+<div style="float:right;margin:0px 0px 0px 24px;widdth:246px;">
+<img src="{@docRoot}images/kk/kk-immersive-pacras-ljpm.jpg" alt="" width="240" style="margin-bottom:0;">
+ <img src="{@docRoot}images/kk/kk-immersive-pacras-lgc.png" alt="" width="240" style="margin-bottom:0;">
+ <img src="{@docRoot}images/kk/kk-immersive-pacras.png" alt="" width="240" style="margin-bottom:0;">
+<p class="img-caption" style="padding-top:1.5em;margin-left:6px;line-height:1.25em;">A new immersive mode lets apps use every pixel on the screen to show content
+and capture touch events.</p>
+</div>
+
+<h4 id="44-immersive">Full-screen Immersive mode</h4>
+
+<p>Now your apps can use every pixel on the device screen to showcase your content
+and capture touch events. <span style="white-space:nowrap;">Android 4.4</span> addsa new full-screen immersive mode that
+lets you create full-bleed UIs reaching from edge to edge on phones and tablets,
+hiding all system UI such as the status bar and navigation bar. It's ideal for
+rich visual content such as photos, videos, maps, books, and games.</p>
+
+<p>In the new mode, the system UI stays hidden, even while users are interacting
+with your app or game — you can capture touch events from anywhere across the
+screen, even areas that would otherwise be occupied by the system bars. This
+gives you a great way to create a larger, richer, more immersive UI in your app
+or game and also reduce visual distraction.</p>
+
+<p>To make sure that users always have easy, consistent access to system UI from
+full-screen immersive mode, <span style="white-space:nowrap;">Android 4.4</span> supports a new gesture — in immersive
+mode, an edge swipe from the top or bottom of the screen now reveals the system
+UI. </p>
+
+<p>To return to immersive mode, users can touch the screen outside of the bar
+bounds or wait for a short period for the bars to auto-hide. For a consistent
+user experience, the new gesture also works with previous methods of hiding the
+status bar.</p>
+
+<h4 id="44-transitions">Transitions framework for animating scenes</h4>
+
+<p>Most apps structure their flows around several key UI states that expose
+different actions. Many apps also use animation to help users understand their
+progress through those states and the actions available in each. To make it
+easier to create high-quality animations in your app, <span style="white-space:nowrap;">Android 4.4</span> introduces a
+new transitions framework. </p>
+
+<p>The transitions framework lets you define scenes, typically view hierarchies,
+and transitions, which define how to animate or transform the scenes when the
+user enters or exits them. You can use several predefined transition types to
+animate your scenes based on specific properties, such as layout bounds, or
+visibility. There's also an auto-transition type that automatically fades,
+moves, and resizes views during a scene change. In addition, you can define
+custom transitions that animate the properties that matter most to your app, and
+you can plug in your own animation styles if needed. </p>
+
+<p>With the transitions framework you can also animate changes to your UI on the
+fly, without needing to define scenes. For example, you can make a series of
+changes to a view hierarchy and then have the TransitionManager automatically
+run a delayed transition on those changes. </p>
+
+
+<p>Once you've set up transitions, it's straightforward to invoke them from your
+app. For example, you can call a single method to begin a transition, make
+various changes in your view hierarchy, and on the next frame animations will
+automatically begin that animate the changes you specified. </p>
+
+<div style="float:right;margin:0px 0px 22px 32px;width:340px;">
+<img src="{@docRoot}images/kk-home-crop.png" alt="translucent system UI" widtdh="240" style="margin-bottom:0">
+<p class="img-caption" style="padding-top:1.5em;line-height:1.25em;margin-bottom:0;">Apps
+can use new window styles to request translucent system bars.</p>
+</div>
+
+<p>For custom control over the transitions that run between specific scenes in your
+application flow, you can use the TransitionManager. The TransitionManager lets
+you define the relationship between scenes and the transitions that run for
+specific scene changes.</p>
+<h4 id="44-translucent-system-ui">Translucent system UI styling</h4>
+
+<p>To help get more impact out of your content, you can now use new window styles and
+themes to request translucent system UI, including both the status bar and
+navigation bar. To ensure the legibility of navigation bar buttons or status bar
+information, subtle gradients is shown behind the system bars. A typical use-case
+would be an app that needs to show through to a wallpaper.</p>
+
+
+
+<h4 id="44-notification-access">Enhanced notification access</h4>
+
+<p>Notification listener services can now see more information about incoming
+notifications that were constructed using the notification builder APIs.
+Listener services can access a notification's actions as well as new extras
+fields — text, icon, picture, progress, chronometer, and many others — to
+extract cleaner information about the notification and present the information
+in a different way.</p>
+
+
+
+
+<div style="float:left;margin:1em 2em 1em 2em;">
+<a href=""><img src="{@docRoot}images/kk-chromium-icon.png" alt="" height="160" style="margin-bottom:0em;"></a>
+</div>
+
+<h4 id="44-webview">Chromium WebView</h4>
+<p><span style="white-space:nowrap;">Android 4.4</span> includes a completely new implementation of WebView that's based on
+<a href="http://www.chromium.org/Home">Chromium</a>. The new Chromium WebView gives
+you the latest in standards support, performance, and compatibility to build and
+display your web-based content.</p>
+
+<p>Chromium WebView provides broad support for HTML5, CSS3, and JavaScript. It
+supports most of the HTML5 features available in Chrome for Android 30. It also
+brings an updated version of the JavaScript Engine (V8) that delivers dramatically
+improved JavaScript performance.</p>
+
+<p stydle="clear:both;">In addition, the new Chromium WebView supports remote debugging using Chrome
+DevTools. For example, you can use Chrome DevTools on your development machine
+to inspect, debug, and analyze your WebView content live on a mobile device. </p>
+
+<p>The new Chromium WebView is included on all compatible devices running
+<span style="white-space:nowrap;">Android 4.4</span> and higher. You can take advantage of the new WebView right away,
+and with minimum modifications to existing apps and content. In most cases, your
+content will migrate to the new implementation seamlessly in most cases. </p>
+
+
+
+<h2 id="44-media">New media capabilities</h2>
+
+<h4 id="44-screen-recording">Screen recording</h4>
+
+<p>Now it's easy to create high-quality video of your app, directly from your
+Android device. <span style="white-space:nowrap;">Android 4.4</span> adds support for screen recording and provides a
+<strong>screen recording utility</strong> that lets you capture video as you use the device
+and store it as an MP4 file. It's a great new way to create walkthroughs and
+tutorials for your app, testing materials, marketing videos, and much more. </p>
+
+<p>You can record at any device-supported resolution and bitrate you want, and the
+output retains the aspect ratio of the display. By default, the utility selects
+a resolution equal or close to the device's display resolution in the current
+orientation. When you are done recording, you can share the video directly from
+your device or pull the MP4 file to your host computer for post-production.</p>
+
+<p>If your app plays video or other protected content that you don’t want to
+ be captured by the screen recorder, you can use
+ <span style="font-size:11.5px;font-family:monospace;white-space:nowrap;">SurfaceView.setSecure()</span>
+ to mark the content as secure.
+
+<p>You can access screen recording through the adb tool included in the Android
+SDK, using the command <span style="font-size:11.5px;font-family:monospace;white-space:nowrap;">adb
+shell screenrecord</span>. You can also launch it through the DDMS panel in
+Android Studio.</p>
+
+<h4 id="44-adaptive-playback">Resolution switching through adaptive playback</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> brings formal support for adaptive playback into the Android media
+framework. Adaptive playback is an optional feature of video decoders for
+MPEG-DASH and other formats that enables seamless change in resolution during
+playback. The client can start to feed the decoder input video frames of a new
+resolution and the resolution of the output buffers change automatically, and
+without a significant gap.</p>
+
+<p>Resolution switching in <span style="white-space:nowrap;">Android 4.4</span> lets media apps offer a significantly better
+streaming video experience. Apps can check for adaptive playback support at
+runtime using existing APIs and implement resolution-switching using new APIs
+introduced in <span style="white-space:nowrap;">Android 4.4</span>.</p>
+
+<h4 id="44-cenc">Common Encryption for DASH</h4>
+
+<p>Android now supports the Common Encryption (CENC) for MPEG-DASH, providing a
+standard, multiplatform DRM scheme for managing protecting content. Apps can
+take advantage of CENC through Android's modular DRM framework and platform APIs
+for supporting DASH.</p>
+
+<h4 id="44-hls">HTTP Live Streaming</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> updates the platform's HTTP Live Streaming (HLS) support to a
+superset of version 7 of the HLS specification (version 4 of the protocol). See
+the
+<a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming-07" class="external-link">IETF draft</a> for details.</p>
+
+<h4 id="44-audio-tunneling">Audio Tunneling to DSP</h4>
+
+<p>For high-performance, lower-power audio playback, <span style="white-space:nowrap;">Android 4.4</span> adds platform
+support for audio tunneling to a digital signal processor (DSP) in the device
+chipset. With tunneling, audio decoding and output effects are off-loaded to the
+DSP, waking the application processor less often and using less battery. </p>
+
+<p>Audio tunneling can dramatically improve battery life for use-cases such as
+listening to music over a headset with screen off. For example, with audio
+tunneling, Nexus 5 offers a total off-network audio playback time of up to 60
+hours, an increase of over 50% over non-tunneled audio. </p>
+
+<p>Media applications can take advantage of audio tunneling on supported devices
+without needing to modify code. The system applies tunneling to optimize audio
+playback whenever it's available on the device.</p>
+
+
+
+<div style="float:right;padding-top:1em;width:372px;margin-left:2em;">
+
+<img src="{@docRoot}images/kk-loudnessEnhancerAnnotated.png" alt="Visualizer showing loudness enhancer audio effect" width="360" height="252" style="border:1px solid #ddd;border-radius: 6px;" />
+<p class="img-caption" style="margin-left:6px;line-height:1.25em;">Visualization of how the LoudnessEnhancer effect can make speech content more audible.</p>
+</div>
+
+<p>Audio tunneling requires support in the device hardware. Currently audio
+tunneling is available on Nexus 5 and we're working with our chipset partners to
+make it available on more devices as soon as possible.</p>
+
+<h4 id="44-audio-monitoring">Audio monitoring</h4>
+
+<p>Apps can use new monitoring tools in the Visualizer effect to get updates on the
+peak and RMS levels of any currently playing audio on the device. For example,
+you could use this creatively in music visualizers or to implement playback
+metering in a media player. </p>
+
+
+
+<h4 id="44-loudness">Loudness enhancer</h4>
+
+<p>Media playback applications can increase the loudness of spoken content by using
+the new LoudnessEnhancer effect, which acts as compressor with time constants
+that are specifically tuned for speech.</p>
+
+<h4 id="44-audio-timestamps">Audio timestamps for improved AV sync</h4>
+
+<p>The audio framework can now report presentation timestamps from the audio output
+HAL to applications, for better audio-video synchronization. Audio timestamps
+let your app determine when a specific audio frame will be (or was) presented
+off-device to the user; you can use the timestamp information to more accurately
+synchronize audio with video frames.</p>
+
+<h4 id="44-miracast">Wi-Fi CERTIFIED Miracast™</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> devices can now be certified to the Wi-Fi Alliance Wi-Fi Display
+Specification as Miracast compatible. To help with testing, a new Wireless
+Display developer option exposes advanced configuration controls and settings
+for Wireless Display certification. You can access the option at <strong>Settings >
+Developer options > Wireless display certification</strong></p>. Nexus 5 is a Miracast certified wireless
+display device. </p>
+
+<h2 id="44-renderscript">RenderScript Compute</h2>
+
+<div style="float:right;padding-top:1em;width:372px;margin-left:2em;">
+
+<img src="{@docRoot}images/kk-rs-chart-versions.png" alt="Renderscipt optimizations chart" width="360" height="252" style="border:1px solid #ddd;border-radius: 6px;" />
+<p class="img-caption" style="margin-left:6px;line-height:1.25em;">Performance benchmarks for Android 4.4 relative to Android 4.3, run on the same devices (Nexus 7, Nexus 10).</p>
+</div>
+
+<h4>Ongoing performance improvements</strong></h4>
+
+<p>When your apps use RenderScript, they'll benefit from ongoing performance
+tuning in the RenderScript runtime itself, without the need for recompilation. The
+chart at right shows performance gains in Android 4.4 on two popular chipsets.</p>
+
+<h4>GPU acceleration</h4>
+
+<p>Any app using RenderScript on a supported device benefits from
+GPU acceleration, without code changes or recompiling. Since the Nexus 10
+first debuted RenderScript GPU acceleration, various other hardware partners
+have added support. </p>
+
+<p>Now with <span style="white-space:nowrap;">Android 4.4</span>, GPU acceleration is available on the Nexus 5, as well as
+the Nexus 4, Nexus 7 (2013), and Nexus 10, and we're working with our partners
+to bring it to more devices as soon as possible.</p>
+
+<h4 id="44-renderscript-ndk">RenderScript in the Android NDK</h4>
+
+<p>Now you can take advantage of RenderScript directly from your native code. A
+new C++ API in the Android Native Development Kit (NDK) lets you access the same
+RenderScript functionality available through the framework APIs, including
+script intrinsics, custom kernels, and more. </p>
+
+<p>If you have large, performance-intensive tasks to handle in native code, you can
+perform those tasks using RenderScript and integrate them with your native code.
+RenderScript offers great performance across a wide range of devices, with
+automatic support for multi-core CPUs, GPUs, and other processors. </p>
+
+<p>When you build an app that uses the RenderScript through the NDK, you can
+distribute it to any device running Android 2.2 or or higher, just like with the
+RenderScript support library available for framework APIs.</p>
+
+<h2 id="44-graphics">Graphics</h2>
+
+<h4 id="44-surfaceflinger">GLES2.0 SurfaceFlinger</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> upgrades its SurfaceFlinger from OpenGL ES 1.0 to OpenGL ES 2.0.
+This boosts performance by using multi-texturing, and it improves color
+calibration and supports more advanced special effects.</p>
+
+<h4 id="44-composer">New Hardware Composer support for virtual displays</h4>
+
+<p>The latest version of Android Hardware Composer, HWComposer 1.3, supports
+hardware composition of one virtual display in addition to the primary, external
+(e.g. HDMI) display, and has improved OpenGL ES interoperability. </p>
+
+<h2 id="44-connectivity">New Types of Connectivity</h2>
+
+<h4 id="44-bluetooth">New Bluetooth profiles</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> support for two new Bluetooth profiles to let apps support a broader
+range of low-power and media interactions. <strong>Bluetooth HID over GATT</strong> (HOGP)
+gives apps a low-latency link with low-power peripheral devices such as mice,
+joysticks, and keyboards. <strong>Bluetooth MAP</strong> lets your apps exchange messages
+with a nearby device, for example an automotive terminal for handsfree use or
+another mobile device. As an <strong>extension to Bluetooth AVRCP 1.3</strong>, users can now set
+absolute volume on the system from their Bluetooth devices.</p>
+
+<p>Platform support for HOGP, MAP, and AVRCP is built on the Bluedroid Bluetooth
+stack introduced by Google and Broadcom in Android 4.2. Support is available
+right away on Nexus devices and other Android-compatible devices that offer
+compatible Bluetooth capabilities.</p>
+
+<h4 id="44-ir-blasters">IR Blasters</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> introduces platform support for built-in IR blasters, along with a
+new API and system service that let you create apps to take advantage them. </p>
+
+<p>Using the new API, you can build apps that let users remotely control nearby
+TVs, tuners, switches, and other electronic devices. The API lets your app check
+whether the phone or tablet has an infrared emitter, query it's carrier
+frequencies, and then send infrared signals.</p>
+
+<p>Because the API is standard across Android devices running <span style="white-space:nowrap;">Android 4.4</span> or
+higher, your app can support the broadest possible range of vendors without
+writing custom integration code.</p>
+
+<h4 id="44-wifi-tdls">Wi-Fi TDLS support</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> introduces a seamless way to stream media and other data faster
+between devices already on the same Wi-Fi network by supporting Wi-Fi Tunneled
+Direct Link Setup (TDLS).</p>
+
+<h2 id="44-accessibility">Accessibility</h2>
+
+<h4 id="44-closed-captioning">System-wide settings for closed captioning</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> now supports a better accessibility experience across apps by adding
+system-wide preferences for Closed Captioning. Users can go to <strong>Settings</strong> >
+<strong>Accessibility</strong> > <strong>Captions</strong> to set global captioning preferences, such as
+whether to show captions and what language, text size, and text style to use. </p>
+
+<p>Apps that use video can now access the user's captioning settings and adjust
+their presentation to meet the user's preferences. A new captioning manager API
+lets you check and monitor the user's captioning preferences. The captioning
+manager provides you with the user's preferred captioning state as well as
+preferred locale, scaling factor, and text style. The text style includes
+foreground and background colors, edge properties, and typeface.</p>
+
+
+<div style="float:right;margin:22px 0px 0px 24px;width:490px;">
+ <img src="{@docRoot}images/kk-captions-n5.png" alt="" width="471" style="margin-bottom:0;">
+<p class="img-caption" style="padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;">Apps can now refer to the user's system-wide captions preferences. An example of the expected display style is shown right in the settings.</p>
+</div>
+
+<p>In addition, apps that use VideoView can use a new API to pass a captioning
+stream along with a video stream for rendering. The system automatically handles
+the display of the captions on video frames according to the user's systemwide
+settings. Currently, VideoView supports auto-display of captions in WebVTT
+format only. </p>
+
+<p>All apps that show captions should make sure to check the user's systemwide
+captioning preferences and render captions as closely as possible to those
+preferences. For more insight into how specific combinations of settings should
+look, you can look at a preview of captions in different languages, sizes, and
+styles right in the Settings app. </p>
+
+<h4 id="44-enhanced-apis">Enhanced Accessibility APIs</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> extends the accessibility APIs to support more precise structural
+and semantic description and observation of onscreen elements. With the new
+APIs, developers can improve the quality of accessible feedback by providing
+accessibility services with more information about on-screen elements.</p>
+
+<p>In accessibility nodes, developers can now determine whether a node is a popup,
+get it’s input type, and more. You can also use new APIs to work with nodes that
+contain grid-like information, such as lists and tables. For example, you can now
+specify new supported actions, collection information, live region modes, and
+more.</p>
+
+<p>New accessibility events let developers more closely follow the changes that are
+taking place in window content, and they can now listen for changes in the touch
+exploration mode on the device. </p>
+
+<h2 id="44-international-users">Support for international Users</h2>
+
+<h4 id="44-drawable-mirroring">Drawable mirroring for RTL locales</h4>
+
+<p>If your app is targeting users who use RTL scripts, you can use a new API to
+declare that a Drawable should be auto-mirrored when the user's locale setting
+includes an RTL language. </p>
+
+<p>Declaring a Drawable as auto-mirrored helps you prevent duplication of assets in
+your app and reduces the the size of your APK. When you have drawables that are
+the reusable for both LTR and RTL presentations, you can declare the default
+versions as auto-mirrored and then omit those Drawables from your RTL resources. </p>
+
+
+
+<div style="float:right;margin:16px 12px 0px 32px;width:260px;clear:both;">
+<img src="{@docRoot}images/kk-pseudolocale-rtl.png" alt="" width="260" style="margin-bottom:0;">
+<p class="img-caption" style="padding-top:1.5em;line-height:1.25em;">Pseudo-locales make it easier to test your app's localization.</p>
+</div>
+
+<p>You can declare various types of Drawables as auto-mirrored in your application
+code, such as bitmap, nine-patch, layer, state list, and other Drawables. You
+can also declare a Drawable as auto-mirrored in your resource files by using a
+new attribute. </p>
+
+<h4 id="44-pseudolocale-rtl">RTL pseudo-locale</h4>
+
+
+
+<p>To make it easier to test and debug your layouts, Android includes an RTL
+pseudo-locale as a new developer option. </p>
+
+<p>The RTL pseudo-locale switches the device to RTL layout for all locales and
+displays text in your current language. This can help you find layout issues
+across your app, without having to display the app in an RTL language. You can
+access the RTL pseudo-localed as in <strong>Settings >
+Developer options > Force RTL layout direction</strong>.</p>
+
+<h2 id="44-security">Security enhancements</h2>
+
+<h4 id="44-selinux">SELinux (enforcing mode)</h4>
+
+<p><span style="white-space:nowrap;">Android 4.4</span> updates its SELinux configuration from "permissive" to "enforcing."
+This means potential policy violations within a SELinux domain that has an
+enforcing policy will be blocked. </p>
+
+<h4 id="44-crytpo">Improved cryptographic algorithms</h4>
+
+<p>Android has improved its security further by adding support for two more
+cryptographic algorithms. Elliptic Curve Digital Signature Algorithm (ECDSA)
+support has been added to the keystore provider improving security of digital
+signing, applicable to scenarios such as signing of an application or a data
+connection. The Scrypt key derivation function is implemented to protect the
+cryptographic keys used for full-disk encryption.</p>
+
+<h4 id="44-other">Other enhancements</h4>
+
+<p>On multiuser devices, VPNs are now applied per user. This can
+allow a user to route all network traffic through a VPN without affecting
+other users on the device. Also, Android now supports FORTIFY_SOURCE level 2,
+and all code is compiled with those protections. FORTIFY_SOURCE has been
+enhanced to work with clang.</p>
+</ul>
+
+<h2 id="44-tools">Tools for analyzing memory use</h2>
+
+<h4 id="44-procstats">Procstats</h4>
+
+<p>A new tool called <strong>procstats</strong> helps you analyze the memory resources your app
+uses, as well as the resources used by other apps and services running on the
+system. </p>
+
+<p>Procstats keeps track of how apps are running over time, providing data about
+their execution durations and memory use to help determine how efficiently they
+are performing. This is most important for apps that start services that run in
+the background, since it lets you monitor how long they are running and how much
+RAM they are using while doing so. Procstats will also collect data for
+foreground applications about memory use over time to determine the overall
+memory profile of the app.</p>
+
+<p>Procstats can help you identify background services started by your app. You can
+keep track of how long those services continue running and how much RAM they use
+while doing so. Procstats also lets you profile your app while it's in the
+foreground, using its memory use over time to determine its overall memory
+profile.</p>
+
+
+
+
+<div style="margin:2em 0em;width:780px;">
+
+ <div style="float:left;width:390px;">
+<img src="{@docRoot}images/kk-procstats.png" alt="" width="360" style="margin-bottom:0;box-shadow: 3px 10px 18px 1px #eee;border:1px solid #ddd;border-radius: 6px;">
+<p class="img-caption" style="padding-top:1.5em;line-height:1.25em;width:360px;">The new <strong>procstats</strong> tool lets you check the memory use of apps and services over time.</p>
+</div>
+
+ <div style="float:right;width:390px;">
+<img src="{@docRoot}images/kk-meminfo.png" alt="" width="360" style="margin-bottom:0;box-shadow: 3px 10px 12px 1px #eee;border:1px solid #ddd;border-radius: 6px;">
+<p class="img-caption" style="padding-top:1.5em;line-height:1.25em;width:360px;">The enhanced <strong>meminfo</strong> tool lets you see details of memory use for an app.</p>
+</div>
+
+</div>
+
+
+<p style="clear:both;">You can access procstats from the adb tool included in the Android SDK,
+ <span style="font-size:11.5px;font-family:monospace;white-space:nowrap;">adb shell dumpsys
+ procstats</span>. Also, for on-device profiling, see the Process Stats developer option, below. </p>
+
+
+<h4 id="44-procstats-ondevice" style="clear:both">On-device memory status and profiling</h4>
+
+
+
+
+
+<p><span style="white-space:nowrap;">Android 4.4</span> includes a new developer option to make it easier to analyze your
+app's memory profile while it's running on any device or emulator. It's
+especially useful to get a view of how your app uses memory and performs on
+devices with low RAM. You can access the option at <strong>Settings >
+Developer options > Process stats</strong></p>
+
+<div style="float:right;margin:22px 0px 0px 24px;width:490px;">
+ <img src="{@docRoot}images/kk-proc-device-overview-tri.png" alt="" width="240" style="margin-bottom:0;">
+<img src="{@docRoot}images/kk-proc-device-detail.png" alt="" width="240" style="margin-bottom:0;padding-left:6px;">
+
+<p class="img-caption" style="padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;"><strong>Process stats</strong> is a convenient way to check your app's memory use. You can see how your app compares to other apps and zoom in on specific data about your app or it's background services.</p>
+</div>
+
+
+<p>The <strong>Process Stats</strong> option shows you a variety of high-level metrics on your
+app's memory use, based on data collected using the new procstats service. On
+the main screen you can see a summary of system memory status. Green indicates
+relative amount of time spent with low RAM usage, yellow indicates moderate RAM
+usage, and red indicates high (critical) RAM usage</p>
+
+<p>Below the summary is a list summarizing each app's memory load on the system.
+For each app, a blue bar indicates the relative computed memory load (runtime x
+avg_pss) of its process, and a percentage number indicates the relative amount
+of time spent in the background. You can filter the list to show only
+foreground, background, or cached processes, and you can include or exclude
+system processes. You can also change the duration of the data collected to 3,
+6, 12, or 24 hours, and you can include or exclude uss memory. </p>
+
+<p>To take a closer look at a specific app's memory usage in isolation, tap the
+app. For each app, you can now see a summary of the memory consumed and the
+percentage of the collection interval that the app has been running. You can
+also see the average and maximum usage over the collection period, and below the
+app's services and the percentage of time they've been running. </p>
+
+<p>Analyzing your app using the data in Process Stats can reveal issues and suggest
+possible optimizations for your app. For example, if your app is running longer
+than it should or using too much memory over a period of time, there could be
+bugs in your code that you can resolve to improve your app's performance,
+especially when running on a device with low RAM. </p>
+
+</div><!-- END ANDROID 4.4 -->
\ No newline at end of file
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index 21d295a..c84e18f 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -63,6 +63,9 @@
<li><a href="<?cs var:toroot ?>guide/topics/providers/contacts-provider.html">
<span class="en">Contacts Provider</span>
</a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/providers/document-provider.html">
+ <span class="en">Storage Access Framework</span>
+ </a></li>
</ul>
</li>
<li><a href="<?cs var:toroot ?>guide/components/intents-filters.html">
@@ -495,6 +498,9 @@
<li><a href="<?cs var:toroot ?>guide/webapps/webview.html">
<span class="en">Building Web Apps in WebView</span>
</a></li>
+ <li><a href="<?cs var:toroot ?>guide/webapps/migrating.html">
+ <span class="en">Migrating to WebView in Android 4.4</span>
+ </a></li>
<li><a href="<?cs var:toroot ?>guide/webapps/debugging.html">
<span class="en">Debugging Web Apps</span>
</a></li>
diff --git a/docs/html/guide/topics/providers/document-provider.jd b/docs/html/guide/topics/providers/document-provider.jd
new file mode 100644
index 0000000..9af8d5ae
--- /dev/null
+++ b/docs/html/guide/topics/providers/document-provider.jd
@@ -0,0 +1,875 @@
+page.title=Storage Access Framework
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+ <li>
+ <a href="#overview">Overview</a>
+ </li>
+ <li>
+ <a href="#flow">Control Flow</a>
+ </li>
+ <li>
+ <a href="#client">Writing a Client App</a>
+ <ol>
+ <li><a href="#search">Search for documents</a></li>
+ <li><a href="#process">Process results</a></li>
+ <li><a href="#metadata">Examine document metadata</a></li>
+ <li><a href="#open">Open a document</a></li>
+ <li><a href="#create">Create a new document</a></li>
+ <li><a href="#delete">Delete a document</a></li>
+ <li><a href="#edit">Edit a document</a></li>
+ <li><a href="#permissions">Persist permissions</a></li>
+ </ol>
+ </li>
+ <li><a href="#custom">Writing a Custom Document Provider</a>
+ <ol>
+ <li><a href="#manifest">Manifest</a></li>
+ <li><a href="#contract">Contracts</a></li>
+ <li><a href="#subclass">Subclass DocumentsProvider</a></li>
+ <li><a href="#security">Security</a></li>
+ </ol>
+ </li>
+
+</ol>
+<h2>Key classes</h2>
+<ol>
+ <li>{@link android.provider.DocumentsProvider}</li>
+ <li>{@link android.provider.DocumentsContract}</li>
+ <li>{@link android.provider.DocumentsContract.Document}</li>
+ <li>{@link android.provider.DocumentsContract.Root}</li>
+</ol>
+
+<h2>See Also</h2>
+<ol>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Content Provider Basics
+ </a>
+ </li>
+</ol>
+</div>
+</div>
+<p>Android 4.4 (API level 19) introduces the Storage Access Framework. The
+Storage Access Framework encapsulates capabilities in the Android platform that
+allow apps to request files from file storage services. The Storage Access
+Framework includes the following:</p>
+
+<ul>
+<li><strong>Document provider</strong>—A content provider that allows a
+storage service (such as Google Drive) to reveal the files it manages. This is
+implemented as a subclass of the {@link android.provider.DocumentsProvider} class.
+The document provider schema is based on a traditional file hierarchy,
+though how your document provider physically stores data is up to you.
+The Android platform includes several built-in document providers, such as
+Downloads, Images, and Videos.</li>
+
+<li><strong>Client app</strong>—A custom app that invokes the
+{@link android.content.Intent#ACTION_OPEN_DOCUMENT} and/or
+{@link android.content.Intent#ACTION_CREATE_DOCUMENT} intent and receives the
+files returned by document providers.</li>
+
+<li><strong>Picker</strong>—A system UI that lets users access documents from all
+document providers that satisfy the client app's search criteria.</li>
+</ul>
+
+<p>Some of the features offered by the Storage Access Framework are as follows:</p>
+<ul>
+<li>Lets users browse content from all document providers, not just a single app.</li>
+<li>Makes it possible for your app to have long term, persistent access to
+ documents owned by a document provider. Through this access users can add, edit,
+ save, and delete files on the provider.</li>
+<li>Supports multiple user accounts and transient roots such as USB storage
+providers, which only appear if the drive is plugged in. </li>
+</ul>
+
+<h2 id ="overview">Overview</h2>
+
+<p>The Storage Access Framework centers around a content provider that is a
+subclass of the {@link android.provider.DocumentsProvider} class. Within a <em>document provider</em>, data is
+structured as a traditional file hierarchy:</p>
+<p><img src="{@docRoot}images/providers/storage_datamodel.png" alt="data model" /></p>
+<p class="img-caption"><strong>Figure 1.</strong> Document provider data model. A Root points to a single Document,
+which then starts the fan-out of the entire tree.</p>
+
+<p>Note the following:</p>
+<ul>
+
+<li>Each document provider reports one or more
+"roots" which are starting points into exploring a tree of documents.
+Each root has a unique {@link android.provider.DocumentsContract.Root#COLUMN_ROOT_ID},
+and it points to a document (a directory)
+representing the contents under that root.
+Roots are dynamic by design to support use cases like multiple accounts,
+transient USB storage devices, or user login/log out.</li>
+
+<li>Under each root is a single document. That document points to 1 to <em>N</em> documents,
+each of which in turn can point to 1 to <em>N</em> documents. </li>
+
+<li>Each storage backend surfaces
+individual files and directories by referencing them with a unique
+{@link android.provider.DocumentsContract.Document#COLUMN_DOCUMENT_ID}.
+Document IDs must be unique and not change once issued, since they are used for persistent
+URI grants across device reboots.</li>
+
+
+<li>Documents can be either an openable file (with a specific MIME type), or a
+directory containing additional documents (with the
+{@link android.provider.DocumentsContract.Document#MIME_TYPE_DIR} MIME type).</li>
+
+<li>Each document can have different capabilities, as described by
+{@link android.provider.DocumentsContract.Document#COLUMN_FLAGS COLUMN_FLAGS}.
+For example, {@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_WRITE},
+{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_DELETE}, and
+{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_THUMBNAIL}.
+The same {@link android.provider.DocumentsContract.Document#COLUMN_DOCUMENT_ID} can be
+included in multiple directories.</li>
+</ul>
+
+<h2 id="flow">Control Flow</h2>
+<p>As stated above, the document provider data model is based on a traditional
+file hierarchy. However, you can physically store your data however you like, as
+long as it can be accessed through the {@link android.provider.DocumentsProvider} API. For example, you
+could use tag-based cloud storage for your data.</p>
+
+<p>Figure 2 shows an example of how a photo app might use the Storage Access Framework
+to access stored data:</p>
+<p><img src="{@docRoot}images/providers/storage_dataflow.png" alt="app" /></p>
+
+<p class="img-caption"><strong>Figure 2.</strong> Storage Access Framework Flow</p>
+
+<p>Note the following:</p>
+<ul>
+
+<li>In the Storage Access Framework, providers and clients don't interact
+directly. A client requests permission to interact
+with files (that is, to read, edit, create, or delete files).</li>
+
+<li>The interaction starts when an application (in this example, a photo app) fires the intent
+{@link android.content.Intent#ACTION_OPEN_DOCUMENT} or {@link android.content.Intent#ACTION_CREATE_DOCUMENT}. The intent may include filters
+to further refine the criteria—for example, "give me all openable files
+that have the 'image' MIME type."</li>
+
+<li>Once the intent fires, the system picker goes to each registered provider
+and shows the user the matching content roots.</li>
+
+<li>The picker gives users a standard interface for accessing documents, even
+though the underlying document providers may be very different. For example, figure 2
+shows a Google Drive provider, a USB provider, and a cloud provider.</li>
+</ul>
+
+<p>Figure 3 shows a picker in which a user searching for images has selected a
+Google Drive account:</p>
+
+<p><img src="{@docRoot}images/providers/storage_picker.png" width="340"
+alt="picker" style="border:2px solid #ddd"/></p>
+
+<p class="img-caption"><strong>Figure 3.</strong> Picker</p>
+
+<p>When the user selects Google Drive the images are displayed, as shown in
+figure 4. From that point on, the user can interact with them in whatever ways
+are supported by the provider and client app.
+
+<p><img src="{@docRoot}images/providers/storage_photos.png" width="340"
+alt="picker" style="border:2px solid #ddd"/></p>
+
+<p class="img-caption"><strong>Figure 4.</strong> Images</p>
+
+<h2 id="client">Writing a Client App</h2>
+
+<p>On Android 4.3 and lower, if you want your app to retrieve a file from another
+app, it must invoke an intent such as {@link android.content.Intent#ACTION_PICK}
+or {@link android.content.Intent#ACTION_GET_CONTENT}. The user must then select
+a single app from which to pick a file and the selected app must provide a user
+interface for the user to browse and pick from the available files. </p>
+
+<p>On Android 4.4 and higher, you have the additional option of using the
+{@link android.content.Intent#ACTION_OPEN_DOCUMENT} intent,
+which displays a picker UI controlled by the system that allows the user to
+browse all files that other apps have made available. From this single UI, the
+user can pick a file from any of the supported apps.</p>
+
+<p>{@link android.content.Intent#ACTION_OPEN_DOCUMENT} is
+not intended to be a replacement for {@link android.content.Intent#ACTION_GET_CONTENT}.
+The one you should use depends on the needs of your app:</p>
+
+<ul>
+<li>Use {@link android.content.Intent#ACTION_GET_CONTENT} if you want your app
+to simply read/import data. With this approach, the app imports a copy of the data,
+such as an image file.</li>
+
+<li>Use {@link android.content.Intent#ACTION_OPEN_DOCUMENT} if you want your
+app to have long term, persistent access to documents owned by a document
+provider. An example would be a photo-editing app that lets users edit
+images stored in a document provider. </li>
+
+</ul>
+
+
+<p>This section describes how to write client apps based on the
+{@link android.content.Intent#ACTION_OPEN_DOCUMENT} and
+{@link android.content.Intent#ACTION_CREATE_DOCUMENT} intents.</p>
+
+
+<h3 id="search">Search for documents</h3>
+
+<p>
+The following snippet uses {@link android.content.Intent#ACTION_OPEN_DOCUMENT}
+to search for document providers that
+contain image files:</p>
+
+<pre>private static final int READ_REQUEST_CODE = 42;
+...
+/**
+ * Fires an intent to spin up the "file chooser" UI and select an image.
+ */
+public void performFileSearch() {
+
+ // ACTION_OPEN_DOCUMENT is the intent to choose a file via the system's file
+ // browser.
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+
+ // Filter to only show results that can be "opened", such as a
+ // file (as opposed to a list of contacts or timezones)
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+
+ // Filter to show only images, using the image MIME data type.
+ // If one wanted to search for ogg vorbis files, the type would be "audio/ogg".
+ // To search for all documents available via installed storage providers,
+ // it would be "*/*".
+ intent.setType("image/*");
+
+ startActivityForResult(intent, READ_REQUEST_CODE);
+}</pre>
+
+<p>Note the following:</p>
+<ul>
+<li>When the app fires the {@link android.content.Intent#ACTION_OPEN_DOCUMENT}
+intent, it launches a picker that displays all matching document providers.</li>
+
+<li>Adding the category {@link android.content.Intent#CATEGORY_OPENABLE} to the
+intent filters the results to display only documents that can be opened, such as image files.</li>
+
+<li>The statement {@code intent.setType("image/*")} further filters to
+display only documents that have the image MIME data type.</li>
+</ul>
+
+<h3 id="results">Process Results</h3>
+
+<p>Once the user selects a document in the picker,
+{@link android.app.Activity#onActivityResult onActivityResult()} gets called.
+The URI that points to the selected document is contained in the {@code resultData}
+parameter. Extract the URI using {@link android.content.Intent#getData getData()}.
+Once you have it, you can use it to retrieve the document the user wants. For
+example:</p>
+
+<pre>@Override
+public void onActivityResult(int requestCode, int resultCode,
+ Intent resultData) {
+
+ // The ACTION_OPEN_DOCUMENT intent was sent with the request code
+ // READ_REQUEST_CODE. If the request code seen here doesn't match, it's the
+ // response to some other intent, and the code below shouldn't run at all.
+
+ if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
+ // The document selected by the user won't be returned in the intent.
+ // Instead, a URI to that document will be contained in the return intent
+ // provided to this method as a parameter.
+ // Pull that URI using resultData.getData().
+ Uri uri = null;
+ if (resultData != null) {
+ uri = resultData.getData();
+ Log.i(TAG, "Uri: " + uri.toString());
+ showImage(uri);
+ }
+ }
+}
+</pre>
+
+<h3 id="metadata">Examine document metadata</h3>
+
+<p>Once you have the URI for a document, you gain access to its metadata. This
+snippet grabs the metadata for a document specified by the URI, and logs it:</p>
+
+<pre>public void dumpImageMetaData(Uri uri) {
+
+ // The query, since it only applies to a single document, will only return
+ // one row. There's no need to filter, sort, or select fields, since we want
+ // all fields for one document.
+ Cursor cursor = getActivity().getContentResolver()
+ .query(uri, null, null, null, null, null);
+
+ try {
+ // moveToFirst() returns false if the cursor has 0 rows. Very handy for
+ // "if there's anything to look at, look at it" conditionals.
+ if (cursor != null && cursor.moveToFirst()) {
+
+ // Note it's called "Display Name". This is
+ // provider-specific, and might not necessarily be the file name.
+ String displayName = cursor.getString(
+ cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+ Log.i(TAG, "Display Name: " + displayName);
+
+ int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
+ // If the size is unknown, the value stored is null. But since an
+ // int can't be null in Java, the behavior is implementation-specific,
+ // which is just a fancy term for "unpredictable". So as
+ // a rule, check if it's null before assigning to an int. This will
+ // happen often: The storage API allows for remote files, whose
+ // size might not be locally known.
+ String size = null;
+ if (!cursor.isNull(sizeIndex)) {
+ // Technically the column stores an int, but cursor.getString()
+ // will do the conversion automatically.
+ size = cursor.getString(sizeIndex);
+ } else {
+ size = "Unknown";
+ }
+ Log.i(TAG, "Size: " + size);
+ }
+ } finally {
+ cursor.close();
+ }
+}
+</pre>
+
+<h3 id="open-client">Open a document</h3>
+
+<p>Once you have the URI for a document, you can open it or do whatever else
+you want to do with it.</p>
+
+<h4>Bitmap</h4>
+
+<p>Here is an example of how you might open a {@link android.graphics.Bitmap}:</p>
+
+<pre>private Bitmap getBitmapFromUri(Uri uri) throws IOException {
+ ParcelFileDescriptor parcelFileDescriptor =
+ getContentResolver().openFileDescriptor(uri, "r");
+ FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
+ Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
+ parcelFileDescriptor.close();
+ return image;
+}
+</pre>
+
+<p>Note that you should not do this operation on the UI thread. Do it in the
+background, using {@link android.os.AsyncTask}. Once you open the bitmap, you
+can display it in an {@link android.widget.ImageView}.
+</p>
+
+<h4>Get an InputStream</h4>
+
+<p>Here is an example of how you can get an {@link java.io.InputStream} from the URI. In this
+snippet, the lines of the file are being read into a string:</p>
+
+<pre>private String readTextFromUri(Uri uri) throws IOException {
+ InputStream inputStream = getContentResolver().openInputStream(uri);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ inputStream));
+ StringBuilder stringBuilder = new StringBuilder();
+ String line;
+ while ((line = reader.readLine()) != null) {
+ stringBuilder.append(line);
+ }
+ fileInputStream.close();
+ parcelFileDescriptor.close();
+ return stringBuilder.toString();
+}
+</pre>
+
+<h3 id="create">Create a new document</h3>
+
+<p>Your app can create a new document in a document provider using the
+{@link android.content.Intent#ACTION_CREATE_DOCUMENT}
+intent. To create a file you give your intent a MIME type and a file name, and
+launch it with a unique request code. The rest is taken care of for you:</p>
+
+
+<pre>
+// Here are some examples of how you might call this method.
+// The first parameter is the MIME type, and the second parameter is the name
+// of the file you are creating:
+//
+// createFile("text/plain", "foobar.txt");
+// createFile("image/png", "mypicture.png");
+
+// Unique request code.
+private static final int WRITE_REQUEST_CODE = 43;
+...
+private void createFile(String mimeType, String fileName) {
+ Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
+
+ // Filter to only show results that can be "opened", such as
+ // a file (as opposed to a list of contacts or timezones).
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+
+ // Create a file with the requested MIME type.
+ intent.setType(mimeType);
+ intent.putExtra(Intent.EXTRA_TITLE, fileName);
+ startActivityForResult(intent, WRITE_REQUEST_CODE);
+}
+</pre>
+
+<p>Once you create a new document you can get its URI in
+{@link android.app.Activity#onActivityResult onActivityResult()}, so that you
+can continue to write to it.</p>
+
+<h3 id="delete">Delete a document</h3>
+
+<p>If you have the URI for a document and the document's
+{@link android.provider.DocumentsContract.Document#COLUMN_FLAGS Document.COLUMN_FLAGS}
+contains
+{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_DELETE SUPPORTS_DELETE},
+you can delete the document. For example:</p>
+
+<pre>
+DocumentsContract.deleteDocument(getContentResolver(), uri);
+</pre>
+
+<h3 id="edit">Edit a document</h3>
+
+<p>You can use the Storage Access Framework to edit a text document in place.
+This snippet fires
+the {@link android.content.Intent#ACTION_OPEN_DOCUMENT} intent and uses the
+category {@link android.content.Intent#CATEGORY_OPENABLE} to to display only
+documents that can be opened. It further filters to show only text files:</p>
+
+<pre>
+private static final int EDIT_REQUEST_CODE = 44;
+/**
+ * Open a file for writing and append some text to it.
+ */
+ private void editDocument() {
+ // ACTION_OPEN_DOCUMENT is the intent to choose a file via the system's
+ // file browser.
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+
+ // Filter to only show results that can be "opened", such as a
+ // file (as opposed to a list of contacts or timezones).
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+
+ // Filter to show only text files.
+ intent.setType("text/plain");
+
+ startActivityForResult(intent, EDIT_REQUEST_CODE);
+}
+</pre>
+
+<p>Next, from {@link android.app.Activity#onActivityResult onActivityResult()}
+(see <a href="#results">Process results</a>) you can call code to perform the edit.
+The following snippet gets a {@link java.io.FileOutputStream}
+from the {@link android.content.ContentResolver}. By default it uses “write” mode.
+It's best practice to ask for the least amount of access you need, so don’t ask
+for read/write if all you need is write:</p>
+
+<pre>private void alterDocument(Uri uri) {
+ try {
+ ParcelFileDescriptor pfd = getActivity().getContentResolver().
+ openFileDescriptor(uri, "w");
+ FileOutputStream fileOutputStream =
+ new FileOutputStream(pfd.getFileDescriptor());
+ fileOutputStream.write(("Overwritten by MyCloud at " +
+ System.currentTimeMillis() + "\n").getBytes());
+ // Let the document provider know you're done by closing the stream.
+ fileOutputStream.close();
+ pfd.close();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+}</pre>
+
+<h3 id="permissions">Persist permissions</h3>
+
+<p>When your app opens a file for reading or writing, the system gives your
+app a URI permission grant for that file. It lasts until the user's device restarts.
+But suppose your app is an image-editing app, and you want users to be able to
+access the last 5 images they edited, directly from your app. If the user's device has
+restarted, you'd have to send the user back to the system picker to find the
+files, which is obviously not ideal.</p>
+
+<p>To prevent this from happening, you can persist the permissions the system
+gives your app. Effectively, your app "takes" the persistable URI permission grant
+that the system is offering. This gives the user continued access to the files
+through your app, even if the device has been restarted:</p>
+
+
+<pre>final int takeFlags = intent.getFlags()
+ & (Intent.FLAG_GRANT_READ_URI_PERMISSION
+ | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+// Check for the freshest data.
+getContentResolver().takePersistableUriPermission(uri, takeFlags);</pre>
+
+<p>There is one final step. You may have saved the most
+recent URIs your app accessed, but they may no longer be valid—another app
+may have deleted or modified a document. Thus, you should always call
+{@code getContentResolver().takePersistableUriPermission()} to check for the
+freshest data.</p>
+
+<h2 id="custom">Writing a Custom Document Provider</h2>
+
+<p>
+If you're developing an app that provides storage services for files (such as
+a cloud save service), you can make your files available through the Storage
+Access Framework by writing a custom document provider. This section describes
+how to do this.</p>
+
+
+<h3 id="manifest">Manifest</h3>
+
+<p>To implement a custom document provider, add the following to your application's
+manifest:</p>
+<ul>
+
+<li>A target of API level 19 or higher.</li>
+
+<li>A <code><provider></code> element that declares your custom storage
+provider. </li>
+
+<li>The name of your provider, which is its class name, including package name.
+For example: <code>com.example.android.storageprovider.MyCloudProvider</code>.</li>
+
+<li>The name of your authority, which is your package name (in this example,
+<code>com.example.android.storageprovider</code>) plus the type of content provider
+(<code>documents</code>). For example, {@code com.example.android.storageprovider.documents}.</li>
+
+<li>The attribute <code>android:exported</code> set to <code>"true"</code>.
+You must export your provider so that other apps can see it.</li>
+
+<li>The attribute <code>android:grantUriPermissions</code> set to
+<code>"true"</code>. This allows the system to grant other apps access
+to content in your provider. For a discussion of how to persist a grant for
+a particular document, see <a href="#permissions">Persist permissions</a>.</li>
+
+<li>The {@code MANAGE_DOCUMENTS} permission. By default a provider is available
+to everyone. Adding this permission restricts your provider to the system,
+which is important for security. </li>
+
+<li>An intent filter that includes the
+{@code android.content.action.DOCUMENTS_PROVIDER} action, so that your provider
+appears in the picker when the system searches for providers.</li>
+
+</ul>
+<p>Here are excerpts from a sample manifest that includes a provider:</p>
+
+<pre><manifest... >
+ ...
+ <uses-sdk
+ android:minSdkVersion="19"
+ android:targetSdkVersion="19" />
+ ....
+ <provider
+ android:name="com.example.android.storageprovider.MyCloudProvider"
+ android:authorities="com.example.android.storageprovider.documents"
+ android:grantUriPermissions="true"
+ android:exported="true"
+ android:permission="android.permission.MANAGE_DOCUMENTS">
+ <intent-filter>
+ <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
+ </intent-filter>
+ </provider>
+ </application>
+
+</manifest></pre>
+
+<h4>Supporting devices running Android 4.3 and lower</h4>
+
+<p>The
+{@link android.content.Intent#ACTION_OPEN_DOCUMENT} intent is only available
+on devices running Android 4.4 and higher.
+If you want your application to support {@link android.content.Intent#ACTION_GET_CONTENT}
+to accommodate devices that are running Android 4.3 and lower, you should
+disable the {@link android.content.Intent#ACTION_GET_CONTENT} intent filter in
+your manifest if a device is running Android 4.4 or higher. A
+document provider and {@link android.content.Intent#ACTION_GET_CONTENT} should be considered
+ mutually exclusive. If you support both of them simultaneously, your app will
+appear twice in the system picker UI, offering two different ways of accessing
+your stored data. This would be confusing for users.</p>
+
+<p>Here is the recommended way of disabling the
+{@link android.content.Intent#ACTION_GET_CONTENT} intent filter for devices
+running Android version 4.4 or higher:</p>
+
+<ol>
+<li>In your {@code bool.xml} resources file under {@code res/values/}, add
+this line: <pre><bool name="atMostJellyBeanMR2">true</bool></pre></li>
+
+<li>In your {@code bool.xml} resources file under {@code res/values-v19/}, add
+this line: <pre><bool name="atMostJellyBeanMR2">false</bool></pre></li>
+
+<li>Add an
+<a href="{@docRoot}guide/topics/manifest/activity-alias-element.html">activity
+alias</a> to disable the {@link android.content.Intent#ACTION_GET_CONTENT} intent
+filter for versions 4.4 (API level 19) and higher. For example:
+
+<pre>
+<!-- This activity alias is added so that GET_CONTENT intent-filter
+ can be disabled for builds on API level 19 and higher. -->
+<activity-alias android:name="com.android.example.app.MyPicker"
+ android:targetActivity="com.android.example.app.MyActivity"
+ ...
+ android:enabled="@bool/atMostJellyBeanMR2">
+ <intent-filter>
+ <action android:name="android.intent.action.GET_CONTENT" />
+ <category android:name="android.intent.category.OPENABLE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="image/*" />
+ <data android:mimeType="video/*" />
+ </intent-filter>
+</activity-alias>
+</pre>
+</li>
+</ol>
+<h3 id="contract">Contracts</h3>
+
+<p>Usually when you write a custom content provider, one of the tasks is
+implementing contract classes, as described in the
+<a href="{@docRoot}guide/topics/providers/content-provider-creating.html#ContractClass">
+Content Providers</a> developers guide. A contract class is a {@code public final} class
+that contains constant definitions for the URIs, column names, MIME types, and
+other metadata that pertain to the provider. The Storage Access Framework
+provides these contract classes for you, so you don't need to write your
+own:</p>
+
+<ul>
+ <li>{@link android.provider.DocumentsContract.Document}</li>
+ <li>{@link android.provider.DocumentsContract.Root}</li>
+</ul>
+
+<p>For example, here are the columns you might return in a cursor when
+your document provider is queried for documents or the root:</p>
+
+<pre>private static final String[] DEFAULT_ROOT_PROJECTION =
+ new String[]{Root.COLUMN_ROOT_ID, Root.COLUMN_MIME_TYPES,
+ Root.COLUMN_FLAGS, Root.COLUMN_ICON, Root.COLUMN_TITLE,
+ Root.COLUMN_SUMMARY, Root.COLUMN_DOCUMENT_ID,
+ Root.COLUMN_AVAILABLE_BYTES,};
+private static final String[] DEFAULT_DOCUMENT_PROJECTION = new
+ String[]{Document.COLUMN_DOCUMENT_ID, Document.COLUMN_MIME_TYPE,
+ Document.COLUMN_DISPLAY_NAME, Document.COLUMN_LAST_MODIFIED,
+ Document.COLUMN_FLAGS, Document.COLUMN_SIZE,};
+</pre>
+
+<h3 id="subclass">Subclass DocumentsProvider</h3>
+
+<p>The next step in writing a custom document provider is to subclass the
+abstract class {@link android.provider.DocumentsProvider}. At minimum, you need
+to implement the following methods:</p>
+
+<ul>
+<li>{@link android.provider.DocumentsProvider#queryRoots queryRoots()}</li>
+
+<li>{@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()}</li>
+
+<li>{@link android.provider.DocumentsProvider#queryDocument queryDocument()}</li>
+
+<li>{@link android.provider.DocumentsProvider#openDocument openDocument()}</li>
+</ul>
+
+<p>These are the only methods you are strictly required to implement, but there
+are many more you might want to. See {@link android.provider.DocumentsProvider}
+for details.</p>
+
+<h4 id="queryRoots">Implement queryRoots</h4>
+
+<p>Your implementation of {@link android.provider.DocumentsProvider#queryRoots
+queryRoots()} must return a {@link android.database.Cursor} pointing to all the
+root directories of your document providers, using columns defined in
+{@link android.provider.DocumentsContract.Root}.</p>
+
+<p>In the following snippet, the {@code projection} parameter represents the
+specific fields the caller wants to get back. The snippet creates a new cursor
+and adds one row to it—one root, a top level directory, like
+Downloads or Images. Most providers only have one root. You might have more than one,
+for example, in the case of multiple user accounts. In that case, just add a
+second row to the cursor.</p>
+
+<pre>
+@Override
+public Cursor queryRoots(String[] projection) throws FileNotFoundException {
+
+ // Create a cursor with either the requested fields, or the default
+ // projection if "projection" is null.
+ final MatrixCursor result =
+ new MatrixCursor(resolveRootProjection(projection));
+
+ // If user is not logged in, return an empty root cursor. This removes our
+ // provider from the list entirely.
+ if (!isUserLoggedIn()) {
+ return result;
+ }
+
+ // It's possible to have multiple roots (e.g. for multiple accounts in the
+ // same app) -- just add multiple cursor rows.
+ // Construct one row for a root called "MyCloud".
+ final MatrixCursor.RowBuilder row = result.newRow();
+ row.add(Root.COLUMN_ROOT_ID, ROOT);
+ row.add(Root.COLUMN_SUMMARY, getContext().getString(R.string.root_summary));
+
+ // FLAG_SUPPORTS_CREATE means at least one directory under the root supports
+ // creating documents. FLAG_SUPPORTS_RECENTS means your application's most
+ // recently used documents will show up in the "Recents" category.
+ // FLAG_SUPPORTS_SEARCH allows users to search all documents the application
+ // shares.
+ row.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE |
+ Root.FLAG_SUPPORTS_RECENTS |
+ Root.FLAG_SUPPORTS_SEARCH);
+
+ // COLUMN_TITLE is the root title (e.g. Gallery, Drive).
+ row.add(Root.COLUMN_TITLE, getContext().getString(R.string.title));
+
+ // This document id cannot change once it's shared.
+ row.add(Root.COLUMN_DOCUMENT_ID, getDocIdForFile(mBaseDir));
+
+ // The child MIME types are used to filter the roots and only present to the
+ // user roots that contain the desired type somewhere in their file hierarchy.
+ row.add(Root.COLUMN_MIME_TYPES, getChildMimeTypes(mBaseDir));
+ row.add(Root.COLUMN_AVAILABLE_BYTES, mBaseDir.getFreeSpace());
+ row.add(Root.COLUMN_ICON, R.drawable.ic_launcher);
+
+ return result;
+}</pre>
+
+<h4 id="queryChildDocuments">Implement queryChildDocuments</h4>
+
+<p>Your implementation of
+{@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()}
+must return a {@link android.database.Cursor} that points to all the files in
+the specified directory, using columns defined in
+{@link android.provider.DocumentsContract.Document}.</p>
+
+<p>This method gets called when you choose an application root in the picker UI.
+It gets the child documents of a directory under the root. It can be called at any level in
+the file hierarchy, not just the root. This snippet
+makes a new cursor with the requested columns, then adds information about
+every immediate child in the parent directory to the cursor.
+A child can be an image, another directory—any file:</p>
+
+<pre>@Override
+public Cursor queryChildDocuments(String parentDocumentId, String[] projection,
+ String sortOrder) throws FileNotFoundException {
+
+ final MatrixCursor result = new
+ MatrixCursor(resolveDocumentProjection(projection));
+ final File parent = getFileForDocId(parentDocumentId);
+ for (File file : parent.listFiles()) {
+ // Adds the file's display name, MIME type, size, and so on.
+ includeFile(result, null, file);
+ }
+ return result;
+}
+</pre>
+
+<h4 id="queryDocument">Implement queryDocument</h4>
+
+<p>Your implementation of
+{@link android.provider.DocumentsProvider#queryDocument queryDocument()}
+must return a {@link android.database.Cursor} that points to the specified file,
+using columns defined in {@link android.provider.DocumentsContract.Document}.
+</p>
+
+<p>The {@link android.provider.DocumentsProvider#queryDocument queryDocument()}
+method returns the same information that was passed in
+{@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()},
+but for a specific file:</p>
+
+
+<pre>@Override
+public Cursor queryDocument(String documentId, String[] projection) throws
+ FileNotFoundException {
+
+ // Create a cursor with the requested projection, or the default projection.
+ final MatrixCursor result = new
+ MatrixCursor(resolveDocumentProjection(projection));
+ includeFile(result, documentId, null);
+ return result;
+}
+</pre>
+
+<h4 id="openDocument">Implement openDocument</h4>
+
+<p>You must implement {@link android.provider.DocumentsProvider#openDocument
+openDocument()} to return a {@link android.os.ParcelFileDescriptor} representing
+the specified file. Other apps can use the returned {@link android.os.ParcelFileDescriptor}
+to stream data. The system calls this method once the user selects a file
+and the client app requests access to it by calling
+{@link android.content.ContentResolver#openFileDescriptor openFileDescriptor()}.
+For example:</p>
+
+<pre>@Override
+public ParcelFileDescriptor openDocument(final String documentId,
+ final String mode,
+ CancellationSignal signal) throws
+ FileNotFoundException {
+ Log.v(TAG, "openDocument, mode: " + mode);
+ // It's OK to do network operations in this method to download the document,
+ // as long as you periodically check the CancellationSignal. If you have an
+ // extremely large file to transfer from the network, a better solution may
+ // be pipes or sockets (see ParcelFileDescriptor for helper methods).
+
+ final File file = getFileForDocId(documentId);
+
+ final boolean isWrite = (mode.indexOf('w') != -1);
+ if(isWrite) {
+ // Attach a close listener if the document is opened in write mode.
+ try {
+ Handler handler = new Handler(getContext().getMainLooper());
+ return ParcelFileDescriptor.open(file, accessMode, handler,
+ new ParcelFileDescriptor.OnCloseListener() {
+ @Override
+ public void onClose(IOException e) {
+
+ // Update the file with the cloud server. The client is done
+ // writing.
+ Log.i(TAG, "A file with id " +
+ documentId + " has been closed!
+ Time to " +
+ "update the server.");
+ }
+
+ });
+ } catch (IOException e) {
+ throw new FileNotFoundException("Failed to open document with id "
+ + documentId + " and mode " + mode);
+ }
+ } else {
+ return ParcelFileDescriptor.open(file, accessMode);
+ }
+}
+</pre>
+
+<h3 id="security">Security</h3>
+
+<p>Suppose your document provider is a password-protected cloud storage service
+and you want to make sure that users are logged in before you start sharing their files.
+What should your app do if the user is not logged in? The solution is to return
+zero roots in your implementation of {@link android.provider.DocumentsProvider#queryRoots
+queryRoots()}. That is, an empty root cursor:</p>
+
+<pre>
+public Cursor queryRoots(String[] projection) throws FileNotFoundException {
+...
+ // If user is not logged in, return an empty root cursor. This removes our
+ // provider from the list entirely.
+ if (!isUserLoggedIn()) {
+ return result;
+}
+</pre>
+
+<p>The other step is to call {@code getContentResolver().notifyChange()}.
+Remember the {@link android.provider.DocumentsContract}? We’re using it to make
+this URI. The following snippet tells the system to query the roots of your
+document provider whenever the user's login status changes. If the user is not
+logged in, a call to {@link android.provider.DocumentsProvider#queryRoots queryRoots()} returns an
+empty cursor, as shown above. This ensures that a provider's documents are only
+available if the user is logged into the provider.</p>
+
+<pre>private void onLoginButtonClick() {
+ loginOrLogout();
+ getContentResolver().notifyChange(DocumentsContract
+ .buildRootsUri(AUTHORITY), null);
+}
+</pre>
diff --git a/docs/html/guide/webapps/migrating.jd b/docs/html/guide/webapps/migrating.jd
new file mode 100644
index 0000000..314842b
--- /dev/null
+++ b/docs/html/guide/webapps/migrating.jd
@@ -0,0 +1,378 @@
+page.title=Migrating to WebView in Android 4.4
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+ <li><a href="#UserAgent">User Agent Changes</a></li>
+ <li><a href="#Threads">Multi-threading and Thread Blocking</a></li>
+ <li><a href="#URLs">Custom URL Handling</a></li>
+ <li><a href="#Viewport">Viewport Changes</a>
+ <ol>
+ <li><a href="#TargetDensity">Viewport target-densitydpi no longer supported</a></li>
+ <li><a href="#SmallViewport">Viewport zooms in when small</a></li>
+ <li><a href="#MultiViewport">Multiple viewport tags not supported</a></li>
+ <li><a href="#Zoom">Default zoom is deprecated</a></li>
+ </ol>
+ </li>
+ <li><a href="#Style">Styling Changes</a>
+ <ol>
+ <li><a href="#BackgroundSize">The background CSS shorthand overrides background-size</a></li>
+ <li><a href="#Pixels">Sizes are in CSS pixels instead of screen pixels</a></li>
+ <li><a href="#Columns">NARROW_COLUMNS and SINGLE_COLUMN no longer supported</a></li>
+ </ol>
+ </li>
+ <li><a href="#TouchCancel">Handling Touch Events in JavaScript</a></li>
+</ol>
+
+</div>
+</div>
+
+
+
+
+
+
+
+
+
+
+<p>Android 4.4 (API level 19) introduces a new version of {@link android.webkit.WebView} that is
+based on <a href="http://www.chromium.org/Home">Chromium</a>. This change upgrades
+{@link android.webkit.WebView} performance and standards support for HTML5, CSS3, and JavaScript
+to match the latest web browsers. Any apps using {@link android.webkit.WebView} will inherit these
+upgrades when running on Android 4.4 and higher.</p>
+
+<p>This document describes additional changes
+to {@link android.webkit.WebView} that you should be aware of if you set your
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+targetSdkVersion}</a> to "19" or higher.</p>
+
+<p class="note"><strong>Note:</strong>
+If your <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+targetSdkVersion}</a> is set to "18" or lower, {@link android.webkit.WebView} operates in
+"quirks mode" in order to avoid some of the behavior changes described below, as closely
+as possible—while still providing your app the performance and web standards upgrades.
+Beware, though, that <a href="#Columns">single and narrow column layouts</a> and <a
+href="#Zoom">default zoom levels</a> are
+<strong>not supported at all</strong> on Android 4.4, and there may be other behavioral differences
+that have not been identified, so be sure to test your app on Android 4.4
+or higher even if you keep your <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+targetSdkVersion}</a> set to "18" or lower. </p>
+
+<p>To help you work through any issues you may encounter when migrating your app to
+{@link android.webkit.WebView} in Android 4.4, you can enable remote debugging through
+Chrome on your desktop by calling
+{@link android.webkit.WebView#setWebContentsDebuggingEnabled setWebContentsDebuggingEnabled()}.
+This new feature in {@link android.webkit.WebView} allows
+you to inspect and analyze your web content, scripts, and network activity while running in
+a {@link android.webkit.WebView}. For more information, see <a
+href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging">Remote
+Debugging on Android</a>.</p>
+
+
+
+
+<h2 id="UserAgent">User Agent Changes</h2>
+
+<p>If you serve content to your {@link android.webkit.WebView} based on the user agent, you should
+to be aware of the user agent string has changed slightly and now includes the Chrome version:</p>
+
+<pre class="no-pretty-print">
+Mozilla/5.0 (Linux; Android 4.4; Nexus 4 Build/KRT16H) AppleWebKit/537.36
+(KHTML, like Gecko) Version/4.0 <strong>Chrome/30.0.0.0</strong> Mobile Safari/537.36
+</pre>
+
+<p>If you need to retrieve the user agent but don't need to store it for your app or
+do not want to instantiate {@link android.webkit.WebView}, you should use
+the static method, {@link android.webkit.WebSettings#getDefaultUserAgent
+getDefaultUserAgent()}. However, if you intend to override the user agent string in your
+{@link android.webkit.WebView}, you may instead want to use
+{@link android.webkit.WebSettings#getUserAgentString getUserAgentString()}.</p>
+
+
+
+
+<h2 id="Threads">Multi-threading and Thread Blocking</h2>
+
+<p>If you call methods on {@link android.webkit.WebView} from any thread other than your app's
+UI thread, it can cause unexpected results. For example, if your app uses multiple threads,
+you can use the {@link android.app.Activity#runOnUiThread runOnUiThread()} method
+to ensure your code executes on the UI thread:</p>
+
+<pre>
+runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ // Code for WebView goes here
+ }
+});
+</pre>
+
+<p>Also be sure that you <a href="{@docRoot}guide/components/processes-and-threads.html#Threads">
+never block the UI thread</a>. A situation in which some apps make this mistake is while waiting for
+a JavaScript callback. For example, <strong>do not</strong> use code like this:</p>
+
+<pre>
+// This code is BAD and will block the UI thread
+webView.loadUrl("javascript:fn()");
+while(result == null) {
+ Thread.sleep(100);
+}
+</pre>
+
+<p>You can instead use a new method, {@link android.webkit.WebView#evaluateJavascript
+evaluateJavascript()}, to run JavaScript asynchronously.</p>
+
+
+
+
+
+<h2 id="URLs">Custom URL Handling</h2>
+
+<p>The new {@link android.webkit.WebView} applies additional restrictions when requesting resources
+and resolving links that use a custom URL scheme. For example, if you implement callbacks such as
+{@link android.webkit.WebViewClient#shouldOverrideUrlLoading shouldOverrideUrlLoading()} or
+{@link android.webkit.WebViewClient#shouldInterceptRequest shouldInterceptRequest()}, then
+{@link android.webkit.WebView} invokes them only for valid URLs.</p>
+
+<p>If you are using a custom URL scheme or a base URL and
+notice that your app is receiving fewer calls to these callbacks or failing
+to load resources on Android 4.4, ensure that the requests specify valid URLs that conform to
+<a href="http://tools.ietf.org/html/rfc3986#appendix-A">RFC 3986</a>.
+
+<p>For example, the new {@link android.webkit.WebView} may not call your
+{@link android.webkit.WebViewClient#shouldOverrideUrlLoading shouldOverrideUrlLoading()} method
+for links like this:</p>
+
+<pre><a href="showProfile">Show Profile</a></pre>
+
+<p>The result of the user clicking such a link can vary:
+<ul>
+ <li>If you loaded the page by calling {@link android.webkit.WebView#loadData
+loadData()} or {@link android.webkit.WebView#loadDataWithBaseURL
+loadDataWithBaseURL()} with an invalid or null base URL, then you will not receive the
+{@link android.webkit.WebViewClient#shouldOverrideUrlLoading shouldOverrideUrlLoading()} callback
+for this type of link on the page.
+ <p class="note"><strong>Note:</strong>
+ When you use {@link android.webkit.WebView#loadDataWithBaseURL
+loadDataWithBaseURL()} and the base URL is invalid or set null, all links in the content
+you are loading must be absolute.</p>
+ <li>If you loaded the page by calling {@link android.webkit.WebView#loadUrl
+loadUrl()} or provided a valid base URL with {@link android.webkit.WebView#loadDataWithBaseURL
+loadDataWithBaseURL()}, then you will receive the
+{@link android.webkit.WebViewClient#shouldOverrideUrlLoading shouldOverrideUrlLoading()} callback
+for this type of link on the page, but the URL you receive will be absolute, relative
+to the current page. For example, the URL you receive will be
+<code>"http://www.example.com/showProfile"</code> instead of just <code>"showProfile"</code>.
+</ul>
+
+
+<p>Instead of using a simple string in a link as shown above, you can use a custom scheme such
+as the following:</p>
+
+<pre><a href="example-app:showProfile">Show Profile</a></pre>
+
+<p>You can then handle this URL in your
+{@link android.webkit.WebViewClient#shouldOverrideUrlLoading shouldOverrideUrlLoading()} method
+like this:</p>
+
+<pre>
+// The URL scheme should be non-hierarchical (no trailing slashes)
+private static final String APP_SCHEME = "example-app:";
+
+@Override
+public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ if (url.startsWith(APP_SCHEME)) {
+ urlData = URLDecoder.decode(url.substring(APP_SCHEME.length()), "UTF-8");
+ respondToData(urlData);
+ return true;
+ }
+ return false;
+}
+</pre>
+
+<p>If you can't alter the HTML then you may be able to use
+{@link android.webkit.WebView#loadDataWithBaseURL loadDataWithBaseURL()} and set a base URL
+consisting of a custom scheme and a valid host, such as
+<code>"example-app://<valid_host_name>/"</code>. For example:</p>
+
+<pre>
+webView.loadDataWithBaseURL("example-app://example.co.uk/", HTML_DATA,
+ null, "UTF-8", null);
+</pre>
+
+<p>The valid host name should conform to
+<a href="http://tools.ietf.org/html/rfc3986#appendix-A">RFC 3986</a>
+and it's important to include the trailing slash at the end, otherwise, any requests from the
+loaded page may be dropped.</p>
+
+
+
+<h2 id="Viewport">Viewport Changes</h2>
+
+
+<h3 id="TargetDensity">Viewport target-densitydpi no longer supported</h3>
+
+<p>Previously, {@link android.webkit.WebView} supported a viewport property called
+<code>target-densitydpi</code> to help web pages specify their intended screen density. This
+property is no longer supported and you should migrate to using standard solutions with
+images and CSS as discussed in <a
+href="http://developers.google.com/chrome/mobile/docs/webview/pixelperfect">Pixel-Perfect UI in
+the WebView</a>.</p>
+
+
+<h3 id="SmallViewport">Viewport zooms in when small</h3>
+
+<p>Previously, if you set your viewport width to a value less than or equal to "320"
+it would be set to "device-width", and if you set the viewport height to a value less than or
+equal to the {@link android.webkit.WebView} height, it would be set to "device-height". However,
+when running in the new {@link android.webkit.WebView}, the width or height value is adhered and
+the {@link android.webkit.WebView} zooms in to fill the screen width.</p>
+
+
+<h3 id="MultiViewport">Multiple viewport tags not supported</h3>
+
+<p>Previously, if you included multiple viewport tags in a web page, {@link android.webkit.WebView}
+would merge the properties from all the tags.
+In the new {@link android.webkit.WebView}, only the last viewport is
+used and all others are ignored.</p>
+
+
+<h3 id="Zoom">Default zoom is deprecated</h3>
+
+<p>The methods {@link android.webkit.WebSettings#getDefaultZoom()} and
+{@link android.webkit.WebSettings#setDefaultZoom setDefaultZoom()} for getting and setting
+the initial zoom level on a page have are no longer supported and you should instead define
+the appropriate viewport in the web page.</p>
+
+<p class="caution"><strong>Caution:</strong> These APIs are not supported on Android 4.4 and higher
+at all. Even if your <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target"
+>{@code targetSdkVersion}</a> is set to "18" or lower, these APIs have no effect.</p>
+
+<p>For information about how to define the viewport properties in your HTML, read
+<a href="http://developers.google.com/chrome/mobile/docs/webview/pixelperfect" class="external-link"
+>Pixel-Perfect UI in the WebView</a>.
+
+<p>If you cannot set the width of the viewport in the HTML, then you should call
+{@link android.webkit.WebSettings#setUseWideViewPort setUseWideViewPort()} to ensure the page
+is given a larger viewport. For example:</p>
+
+<pre>
+WebSettings settings = webView.getSettings();
+settings.setUseWideViewPort(true);
+settings.setLoadWithOverviewMode(true);
+</pre>
+
+
+
+
+
+<h2 id="Style">Styling Changes</h2>
+
+<h3 id="BackgroundSize">The background CSS shorthand overrides background-size</h3>
+
+<p>Chrome and other browser have behaved this way for a while, but now
+{@link android.webkit.WebView} will also override a CSS setting for {@code background-size}
+if you also specify the {@code background} style. For example, the size here will be reset
+to a default value:</p>
+
+<pre class="no-pretty-print">
+.some-class {
+ background-size: contain;
+ background: url('images/image.png') no-repeat;
+}
+</pre>
+
+<p>The fix is to simply switch the two properties around.</p>
+
+<pre class="no-pretty-print">
+.some-class {
+ background: url('images/image.png') no-repeat;
+ background-size: contain;
+}
+</pre>
+
+
+<h3 id="Pixels">Sizes are in CSS pixels instead of screen pixels</h3>
+
+<p>Previously, size parameters such as <a
+href="https://developer.mozilla.org/en-US/docs/Web/API/Window.outerWidth" class="external-link">
+<code>window.outerWidth</code></a> and
+<a href="https://developer.mozilla.org/en-US/docs/Web/API/Window.outerHeight"
+class="external-link"><code>window.outerHeight</code></a> returned a value in actual screen pixels.
+In the new {@link android.webkit.WebView}, these return a value based on CSS pixels.</p>
+
+<p>It's generally bad practice to try and calculate the physical size in pixels for
+sizing elements or other calculations. However, if you've disabled zooming and the initial-scale
+is set to 1.0, you can use <code>window.devicePixelRatio</code>
+to get the scale, then multiply the CSS pixel value by that. Instead,
+you can also <a href="{@docRoot}guide/webapps/webview.html#BindingJavaScript">create a
+JavaScript binding</a> to query the pixel size from the {@link android.webkit.WebView} itself.</p>
+
+<p>For more information, see <a class="external-link"
+href="http://www.quirksmode.org/blog/archives/2012/03/windowouterwidt.html">quirksmode.org</a>.</p>
+
+
+
+<h3 id="Columns">NARROW_COLUMNS and SINGLE_COLUMN no longer supported</h3>
+
+<p>The {@link android.webkit.WebSettings.LayoutAlgorithm#NARROW_COLUMNS} value for {@link
+android.webkit.WebSettings.LayoutAlgorithm} is not be supported in the new {@link
+android.webkit.WebView}.</p>
+
+<p class="caution"><strong>Caution:</strong> These APIs are not supported on Android 4.4 and higher
+at all. Even if your <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target"
+>{@code targetSdkVersion}</a> is set to "18" or lower, these APIs have no effect.</p>
+
+<p>You can handle this change in the following ways:</p>
+
+<ul>
+ <li>Alter the styles of your application:
+ <p>If you have control of the HTML and CSS on the page, you may find that altering the design
+ of your content may be the most reliable approach. For example, for screens where you cite
+ licenses, you may want wrap text inside of a
+ <code><pre></code> tag, which you could do with the following styles:
+ <pre><pre style="word-wrap: break-word; white-space: pre-wrap;"></pre>
+ <p>This may be especially helpful if you have not defined the viewport properties for
+ your page.</p>
+ </li>
+ <li>Use the new {@link android.webkit.WebSettings.LayoutAlgorithm#TEXT_AUTOSIZING} layout
+ algorithm:
+ <p>If you were using narrow columns as a way to make a broad spectrum of desktop
+ sites more readable on mobile devices and you aren't able to change the HTML content, the new
+ {@link android.webkit.WebSettings.LayoutAlgorithm#TEXT_AUTOSIZING} algorithm may be a
+ suitable alternative to {@link android.webkit.WebSettings.LayoutAlgorithm#NARROW_COLUMNS}.</p>
+ </li>
+</ul>
+
+<p>Additionally, the {@link android.webkit.WebSettings.LayoutAlgorithm#SINGLE_COLUMN} value—which
+was previously deprecated—is also not supported in the new {@link
+android.webkit.WebView}.</p>
+
+
+
+
+<h2 id="TouchCancel">Handling Touch Events in JavaScript</h2>
+
+<p>If your web page is directly handling touch events in a {@link android.webkit.WebView},
+be sure you are also handling the <a
+href="https://developer.mozilla.org/en-US/docs/Web/Reference/Events/touchcancel"
+class="external-link"><code>touchcancel</code></a>
+event. There are a few scenarios where <code>touchcancel</code> will be called, which can
+cause problems if not received:</p>
+
+<ul>
+ <li>An element is touched (so <code>touchstart</code> and <code>touchmove</code> are called)
+ and the page is scrolled, causing a <code>touchcancel</code> to be thrown.</li>
+ <li>An element is touched (<code>touchstart</code> is called) but
+ <code>event.preventDefault()</code> is not called, resulting earlier enough that
+ <code>touchcancel</code> is thrown (so
+ {@link android.webkit.WebView} assumes you don't want to consume the touch events).</li>
+</ul>
+
+
+
diff --git a/docs/html/images/kk-android-44.png b/docs/html/images/kk-android-44.png
new file mode 100644
index 0000000..954b038
--- /dev/null
+++ b/docs/html/images/kk-android-44.png
Binary files differ
diff --git a/docs/html/images/kk-captions-n5.png b/docs/html/images/kk-captions-n5.png
new file mode 100644
index 0000000..f38c648
--- /dev/null
+++ b/docs/html/images/kk-captions-n5.png
Binary files differ
diff --git a/docs/html/images/kk-chromium-icon.png b/docs/html/images/kk-chromium-icon.png
new file mode 100644
index 0000000..e391920
--- /dev/null
+++ b/docs/html/images/kk-chromium-icon.png
Binary files differ
diff --git a/docs/html/images/kk-home-crop.png b/docs/html/images/kk-home-crop.png
new file mode 100644
index 0000000..f609397
--- /dev/null
+++ b/docs/html/images/kk-home-crop.png
Binary files differ
diff --git a/docs/html/images/kk-home-crop2.png b/docs/html/images/kk-home-crop2.png
new file mode 100644
index 0000000..70894aa
--- /dev/null
+++ b/docs/html/images/kk-home-crop2.png
Binary files differ
diff --git a/docs/html/images/kk-home.png b/docs/html/images/kk-home.png
new file mode 100644
index 0000000..fda311a
--- /dev/null
+++ b/docs/html/images/kk-home.png
Binary files differ
diff --git a/docs/html/images/kk-immersive-pacras.png b/docs/html/images/kk-immersive-pacras.png
new file mode 100644
index 0000000..9fcfbf8
--- /dev/null
+++ b/docs/html/images/kk-immersive-pacras.png
Binary files differ
diff --git a/docs/html/images/kk-loudnessEnhancerAnnotated.png b/docs/html/images/kk-loudnessEnhancerAnnotated.png
new file mode 100644
index 0000000..63c9e0f
--- /dev/null
+++ b/docs/html/images/kk-loudnessEnhancerAnnotated.png
Binary files differ
diff --git a/docs/html/images/kk-meminfo.png b/docs/html/images/kk-meminfo.png
new file mode 100644
index 0000000..d07404e
--- /dev/null
+++ b/docs/html/images/kk-meminfo.png
Binary files differ
diff --git a/docs/html/images/kk-moves-logo.png b/docs/html/images/kk-moves-logo.png
new file mode 100644
index 0000000..e9b598d
--- /dev/null
+++ b/docs/html/images/kk-moves-logo.png
Binary files differ
diff --git a/docs/html/images/kk-moves-n5.png b/docs/html/images/kk-moves-n5.png
new file mode 100644
index 0000000..2258334
--- /dev/null
+++ b/docs/html/images/kk-moves-n5.png
Binary files differ
diff --git a/docs/html/images/kk-print-land-n5.png b/docs/html/images/kk-print-land-n5.png
new file mode 100644
index 0000000..a48e57d
--- /dev/null
+++ b/docs/html/images/kk-print-land-n5.png
Binary files differ
diff --git a/docs/html/images/kk-print-port-new.png b/docs/html/images/kk-print-port-new.png
new file mode 100644
index 0000000..49ba657
--- /dev/null
+++ b/docs/html/images/kk-print-port-new.png
Binary files differ
diff --git a/docs/html/images/kk-proc-device-detail.png b/docs/html/images/kk-proc-device-detail.png
new file mode 100644
index 0000000..3769d93
--- /dev/null
+++ b/docs/html/images/kk-proc-device-detail.png
Binary files differ
diff --git a/docs/html/images/kk-proc-device-overview-tri.png b/docs/html/images/kk-proc-device-overview-tri.png
new file mode 100644
index 0000000..54e1156
--- /dev/null
+++ b/docs/html/images/kk-proc-device-overview-tri.png
Binary files differ
diff --git a/docs/html/images/kk-proc-device-overview.png b/docs/html/images/kk-proc-device-overview.png
new file mode 100644
index 0000000..0fbb33a7
--- /dev/null
+++ b/docs/html/images/kk-proc-device-overview.png
Binary files differ
diff --git a/docs/html/images/kk-procstats.png b/docs/html/images/kk-procstats.png
new file mode 100644
index 0000000..c5e3219
--- /dev/null
+++ b/docs/html/images/kk-procstats.png
Binary files differ
diff --git a/docs/html/images/kk-pseudolocale-rtl.png b/docs/html/images/kk-pseudolocale-rtl.png
new file mode 100644
index 0000000..8ec9119
--- /dev/null
+++ b/docs/html/images/kk-pseudolocale-rtl.png
Binary files differ
diff --git a/docs/html/images/kk-rs-chart-versions.png b/docs/html/images/kk-rs-chart-versions.png
new file mode 100644
index 0000000..abd7939
--- /dev/null
+++ b/docs/html/images/kk-rs-chart-versions.png
Binary files differ
diff --git a/docs/html/images/kk-runtastic-logo.png b/docs/html/images/kk-runtastic-logo.png
new file mode 100644
index 0000000..b161be5
--- /dev/null
+++ b/docs/html/images/kk-runtastic-logo.png
Binary files differ
diff --git a/docs/html/images/kk-saf1-n5.png b/docs/html/images/kk-saf1-n5.png
new file mode 100644
index 0000000..7693f18
--- /dev/null
+++ b/docs/html/images/kk-saf1-n5.png
Binary files differ
diff --git a/docs/html/images/kk-saf2-n5.png b/docs/html/images/kk-saf2-n5.png
new file mode 100644
index 0000000..21d7b9d
--- /dev/null
+++ b/docs/html/images/kk-saf2-n5.png
Binary files differ
diff --git a/docs/html/images/providers/storage_dataflow.png b/docs/html/images/providers/storage_dataflow.png
new file mode 100644
index 0000000..ceb71ca
--- /dev/null
+++ b/docs/html/images/providers/storage_dataflow.png
Binary files differ
diff --git a/docs/html/images/providers/storage_datamodel.png b/docs/html/images/providers/storage_datamodel.png
new file mode 100644
index 0000000..6864d37
--- /dev/null
+++ b/docs/html/images/providers/storage_datamodel.png
Binary files differ
diff --git a/docs/html/images/providers/storage_photos.png b/docs/html/images/providers/storage_photos.png
new file mode 100644
index 0000000..a83ebb1
--- /dev/null
+++ b/docs/html/images/providers/storage_photos.png
Binary files differ
diff --git a/docs/html/images/providers/storage_picker.png b/docs/html/images/providers/storage_picker.png
new file mode 100644
index 0000000..a811c56
--- /dev/null
+++ b/docs/html/images/providers/storage_picker.png
Binary files differ
diff --git a/docs/html/images/training/low_profile_hide2x.png b/docs/html/images/training/low_profile_hide2x.png
new file mode 100644
index 0000000..4248bcc
--- /dev/null
+++ b/docs/html/images/training/low_profile_hide2x.png
Binary files differ
diff --git a/docs/html/images/training/low_profile_show2x.png b/docs/html/images/training/low_profile_show2x.png
new file mode 100644
index 0000000..748c017
--- /dev/null
+++ b/docs/html/images/training/low_profile_show2x.png
Binary files differ
diff --git a/docs/html/images/training/navigation-bar.png b/docs/html/images/training/navigation-bar.png
new file mode 100644
index 0000000..e024d70
--- /dev/null
+++ b/docs/html/images/training/navigation-bar.png
Binary files differ
diff --git a/docs/html/images/training/status-bar.png b/docs/html/images/training/status-bar.png
new file mode 100644
index 0000000..0a2bcae
--- /dev/null
+++ b/docs/html/images/training/status-bar.png
Binary files differ
diff --git a/docs/html/images/training/status_bar_hide.png b/docs/html/images/training/status_bar_hide.png
new file mode 100644
index 0000000..189db4a
--- /dev/null
+++ b/docs/html/images/training/status_bar_hide.png
Binary files differ
diff --git a/docs/html/images/training/status_bar_show.png b/docs/html/images/training/status_bar_show.png
new file mode 100644
index 0000000..b456258
--- /dev/null
+++ b/docs/html/images/training/status_bar_show.png
Binary files differ
diff --git a/docs/html/images/training/system-ui.png b/docs/html/images/training/system-ui.png
new file mode 100644
index 0000000..a3aea65
--- /dev/null
+++ b/docs/html/images/training/system-ui.png
Binary files differ
diff --git a/docs/html/images/transparent--bars@2x.png b/docs/html/images/transparent--bars@2x.png
new file mode 100644
index 0000000..a3e2f70
--- /dev/null
+++ b/docs/html/images/transparent--bars@2x.png
Binary files differ
diff --git a/docs/html/samples/samples_toc.cs b/docs/html/samples/samples_toc.cs
index 14a5b0a..3de31b9 100644
--- a/docs/html/samples/samples_toc.cs
+++ b/docs/html/samples/samples_toc.cs
@@ -12,5 +12,5 @@
<span class="en">About the Samples</span></a>
</div>
</li>
-</ul>
+ <li class="nav-section"><div class="nav-section-header"><a href="/samples/topic.html#t=Background" title="Background">Background</a></div><ul><li class="nav-section"><div class="nav-section-header"><a href="/samples/repeatingAlarm/index.html" title="repeatingAlarm">repeatingAlarm</a></div><ul><li><a href="/samples/repeatingAlarm/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/repeatingAlarm/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/repeatingAlarm/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/repeatingAlarm/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/repeatingAlarm/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/repeatingAlarm/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/repeatingAlarm/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/repeatingAlarm/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/repeatingAlarm/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/repeatingAlarm/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/repeatingAlarm/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/repeatingAlarm/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/repeatingAlarm/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/repeatingAlarm/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common">com.example.android.common/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="activities">activities/</a></div><ul><li><a href="/samples/repeatingAlarm/src/com.example.android.common/activities/SampleActivityBase.html" title="SampleActivityBase.java">SampleActivityBase.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="logger">logger/</a></div><ul><li><a href="/samples/repeatingAlarm/src/com.example.android.common/logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/repeatingAlarm/src/com.example.android.common/logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/repeatingAlarm/src/com.example.android.common/logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/repeatingAlarm/src/com.example.android.common/logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/repeatingAlarm/src/com.example.android.common/logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/repeatingAlarm/src/com.example.android.common/logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.repeatingalarm">com.example.android.repeatingalarm/</a></div><ul><li><a href="/samples/repeatingAlarm/src/com.example.android.repeatingalarm/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li><li><a href="/samples/repeatingAlarm/src/com.example.android.repeatingalarm/RepeatingAlarmFragment.html" title="RepeatingAlarmFragment.java">RepeatingAlarmFragment.java</a></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/topic.html#t=Connectivity" title="Connectivity">Connectivity</a></div><ul style="display: none;"><li class="nav-section"><div class="nav-section-header"><a href="/samples/BluetoothLeGatt/index.html" title="BluetoothLeGatt">BluetoothLeGatt</a></div><ul style="display: none;"><li><a href="/samples/BluetoothLeGatt/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BluetoothLeGatt/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BluetoothLeGatt/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BluetoothLeGatt/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BluetoothLeGatt/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BluetoothLeGatt/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BluetoothLeGatt/res/layout/actionbar_indeterminate_progress.html" title="actionbar_indeterminate_progress.xml">actionbar_indeterminate_progress.xml</a></li><li><a href="/samples/BluetoothLeGatt/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/BluetoothLeGatt/res/layout/gatt_services_characteristics.html" title="gatt_services_characteristics.xml">gatt_services_characteristics.xml</a></li><li><a href="/samples/BluetoothLeGatt/res/layout/listitem_device.html" title="listitem_device.xml">listitem_device.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/BluetoothLeGatt/res/menu/gatt_services.html" title="gatt_services.xml">gatt_services.xml</a></li><li><a href="/samples/BluetoothLeGatt/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BluetoothLeGatt/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BluetoothLeGatt/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BluetoothLeGatt/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BluetoothLeGatt/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BluetoothLeGatt/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BluetoothLeGatt/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul style="display: none;"><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.bluetoothlegatt">com.example.android.bluetoothlegatt/</a></div><ul style="display: none;"><li><a href="/samples/BluetoothLeGatt/src/com.example.android.bluetoothlegatt/BluetoothLeService.html" title="BluetoothLeService.java">BluetoothLeService.java</a></li><li><a href="/samples/BluetoothLeGatt/src/com.example.android.bluetoothlegatt/DeviceControlActivity.html" title="DeviceControlActivity.java">DeviceControlActivity.java</a></li><li><a href="/samples/BluetoothLeGatt/src/com.example.android.bluetoothlegatt/DeviceScanActivity.html" title="DeviceScanActivity.java">DeviceScanActivity.java</a></li><li><a href="/samples/BluetoothLeGatt/src/com.example.android.bluetoothlegatt/SampleGattAttributes.html" title="SampleGattAttributes.java">SampleGattAttributes.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/NetworkConnect/index.html" title="NetworkConnect">NetworkConnect</a></div><ul><li><a href="/samples/NetworkConnect/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/NetworkConnect/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/NetworkConnect/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/NetworkConnect/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/NetworkConnect/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/NetworkConnect/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/NetworkConnect/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/NetworkConnect/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/NetworkConnect/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/NetworkConnect/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/NetworkConnect/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/NetworkConnect/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/NetworkConnect/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/NetworkConnect/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/NetworkConnect/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/NetworkConnect/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/NetworkConnect/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/NetworkConnect/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/NetworkConnect/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/NetworkConnect/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/NetworkConnect/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.networkconnect">com.example.android.networkconnect/</a></div><ul><li><a href="/samples/NetworkConnect/src/com.example.android.networkconnect/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li><li><a href="/samples/NetworkConnect/src/com.example.android.networkconnect/SimpleTextFragment.html" title="SimpleTextFragment.java">SimpleTextFragment.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicNetworking/index.html" title="BasicNetworking">BasicNetworking</a></div><ul><li><a href="/samples/BasicNetworking/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicNetworking/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicNetworking/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicNetworking/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicNetworking/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicNetworking/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicNetworking/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/BasicNetworking/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/BasicNetworking/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicNetworking/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicNetworking/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicNetworking/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicNetworking/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicNetworking/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicNetworking/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basicnetworking">com.example.android.basicnetworking/</a></div><ul><li><a href="/samples/BasicNetworking/src/com.example.android.basicnetworking/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li><li><a href="/samples/BasicNetworking/src/com.example.android.basicnetworking/SimpleTextFragment.html" title="SimpleTextFragment.java">SimpleTextFragment.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/BasicNetworking/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/BasicNetworking/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/BasicNetworking/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/BasicNetworking/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/BasicNetworking/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/BasicNetworking/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicSyncAdapter/index.html" title="BasicSyncAdapter">BasicSyncAdapter</a></div><ul><li><a href="/samples/BasicSyncAdapter/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicSyncAdapter/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicSyncAdapter/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicSyncAdapter/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicSyncAdapter/res/drawable-xhdpi/ic_action_refresh.html" title="ic_action_refresh.png">ic_action_refresh.png</a></li><li><a href="/samples/BasicSyncAdapter/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicSyncAdapter/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicSyncAdapter/res/layout/actionbar_indeterminate_progress.html" title="actionbar_indeterminate_progress.xml">actionbar_indeterminate_progress.xml</a></li><li><a href="/samples/BasicSyncAdapter/res/layout/activity_entry_list.html" title="activity_entry_list.xml">activity_entry_list.xml</a></li><li><a href="/samples/BasicSyncAdapter/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/BasicSyncAdapter/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicSyncAdapter/res/values/attrs.html" title="attrs.xml">attrs.xml</a></li><li><a href="/samples/BasicSyncAdapter/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicSyncAdapter/res/values/dimen.html" title="dimen.xml">dimen.xml</a></li><li><a href="/samples/BasicSyncAdapter/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicSyncAdapter/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicSyncAdapter/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicSyncAdapter/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicSyncAdapter/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="xml">xml/</a></div><ul><li><a href="/samples/BasicSyncAdapter/res/xml/authenticator.html" title="authenticator.xml">authenticator.xml</a></li><li><a href="/samples/BasicSyncAdapter/res/xml/syncadapter.html" title="syncadapter.xml">syncadapter.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basicsyncadapter">com.example.android.basicsyncadapter/</a></div><ul><li><a href="/samples/BasicSyncAdapter/src/com.example.android.basicsyncadapter/EntryListActivity.html" title="EntryListActivity.java">EntryListActivity.java</a></li><li><a href="/samples/BasicSyncAdapter/src/com.example.android.basicsyncadapter/EntryListFragment.html" title="EntryListFragment.java">EntryListFragment.java</a></li><li><a href="/samples/BasicSyncAdapter/src/com.example.android.basicsyncadapter/SyncAdapter.html" title="SyncAdapter.java">SyncAdapter.java</a></li><li><a href="/samples/BasicSyncAdapter/src/com.example.android.basicsyncadapter/SyncService.html" title="SyncService.java">SyncService.java</a></li><li><a href="/samples/BasicSyncAdapter/src/com.example.android.basicsyncadapter/SyncUtils.html" title="SyncUtils.java">SyncUtils.java</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="net">net/</a></div><ul><li><a href="/samples/BasicSyncAdapter/src/com.example.android.basicsyncadapter/net/FeedParser.html" title="FeedParser.java">FeedParser.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="provider">provider/</a></div><ul><li><a href="/samples/BasicSyncAdapter/src/com.example.android.basicsyncadapter/provider/FeedContract.html" title="FeedContract.java">FeedContract.java</a></li><li><a href="/samples/BasicSyncAdapter/src/com.example.android.basicsyncadapter/provider/FeedProvider.html" title="FeedProvider.java">FeedProvider.java</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common">com.example.android.common/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="accounts">accounts/</a></div><ul><li><a href="/samples/BasicSyncAdapter/src/com.example.android.common/accounts/GenericAccountService.html" title="GenericAccountService.java">GenericAccountService.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="db">db/</a></div><ul><li><a href="/samples/BasicSyncAdapter/src/com.example.android.common/db/SelectionBuilder.html" title="SelectionBuilder.java">SelectionBuilder.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="logger">logger/</a></div><ul><li><a href="/samples/BasicSyncAdapter/src/com.example.android.common/logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/BasicSyncAdapter/src/com.example.android.common/logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/BasicSyncAdapter/src/com.example.android.common/logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/BasicSyncAdapter/src/com.example.android.common/logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/BasicSyncAdapter/src/com.example.android.common/logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/BasicSyncAdapter/src/com.example.android.common/logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/topic.html#t=Content" title="Content">Content</a></div><ul><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicContactables/index.html" title="BasicContactables">BasicContactables</a></div><ul><li><a href="/samples/BasicContactables/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicContactables/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicContactables/res/drawable-hdpi/ic_search_api_holo_light.html" title="ic_search_api_holo_light.png">ic_search_api_holo_light.png</a></li><li><a href="/samples/BasicContactables/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicContactables/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicContactables/res/drawable-mdpi/ic_search_api_holo_light.html" title="ic_search_api_holo_light.png">ic_search_api_holo_light.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicContactables/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicContactables/res/drawable-xhdpi/ic_search_api_holo_light.html" title="ic_search_api_holo_light.png">ic_search_api_holo_light.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicContactables/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicContactables/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/BasicContactables/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/BasicContactables/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicContactables/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicContactables/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicContactables/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicContactables/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicContactables/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicContactables/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="xml">xml/</a></div><ul><li><a href="/samples/BasicContactables/res/xml/searchable.html" title="searchable.xml">searchable.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basiccontactables">com.example.android.basiccontactables/</a></div><ul><li><a href="/samples/BasicContactables/src/com.example.android.basiccontactables/ContactablesLoaderCallbacks.html" title="ContactablesLoaderCallbacks.java">ContactablesLoaderCallbacks.java</a></li><li><a href="/samples/BasicContactables/src/com.example.android.basiccontactables/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/BasicContactables/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/BasicContactables/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/BasicContactables/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/BasicContactables/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/BasicContactables/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/BasicContactables/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/AppRestrictions/index.html" title="AppRestrictions">AppRestrictions</a></div><ul><li><a href="/samples/AppRestrictions/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/AppRestrictions/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/AppRestrictions/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/AppRestrictions/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/AppRestrictions/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/AppRestrictions/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/AppRestrictions/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/AppRestrictions/res/layout/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/AppRestrictions/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/AppRestrictions/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/AppRestrictions/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/AppRestrictions/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/AppRestrictions/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/AppRestrictions/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="xml">xml/</a></div><ul><li><a href="/samples/AppRestrictions/res/xml/custom_prefs.html" title="custom_prefs.xml">custom_prefs.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.apprestrictions">com.example.android.apprestrictions/</a></div><ul><li><a href="/samples/AppRestrictions/src/com.example.android.apprestrictions/CustomRestrictionsActivity.html" title="CustomRestrictionsActivity.java">CustomRestrictionsActivity.java</a></li><li><a href="/samples/AppRestrictions/src/com.example.android.apprestrictions/CustomRestrictionsFragment.html" title="CustomRestrictionsFragment.java">CustomRestrictionsFragment.java</a></li><li><a href="/samples/AppRestrictions/src/com.example.android.apprestrictions/GetRestrictionsReceiver.html" title="GetRestrictionsReceiver.java">GetRestrictionsReceiver.java</a></li><li><a href="/samples/AppRestrictions/src/com.example.android.apprestrictions/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/StorageClient/index.html" title="StorageClient">StorageClient</a></div><ul><li><a href="/samples/StorageClient/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/StorageClient/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/StorageClient/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/StorageClient/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/StorageClient/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/StorageClient/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/StorageClient/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/StorageClient/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/StorageClient/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/StorageClient/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/StorageClient/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/StorageClient/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/StorageClient/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/StorageClient/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common">com.example.android.common/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="activities">activities/</a></div><ul><li><a href="/samples/StorageClient/src/com.example.android.common/activities/SampleActivityBase.html" title="SampleActivityBase.java">SampleActivityBase.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="logger">logger/</a></div><ul><li><a href="/samples/StorageClient/src/com.example.android.common/logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/StorageClient/src/com.example.android.common/logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/StorageClient/src/com.example.android.common/logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/StorageClient/src/com.example.android.common/logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/StorageClient/src/com.example.android.common/logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/StorageClient/src/com.example.android.common/logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.storageclient">com.example.android.storageclient/</a></div><ul><li><a href="/samples/StorageClient/src/com.example.android.storageclient/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li><li><a href="/samples/StorageClient/src/com.example.android.storageclient/StorageClientFragment.html" title="StorageClientFragment.java">StorageClientFragment.java</a></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/topic.html#t=Input" title="Input">Input</a></div><ul><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicMultitouch/index.html" title="BasicMultitouch">BasicMultitouch</a></div><ul><li><a href="/samples/BasicMultitouch/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicMultitouch/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicMultitouch/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicMultitouch/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicMultitouch/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicMultitouch/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicMultitouch/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/BasicMultitouch/res/layout/layout_mainactivity.html" title="layout_mainactivity.xml">layout_mainactivity.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicMultitouch/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicMultitouch/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicMultitouch/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicMultitouch/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicMultitouch/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicMultitouch/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-v11">values-v11/</a></div><ul><li><a href="/samples/BasicMultitouch/res/values-v11/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-v14">values-v14/</a></div><ul><li><a href="/samples/BasicMultitouch/res/values-v14/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basicmultitouch">com.example.android.basicmultitouch/</a></div><ul><li><a href="/samples/BasicMultitouch/src/com.example.android.basicmultitouch/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li><li><a href="/samples/BasicMultitouch/src/com.example.android.basicmultitouch/Pools.html" title="Pools.java">Pools.java</a></li><li><a href="/samples/BasicMultitouch/src/com.example.android.basicmultitouch/TouchDisplayView.html" title="TouchDisplayView.java">TouchDisplayView.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/BasicMultitouch/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/BasicMultitouch/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/BasicMultitouch/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/BasicMultitouch/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/BasicMultitouch/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/BasicMultitouch/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicGestureDetect/index.html" title="BasicGestureDetect">BasicGestureDetect</a></div><ul><li><a href="/samples/BasicGestureDetect/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicGestureDetect/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicGestureDetect/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicGestureDetect/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicGestureDetect/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicGestureDetect/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicGestureDetect/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/BasicGestureDetect/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicGestureDetect/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicGestureDetect/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicGestureDetect/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicGestureDetect/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicGestureDetect/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicGestureDetect/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basicgesturedetect">com.example.android.basicgesturedetect/</a></div><ul><li><a href="/samples/BasicGestureDetect/src/com.example.android.basicgesturedetect/BasicGestureDetectFragment.html" title="BasicGestureDetectFragment.java">BasicGestureDetectFragment.java</a></li><li><a href="/samples/BasicGestureDetect/src/com.example.android.basicgesturedetect/GestureListener.html" title="GestureListener.java">GestureListener.java</a></li><li><a href="/samples/BasicGestureDetect/src/com.example.android.basicgesturedetect/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common">com.example.android.common/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="activities">activities/</a></div><ul><li><a href="/samples/BasicGestureDetect/src/com.example.android.common/activities/SampleActivityBase.html" title="SampleActivityBase.java">SampleActivityBase.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="logger">logger/</a></div><ul><li><a href="/samples/BasicGestureDetect/src/com.example.android.common/logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/BasicGestureDetect/src/com.example.android.common/logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/BasicGestureDetect/src/com.example.android.common/logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/BasicGestureDetect/src/com.example.android.common/logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/BasicGestureDetect/src/com.example.android.common/logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/BasicGestureDetect/src/com.example.android.common/logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/topic.html#t=Media" title="Media">Media</a></div><ul><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicMediaRouter/index.html" title="BasicMediaRouter">BasicMediaRouter</a></div><ul><li><a href="/samples/BasicMediaRouter/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicMediaRouter/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicMediaRouter/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicMediaRouter/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicMediaRouter/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicMediaRouter/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicMediaRouter/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/BasicMediaRouter/res/layout/display.html" title="display.xml">display.xml</a></li><li><a href="/samples/BasicMediaRouter/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/BasicMediaRouter/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicMediaRouter/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicMediaRouter/res/values/colors.html" title="colors.xml">colors.xml</a></li><li><a href="/samples/BasicMediaRouter/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicMediaRouter/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicMediaRouter/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicMediaRouter/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicMediaRouter/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basicmediarouter">com.example.android.basicmediarouter/</a></div><ul><li><a href="/samples/BasicMediaRouter/src/com.example.android.basicmediarouter/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li><li><a href="/samples/BasicMediaRouter/src/com.example.android.basicmediarouter/SamplePresentation.html" title="SamplePresentation.java">SamplePresentation.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/BasicMediaRouter/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/BasicMediaRouter/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/BasicMediaRouter/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/BasicMediaRouter/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/BasicMediaRouter/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/BasicMediaRouter/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicMediaDecoder/index.html" title="BasicMediaDecoder">BasicMediaDecoder</a></div><ul><li><a href="/samples/BasicMediaDecoder/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable">drawable/</a></div><ul><li><a href="/samples/BasicMediaDecoder/res/drawable/selector_play.html" title="selector_play.xml">selector_play.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicMediaDecoder/res/drawable-hdpi/ic_action_play.html" title="ic_action_play.png">ic_action_play.png</a></li><li><a href="/samples/BasicMediaDecoder/res/drawable-hdpi/ic_action_play_disabled.html" title="ic_action_play_disabled.png">ic_action_play_disabled.png</a></li><li><a href="/samples/BasicMediaDecoder/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicMediaDecoder/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicMediaDecoder/res/drawable-mdpi/ic_action_play.html" title="ic_action_play.png">ic_action_play.png</a></li><li><a href="/samples/BasicMediaDecoder/res/drawable-mdpi/ic_action_play_disabled.html" title="ic_action_play_disabled.png">ic_action_play_disabled.png</a></li><li><a href="/samples/BasicMediaDecoder/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicMediaDecoder/res/drawable-xhdpi/ic_action_play.html" title="ic_action_play.png">ic_action_play.png</a></li><li><a href="/samples/BasicMediaDecoder/res/drawable-xhdpi/ic_action_play_disabled.html" title="ic_action_play_disabled.png">ic_action_play_disabled.png</a></li><li><a href="/samples/BasicMediaDecoder/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicMediaDecoder/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicMediaDecoder/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/BasicMediaDecoder/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/BasicMediaDecoder/res/menu/action_menu.html" title="action_menu.xml">action_menu.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="raw">raw/</a></div><ul><li><a href="/samples/BasicMediaDecoder/res/raw/vid_bigbuckbunny.html" title="vid_bigbuckbunny.mp4">vid_bigbuckbunny.mp4</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicMediaDecoder/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicMediaDecoder/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicMediaDecoder/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicMediaDecoder/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicMediaDecoder/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicMediaDecoder/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basicmediadecoder">com.example.android.basicmediadecoder/</a></div><ul><li><a href="/samples/BasicMediaDecoder/src/com.example.android.basicmediadecoder/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.media">com.example.android.common.media/</a></div><ul><li><a href="/samples/BasicMediaDecoder/src/com.example.android.common.media/CameraHelper.html" title="CameraHelper.java">CameraHelper.java</a></li><li><a href="/samples/BasicMediaDecoder/src/com.example.android.common.media/MediaCodecWrapper.html" title="MediaCodecWrapper.java">MediaCodecWrapper.java</a></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/topic.html#t=Security" title="Security">Security</a></div><ul><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicAndroidKeyStore/index.html" title="BasicAndroidKeyStore">BasicAndroidKeyStore</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicAndroidKeyStore/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicAndroidKeyStore/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicAndroidKeyStore/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicAndroidKeyStore/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicAndroidKeyStore/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basicandroidkeystore">com.example.android.basicandroidkeystore/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/src/com.example.android.basicandroidkeystore/BasicAndroidKeyStoreFragment.html" title="BasicAndroidKeyStoreFragment.java">BasicAndroidKeyStoreFragment.java</a></li><li><a href="/samples/BasicAndroidKeyStore/src/com.example.android.basicandroidkeystore/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li><li><a href="/samples/BasicAndroidKeyStore/src/com.example.android.basicandroidkeystore/SecurityConstants.html" title="SecurityConstants.java">SecurityConstants.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common">com.example.android.common/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="activities">activities/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/src/com.example.android.common/activities/SampleActivityBase.html" title="SampleActivityBase.java">SampleActivityBase.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="logger">logger/</a></div><ul><li><a href="/samples/BasicAndroidKeyStore/src/com.example.android.common/logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/BasicAndroidKeyStore/src/com.example.android.common/logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/BasicAndroidKeyStore/src/com.example.android.common/logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/BasicAndroidKeyStore/src/com.example.android.common/logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/BasicAndroidKeyStore/src/com.example.android.common/logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/BasicAndroidKeyStore/src/com.example.android.common/logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/topic.html#t=Testing" title="Testing">Testing</a></div><ul><li class="nav-section"><div class="nav-section-header"><a href="/samples/ActivityInstrumentation/index.html" title="ActivityInstrumentation">ActivityInstrumentation</a></div><ul><li><a href="/samples/ActivityInstrumentation/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/ActivityInstrumentation/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/ActivityInstrumentation/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/ActivityInstrumentation/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/ActivityInstrumentation/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/ActivityInstrumentation/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/ActivityInstrumentation/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/ActivityInstrumentation/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/ActivityInstrumentation/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/ActivityInstrumentation/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/ActivityInstrumentation/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/ActivityInstrumentation/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/ActivityInstrumentation/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/ActivityInstrumentation/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw720dp-land">values-sw720dp-land/</a></div><ul><li><a href="/samples/ActivityInstrumentation/res/values-sw720dp-land/dimens.html" title="dimens.xml">dimens.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.activityinstrumentation">com.example.android.activityinstrumentation/</a></div><ul><li><a href="/samples/ActivityInstrumentation/src/com.example.android.activityinstrumentation/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/ActivityInstrumentation/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/ActivityInstrumentation/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/ActivityInstrumentation/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/ActivityInstrumentation/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/ActivityInstrumentation/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/ActivityInstrumentation/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/topic.html#t=UI" title="UI">UI</a></div><ul><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicAccessibility/index.html" title="BasicAccessibility">BasicAccessibility</a></div><ul><li><a href="/samples/BasicAccessibility/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicAccessibility/res/drawable-hdpi/ic_action_discard.html" title="ic_action_discard.png">ic_action_discard.png</a></li><li><a href="/samples/BasicAccessibility/res/drawable-hdpi/ic_action_info.html" title="ic_action_info.png">ic_action_info.png</a></li><li><a href="/samples/BasicAccessibility/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicAccessibility/res/drawable-hdpi/partly_cloudy.html" title="partly_cloudy.png">partly_cloudy.png</a></li><li><a href="/samples/BasicAccessibility/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicAccessibility/res/drawable-mdpi/ic_action_discard.html" title="ic_action_discard.png">ic_action_discard.png</a></li><li><a href="/samples/BasicAccessibility/res/drawable-mdpi/ic_action_info.html" title="ic_action_info.png">ic_action_info.png</a></li><li><a href="/samples/BasicAccessibility/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicAccessibility/res/drawable-xhdpi/ic_action_discard.html" title="ic_action_discard.png">ic_action_discard.png</a></li><li><a href="/samples/BasicAccessibility/res/drawable-xhdpi/ic_action_info.html" title="ic_action_info.png">ic_action_info.png</a></li><li><a href="/samples/BasicAccessibility/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicAccessibility/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicAccessibility/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/BasicAccessibility/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicAccessibility/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicAccessibility/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicAccessibility/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicAccessibility/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicAccessibility/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicAccessibility/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw720dp-land">values-sw720dp-land/</a></div><ul><li><a href="/samples/BasicAccessibility/res/values-sw720dp-land/dimens.html" title="dimens.xml">dimens.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basicaccessibility">com.example.android.basicaccessibility/</a></div><ul><li><a href="/samples/BasicAccessibility/src/com.example.android.basicaccessibility/DialView.html" title="DialView.java">DialView.java</a></li><li><a href="/samples/BasicAccessibility/src/com.example.android.basicaccessibility/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/BasicAccessibility/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/BasicAccessibility/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/BasicAccessibility/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/BasicAccessibility/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/BasicAccessibility/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/BasicAccessibility/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/HorizontalPaging/index.html" title="HorizontalPaging">HorizontalPaging</a></div><ul><li><a href="/samples/HorizontalPaging/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/HorizontalPaging/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/HorizontalPaging/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/HorizontalPaging/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/HorizontalPaging/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/HorizontalPaging/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/HorizontalPaging/res/layout/fragment_main_dummy.html" title="fragment_main_dummy.xml">fragment_main_dummy.xml</a></li><li><a href="/samples/HorizontalPaging/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/HorizontalPaging/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/HorizontalPaging/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/HorizontalPaging/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/HorizontalPaging/res/values/styles.html" title="styles.xml">styles.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw720dp-land">values-sw720dp-land/</a></div><ul><li><a href="/samples/HorizontalPaging/res/values/values-sw720dp-land/dimens.html" title="dimens.xml">dimens.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/HorizontalPaging/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/HorizontalPaging/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.horizontalpaging">com.example.android.horizontalpaging/</a></div><ul><li><a href="/samples/HorizontalPaging/src/com.example.android.horizontalpaging/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/ShareActionProvider/index.html" title="ShareActionProvider">ShareActionProvider</a></div><ul><li><a href="/samples/ShareActionProvider/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/ShareActionProvider/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/ShareActionProvider/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/ShareActionProvider/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/ShareActionProvider/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/ShareActionProvider/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/ShareActionProvider/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/ShareActionProvider/res/layout/item_image.html" title="item_image.xml">item_image.xml</a></li><li><a href="/samples/ShareActionProvider/res/layout/item_text.html" title="item_text.xml">item_text.xml</a></li><li><a href="/samples/ShareActionProvider/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/ShareActionProvider/res/menu/main_menu.html" title="main_menu.xml">main_menu.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/ShareActionProvider/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/ShareActionProvider/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/ShareActionProvider/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/ShareActionProvider/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/ShareActionProvider/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/ShareActionProvider/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.actionbarcompat.shareactionprovider">com.example.android.actionbarcompat.shareactionprovider/</a></div><ul><li><a href="/samples/ShareActionProvider/src/com.example.android.actionbarcompat.shareactionprovider/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="content">content/</a></div><ul><li><a href="/samples/ShareActionProvider/src/com.example.android.actionbarcompat.shareactionprovider/content/AssetProvider.html" title="AssetProvider.java">AssetProvider.java</a></li><li><a href="/samples/ShareActionProvider/src/com.example.android.actionbarcompat.shareactionprovider/content/ContentItem.html" title="ContentItem.java">ContentItem.java</a></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/Styled/index.html" title="Styled">Styled</a></div><ul><li><a href="/samples/Styled/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable">drawable/</a></div><ul><li><a href="/samples/Styled/res/drawable/pressed_background.html" title="pressed_background.xml">pressed_background.xml</a></li><li><a href="/samples/Styled/res/drawable/progress_horizontal.html" title="progress_horizontal.xml">progress_horizontal.xml</a></li><li><a href="/samples/Styled/res/drawable/selectable_background.html" title="selectable_background.xml">selectable_background.xml</a></li><li><a href="/samples/Styled/res/drawable/spinner_background_ab.html" title="spinner_background_ab.xml">spinner_background_ab.xml</a></li><li><a href="/samples/Styled/res/drawable/tab_indicator_ab.html" title="tab_indicator_ab.xml">tab_indicator_ab.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/Styled/res/drawable-hdpi/ab_bottom_solid_styled.9.html" title="ab_bottom_solid_styled.9.png">ab_bottom_solid_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/ab_solid_styled.9.html" title="ab_solid_styled.9.png">ab_solid_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/ab_stacked_solid_styled.9.html" title="ab_stacked_solid_styled.9.png">ab_stacked_solid_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/ic_action_location.html" title="ic_action_location.png">ic_action_location.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/ic_action_refresh.html" title="ic_action_refresh.png">ic_action_refresh.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/ic_action_settings.html" title="ic_action_settings.png">ic_action_settings.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/list_focused_styled.9.html" title="list_focused_styled.9.png">list_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/menu_dropdown_panel_styled.9.html" title="menu_dropdown_panel_styled.9.png">menu_dropdown_panel_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/progress_bg_styled.9.html" title="progress_bg_styled.9.png">progress_bg_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/progress_primary_styled.9.html" title="progress_primary_styled.9.png">progress_primary_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/progress_secondary_styled.9.html" title="progress_secondary_styled.9.png">progress_secondary_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/spinner_ab_default_styled.9.html" title="spinner_ab_default_styled.9.png">spinner_ab_default_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/spinner_ab_disabled_styled.9.html" title="spinner_ab_disabled_styled.9.png">spinner_ab_disabled_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/spinner_ab_focused_styled.9.html" title="spinner_ab_focused_styled.9.png">spinner_ab_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/spinner_ab_pressed_styled.9.html" title="spinner_ab_pressed_styled.9.png">spinner_ab_pressed_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/tab_selected_focused_styled.9.html" title="tab_selected_focused_styled.9.png">tab_selected_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/tab_selected_pressed_styled.9.html" title="tab_selected_pressed_styled.9.png">tab_selected_pressed_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/tab_selected_styled.9.html" title="tab_selected_styled.9.png">tab_selected_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/tab_unselected_focused_styled.9.html" title="tab_unselected_focused_styled.9.png">tab_unselected_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/tab_unselected_pressed_styled.9.html" title="tab_unselected_pressed_styled.9.png">tab_unselected_pressed_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/Styled/res/drawable-mdpi/ab_bottom_solid_styled.9.html" title="ab_bottom_solid_styled.9.png">ab_bottom_solid_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/ab_solid_styled.9.html" title="ab_solid_styled.9.png">ab_solid_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/ab_stacked_solid_styled.9.html" title="ab_stacked_solid_styled.9.png">ab_stacked_solid_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/ic_action_location.html" title="ic_action_location.png">ic_action_location.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/ic_action_refresh.html" title="ic_action_refresh.png">ic_action_refresh.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/ic_action_settings.html" title="ic_action_settings.png">ic_action_settings.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/list_focused_styled.9.html" title="list_focused_styled.9.png">list_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/menu_dropdown_panel_styled.9.html" title="menu_dropdown_panel_styled.9.png">menu_dropdown_panel_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/progress_bg_styled.9.html" title="progress_bg_styled.9.png">progress_bg_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/progress_primary_styled.9.html" title="progress_primary_styled.9.png">progress_primary_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/progress_secondary_styled.9.html" title="progress_secondary_styled.9.png">progress_secondary_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/spinner_ab_default_styled.9.html" title="spinner_ab_default_styled.9.png">spinner_ab_default_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/spinner_ab_disabled_styled.9.html" title="spinner_ab_disabled_styled.9.png">spinner_ab_disabled_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/spinner_ab_focused_styled.9.html" title="spinner_ab_focused_styled.9.png">spinner_ab_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/spinner_ab_pressed_styled.9.html" title="spinner_ab_pressed_styled.9.png">spinner_ab_pressed_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/tab_selected_focused_styled.9.html" title="tab_selected_focused_styled.9.png">tab_selected_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/tab_selected_pressed_styled.9.html" title="tab_selected_pressed_styled.9.png">tab_selected_pressed_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/tab_selected_styled.9.html" title="tab_selected_styled.9.png">tab_selected_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/tab_unselected_focused_styled.9.html" title="tab_unselected_focused_styled.9.png">tab_unselected_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-mdpi/tab_unselected_pressed_styled.9.html" title="tab_unselected_pressed_styled.9.png">tab_unselected_pressed_styled.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/Styled/res/drawable-xhdpi/ab_bottom_solid_styled.9.html" title="ab_bottom_solid_styled.9.png">ab_bottom_solid_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/ab_solid_styled.9.html" title="ab_solid_styled.9.png">ab_solid_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/ab_stacked_solid_styled.9.html" title="ab_stacked_solid_styled.9.png">ab_stacked_solid_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/ic_action_location.html" title="ic_action_location.png">ic_action_location.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/ic_action_refresh.html" title="ic_action_refresh.png">ic_action_refresh.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/ic_action_settings.html" title="ic_action_settings.png">ic_action_settings.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/list_focused_styled.9.html" title="list_focused_styled.9.png">list_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/menu_dropdown_panel_styled.9.html" title="menu_dropdown_panel_styled.9.png">menu_dropdown_panel_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/progress_bg_styled.9.html" title="progress_bg_styled.9.png">progress_bg_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/progress_primary_styled.9.html" title="progress_primary_styled.9.png">progress_primary_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/progress_secondary_styled.9.html" title="progress_secondary_styled.9.png">progress_secondary_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/spinner_ab_default_styled.9.html" title="spinner_ab_default_styled.9.png">spinner_ab_default_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/spinner_ab_disabled_styled.9.html" title="spinner_ab_disabled_styled.9.png">spinner_ab_disabled_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/spinner_ab_focused_styled.9.html" title="spinner_ab_focused_styled.9.png">spinner_ab_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/spinner_ab_pressed_styled.9.html" title="spinner_ab_pressed_styled.9.png">spinner_ab_pressed_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/tab_selected_focused_styled.9.html" title="tab_selected_focused_styled.9.png">tab_selected_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/tab_selected_pressed_styled.9.html" title="tab_selected_pressed_styled.9.png">tab_selected_pressed_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/tab_selected_styled.9.html" title="tab_selected_styled.9.png">tab_selected_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/tab_unselected_focused_styled.9.html" title="tab_unselected_focused_styled.9.png">tab_unselected_focused_styled.9.png</a></li><li><a href="/samples/Styled/res/drawable-xhdpi/tab_unselected_pressed_styled.9.html" title="tab_unselected_pressed_styled.9.png">tab_unselected_pressed_styled.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/Styled/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/Styled/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/Styled/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/Styled/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/Styled/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/Styled/res/values/colors.html" title="colors.xml">colors.xml</a></li><li><a href="/samples/Styled/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/Styled/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/Styled/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/Styled/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/Styled/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-v14">values-v14/</a></div><ul><li><a href="/samples/Styled/res/values-v14/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.actionbarcompat.styled">com.example.android.actionbarcompat.styled/</a></div><ul><li><a href="/samples/Styled/src/com.example.android.actionbarcompat.styled/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/Basic/index.html" title="Basic">Basic</a></div><ul><li><a href="/samples/Basic/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/Basic/res/drawable-hdpi/ic_action_location.html" title="ic_action_location.png">ic_action_location.png</a></li><li><a href="/samples/Basic/res/drawable-hdpi/ic_action_refresh.html" title="ic_action_refresh.png">ic_action_refresh.png</a></li><li><a href="/samples/Basic/res/drawable-hdpi/ic_action_settings.html" title="ic_action_settings.png">ic_action_settings.png</a></li><li><a href="/samples/Basic/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/Basic/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/Basic/res/drawable-mdpi/ic_action_location.html" title="ic_action_location.png">ic_action_location.png</a></li><li><a href="/samples/Basic/res/drawable-mdpi/ic_action_refresh.html" title="ic_action_refresh.png">ic_action_refresh.png</a></li><li><a href="/samples/Basic/res/drawable-mdpi/ic_action_settings.html" title="ic_action_settings.png">ic_action_settings.png</a></li><li><a href="/samples/Basic/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/Basic/res/drawable-xhdpi/ic_action_location.html" title="ic_action_location.png">ic_action_location.png</a></li><li><a href="/samples/Basic/res/drawable-xhdpi/ic_action_refresh.html" title="ic_action_refresh.png">ic_action_refresh.png</a></li><li><a href="/samples/Basic/res/drawable-xhdpi/ic_action_settings.html" title="ic_action_settings.png">ic_action_settings.png</a></li><li><a href="/samples/Basic/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/Basic/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/Basic/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/Basic/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/Basic/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/Basic/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/Basic/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/Basic/res/values/ids.html" title="ids.xml">ids.xml</a></li><li><a href="/samples/Basic/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/Basic/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/Basic/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/Basic/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.actionbarcompat.basic">com.example.android.actionbarcompat.basic/</a></div><ul><li><a href="/samples/Basic/src/com.example.android.actionbarcompat.basic/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/ImmersiveMode/index.html" title="ImmersiveMode">ImmersiveMode</a></div><ul><li><a href="/samples/ImmersiveMode/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/ImmersiveMode/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/ImmersiveMode/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/ImmersiveMode/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/ImmersiveMode/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/ImmersiveMode/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/ImmersiveMode/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/ImmersiveMode/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/ImmersiveMode/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/ImmersiveMode/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/ImmersiveMode/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/ImmersiveMode/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/ImmersiveMode/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/ImmersiveMode/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common">com.example.android.common/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="activities">activities/</a></div><ul><li><a href="/samples/ImmersiveMode/src/com.example.android.common/activities/SampleActivityBase.html" title="SampleActivityBase.java">SampleActivityBase.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="logger">logger/</a></div><ul><li><a href="/samples/ImmersiveMode/src/com.example.android.common/logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/ImmersiveMode/src/com.example.android.common/logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/ImmersiveMode/src/com.example.android.common/logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/ImmersiveMode/src/com.example.android.common/logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/ImmersiveMode/src/com.example.android.common/logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/ImmersiveMode/src/com.example.android.common/logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.immersivemode">com.example.android.immersivemode/</a></div><ul><li><a href="/samples/ImmersiveMode/src/com.example.android.immersivemode/ImmersiveModeFragment.html" title="ImmersiveModeFragment.java">ImmersiveModeFragment.java</a></li><li><a href="/samples/ImmersiveMode/src/com.example.android.immersivemode/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/TextSwitcher/index.html" title="TextSwitcher">TextSwitcher</a></div><ul><li><a href="/samples/TextSwitcher/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/TextSwitcher/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/TextSwitcher/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/TextSwitcher/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/TextSwitcher/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/TextSwitcher/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/TextSwitcher/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/TextSwitcher/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/TextSwitcher/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/TextSwitcher/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/TextSwitcher/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/TextSwitcher/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/TextSwitcher/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/TextSwitcher/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw720dp-land">values-sw720dp-land/</a></div><ul><li><a href="/samples/TextSwitcher/res/values-sw720dp-land/dimens.html" title="dimens.xml">dimens.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-v11">values-v11/</a></div><ul><li><a href="/samples/TextSwitcher/res/values-v11/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-v14">values-v14/</a></div><ul><li><a href="/samples/TextSwitcher/res/values-v14/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/TextSwitcher/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/TextSwitcher/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/TextSwitcher/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/TextSwitcher/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/TextSwitcher/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/TextSwitcher/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.textswitcher">com.example.android.textswitcher/</a></div><ul><li><a href="/samples/TextSwitcher/src/com.example.android.textswitcher/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/BorderlessButtons/index.html" title="BorderlessButtons">BorderlessButtons</a></div><ul><li><a href="/samples/BorderlessButtons/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BorderlessButtons/res/drawable-hdpi/ic_action_delete.html" title="ic_action_delete.png">ic_action_delete.png</a></li><li><a href="/samples/BorderlessButtons/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BorderlessButtons/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BorderlessButtons/res/drawable-mdpi/ic_action_delete.html" title="ic_action_delete.png">ic_action_delete.png</a></li><li><a href="/samples/BorderlessButtons/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BorderlessButtons/res/drawable-xhdpi/ic_action_delete.html" title="ic_action_delete.png">ic_action_delete.png</a></li><li><a href="/samples/BorderlessButtons/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BorderlessButtons/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BorderlessButtons/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/BorderlessButtons/res/layout/list_item.html" title="list_item.xml">list_item.xml</a></li><li><a href="/samples/BorderlessButtons/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/BorderlessButtons/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BorderlessButtons/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BorderlessButtons/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BorderlessButtons/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BorderlessButtons/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BorderlessButtons/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BorderlessButtons/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.borderlessbuttons">com.example.android.borderlessbuttons/</a></div><ul><li><a href="/samples/BorderlessButtons/src/com.example.android.borderlessbuttons/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/BorderlessButtons/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/BorderlessButtons/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/BorderlessButtons/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/BorderlessButtons/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/BorderlessButtons/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/BorderlessButtons/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicNotifications/index.html" title="BasicNotifications">BasicNotifications</a></div><ul><li><a href="/samples/BasicNotifications/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicNotifications/res/drawable-hdpi/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li><li><a href="/samples/BasicNotifications/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi-v11">drawable-hdpi-v11/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-hdpi-v11/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi-v9">drawable-hdpi-v9/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-hdpi-v9/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-ldpi-v11">drawable-ldpi-v11/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-ldpi-v11/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-ldpi-v9">drawable-ldpi-v9/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-ldpi-v9/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicNotifications/res/drawable-mdpi/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi-v11">drawable-mdpi-v11/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-mdpi-v11/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi-v9">drawable-mdpi-v9/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-mdpi-v9/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicNotifications/res/drawable-xhdpi/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi-v11">drawable-xhdpi-v11/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-xhdpi-v11/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi-v9">drawable-xhdpi-v9/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-xhdpi-v9/ic_stat_notification.html" title="ic_stat_notification.png">ic_stat_notification.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicNotifications/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicNotifications/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/BasicNotifications/res/layout/sample_layout.html" title="sample_layout.xml">sample_layout.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicNotifications/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicNotifications/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicNotifications/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicNotifications/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicNotifications/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicNotifications/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basicnotifications">com.example.android.basicnotifications/</a></div><ul><li><a href="/samples/BasicNotifications/src/com.example.android.basicnotifications/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/AdvancedImmersiveMode/index.html" title="AdvancedImmersiveMode">AdvancedImmersiveMode</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/AdvancedImmersiveMode/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/AdvancedImmersiveMode/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/AdvancedImmersiveMode/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/AdvancedImmersiveMode/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/AdvancedImmersiveMode/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.advancedimmersivemode">com.example.android.advancedimmersivemode/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.html" title="AdvancedImmersiveModeFragment.java">AdvancedImmersiveModeFragment.java</a></li><li><a href="/samples/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common">com.example.android.common/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="activities">activities/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/src/com.example.android.common/activities/SampleActivityBase.html" title="SampleActivityBase.java">SampleActivityBase.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="logger">logger/</a></div><ul><li><a href="/samples/AdvancedImmersiveMode/src/com.example.android.common/logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/AdvancedImmersiveMode/src/com.example.android.common/logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/AdvancedImmersiveMode/src/com.example.android.common/logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/AdvancedImmersiveMode/src/com.example.android.common/logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/AdvancedImmersiveMode/src/com.example.android.common/logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/AdvancedImmersiveMode/src/com.example.android.common/logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/BasicImmersiveMode/index.html" title="BasicImmersiveMode">BasicImmersiveMode</a></div><ul><li><a href="/samples/BasicImmersiveMode/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/BasicImmersiveMode/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/BasicImmersiveMode/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/BasicImmersiveMode/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/BasicImmersiveMode/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/BasicImmersiveMode/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/BasicImmersiveMode/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/BasicImmersiveMode/res/menu/main.html" title="main.xml">main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/BasicImmersiveMode/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/BasicImmersiveMode/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicImmersiveMode/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/BasicImmersiveMode/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/BasicImmersiveMode/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/BasicImmersiveMode/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.basicimmersivemode">com.example.android.basicimmersivemode/</a></div><ul><li><a href="/samples/BasicImmersiveMode/src/com.example.android.basicimmersivemode/BasicImmersiveModeFragment.html" title="BasicImmersiveModeFragment.java">BasicImmersiveModeFragment.java</a></li><li><a href="/samples/BasicImmersiveMode/src/com.example.android.basicimmersivemode/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common">com.example.android.common/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="activities">activities/</a></div><ul><li><a href="/samples/BasicImmersiveMode/src/com.example.android.common/activities/SampleActivityBase.html" title="SampleActivityBase.java">SampleActivityBase.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="logger">logger/</a></div><ul><li><a href="/samples/BasicImmersiveMode/src/com.example.android.common/logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/BasicImmersiveMode/src/com.example.android.common/logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/BasicImmersiveMode/src/com.example.android.common/logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/BasicImmersiveMode/src/com.example.android.common/logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/BasicImmersiveMode/src/com.example.android.common/logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/BasicImmersiveMode/src/com.example.android.common/logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/CustomChoiceList/index.html" title="CustomChoiceList">CustomChoiceList</a></div><ul><li><a href="/samples/CustomChoiceList/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="color">color/</a></div><ul><li><a href="/samples/CustomChoiceList/res/color/hideable_text_color.html" title="hideable_text_color.xml">hideable_text_color.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable">drawable/</a></div><ul><li><a href="/samples/CustomChoiceList/res/drawable/ic_hideable_item.html" title="ic_hideable_item.xml">ic_hideable_item.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/CustomChoiceList/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/CustomChoiceList/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/CustomChoiceList/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/CustomChoiceList/res/drawable-xhdpi/ic_hideable_item_checked.html" title="ic_hideable_item_checked.png">ic_hideable_item_checked.png</a></li><li><a href="/samples/CustomChoiceList/res/drawable-xhdpi/ic_hideable_item_unchecked.html" title="ic_hideable_item_unchecked.png">ic_hideable_item_unchecked.png</a></li><li><a href="/samples/CustomChoiceList/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/CustomChoiceList/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/CustomChoiceList/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/CustomChoiceList/res/layout/list_item.html" title="list_item.xml">list_item.xml</a></li><li><a href="/samples/CustomChoiceList/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/CustomChoiceList/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/CustomChoiceList/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/CustomChoiceList/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/CustomChoiceList/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/CustomChoiceList/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/CustomChoiceList/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/CustomChoiceList/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/CustomChoiceList/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/CustomChoiceList/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/CustomChoiceList/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/CustomChoiceList/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.customchoicelist">com.example.android.customchoicelist/</a></div><ul><li><a href="/samples/CustomChoiceList/src/com.example.android.customchoicelist/CheckableLinearLayout.html" title="CheckableLinearLayout.java">CheckableLinearLayout.java</a></li><li><a href="/samples/CustomChoiceList/src/com.example.android.customchoicelist/Cheeses.html" title="Cheeses.java">Cheeses.java</a></li><li><a href="/samples/CustomChoiceList/src/com.example.android.customchoicelist/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/DoneBar/index.html" title="DoneBar">DoneBar</a></div><ul><li><a href="/samples/DoneBar/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/DoneBar/res/drawable-hdpi/ic_action_cancel.html" title="ic_action_cancel.png">ic_action_cancel.png</a></li><li><a href="/samples/DoneBar/res/drawable-hdpi/ic_action_done.html" title="ic_action_done.png">ic_action_done.png</a></li><li><a href="/samples/DoneBar/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/DoneBar/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/DoneBar/res/drawable-mdpi/ic_action_cancel.html" title="ic_action_cancel.png">ic_action_cancel.png</a></li><li><a href="/samples/DoneBar/res/drawable-mdpi/ic_action_done.html" title="ic_action_done.png">ic_action_done.png</a></li><li><a href="/samples/DoneBar/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/DoneBar/res/drawable-xhdpi/ic_action_cancel.html" title="ic_action_cancel.png">ic_action_cancel.png</a></li><li><a href="/samples/DoneBar/res/drawable-xhdpi/ic_action_done.html" title="ic_action_done.png">ic_action_done.png</a></li><li><a href="/samples/DoneBar/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/DoneBar/res/drawable-xhdpi/sample_dashboard_item_background.9.html" title="sample_dashboard_item_background.9.png">sample_dashboard_item_background.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/DoneBar/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/DoneBar/res/layout/actionbar_custom_view_done.html" title="actionbar_custom_view_done.xml">actionbar_custom_view_done.xml</a></li><li><a href="/samples/DoneBar/res/layout/actionbar_custom_view_done_cancel.html" title="actionbar_custom_view_done_cancel.xml">actionbar_custom_view_done_cancel.xml</a></li><li><a href="/samples/DoneBar/res/layout/activity_done_bar.html" title="activity_done_bar.xml">activity_done_bar.xml</a></li><li><a href="/samples/DoneBar/res/layout/activity_done_button.html" title="activity_done_button.xml">activity_done_button.xml</a></li><li><a href="/samples/DoneBar/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/DoneBar/res/layout/activity_sample_dashboard.html" title="activity_sample_dashboard.xml">activity_sample_dashboard.xml</a></li><li><a href="/samples/DoneBar/res/layout/include_cancel_button.html" title="include_cancel_button.xml">include_cancel_button.xml</a></li><li><a href="/samples/DoneBar/res/layout/include_done_button.html" title="include_done_button.xml">include_done_button.xml</a></li><li><a href="/samples/DoneBar/res/layout/sample_dashboard_item.html" title="sample_dashboard_item.xml">sample_dashboard_item.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/DoneBar/res/menu/cancel.html" title="cancel.xml">cancel.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/DoneBar/res/values/activitycards-strings.html" title="activitycards-strings.xml">activitycards-strings.xml</a></li><li><a href="/samples/DoneBar/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/DoneBar/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/DoneBar/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/DoneBar/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/DoneBar/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/DoneBar/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.donebar">com.example.android.donebar/</a></div><ul><li><a href="/samples/DoneBar/src/com.example.android.donebar/DoneBarActivity.html" title="DoneBarActivity.java">DoneBarActivity.java</a></li><li><a href="/samples/DoneBar/src/com.example.android.donebar/DoneButtonActivity.html" title="DoneButtonActivity.java">DoneButtonActivity.java</a></li><li><a href="/samples/DoneBar/src/com.example.android.donebar/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/ListPopupMenu/index.html" title="ListPopupMenu">ListPopupMenu</a></div><ul><li><a href="/samples/ListPopupMenu/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/ListPopupMenu/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/ListPopupMenu/res/drawable-hdpi/ic_overflow.html" title="ic_overflow.png">ic_overflow.png</a></li><li><a href="/samples/ListPopupMenu/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/ListPopupMenu/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/ListPopupMenu/res/drawable-mdpi/ic_overflow.html" title="ic_overflow.png">ic_overflow.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/ListPopupMenu/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/ListPopupMenu/res/drawable-xhdpi/ic_overflow.html" title="ic_overflow.png">ic_overflow.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/ListPopupMenu/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/ListPopupMenu/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/ListPopupMenu/res/layout/list_item.html" title="list_item.xml">list_item.xml</a></li><li><a href="/samples/ListPopupMenu/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="menu">menu/</a></div><ul><li><a href="/samples/ListPopupMenu/res/menu/popup.html" title="popup.xml">popup.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/ListPopupMenu/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/ListPopupMenu/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/ListPopupMenu/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/ListPopupMenu/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/ListPopupMenu/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/ListPopupMenu/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.actionbarcompat.listpopupmenu">com.example.android.actionbarcompat.listpopupmenu/</a></div><ul><li><a href="/samples/ListPopupMenu/src/com.example.android.actionbarcompat.listpopupmenu/Cheeses.html" title="Cheeses.java">Cheeses.java</a></li><li><a href="/samples/ListPopupMenu/src/com.example.android.actionbarcompat.listpopupmenu/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li><li><a href="/samples/ListPopupMenu/src/com.example.android.actionbarcompat.listpopupmenu/PopupListFragment.html" title="PopupListFragment.java">PopupListFragment.java</a></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/CustomNotifications/index.html" title="CustomNotifications">CustomNotifications</a></div><ul><li><a href="/samples/CustomNotifications/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/CustomNotifications/res/drawable-hdpi/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li><li><a href="/samples/CustomNotifications/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi-v11">drawable-hdpi-v11/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-hdpi-v11/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi-v9">drawable-hdpi-v9/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-hdpi-v9/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-ldpi-v11">drawable-ldpi-v11/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-ldpi-v11/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-ldpi-v9">drawable-ldpi-v9/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-ldpi-v9/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/CustomNotifications/res/drawable-mdpi/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi-v11">drawable-mdpi-v11/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-mdpi-v11/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi-v9">drawable-mdpi-v9/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-mdpi-v9/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/CustomNotifications/res/drawable-xhdpi/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li><li><a href="/samples/CustomNotifications/res/drawable-xhdpi/robot.html" title="robot.png">robot.png</a></li><li><a href="/samples/CustomNotifications/res/drawable-xhdpi/robot_expanded.html" title="robot_expanded.png">robot_expanded.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi-v11">drawable-xhdpi-v11/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-xhdpi-v11/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi-v9">drawable-xhdpi-v9/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-xhdpi-v9/ic_stat_custom.html" title="ic_stat_custom.png">ic_stat_custom.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/CustomNotifications/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/CustomNotifications/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/CustomNotifications/res/layout/notification.html" title="notification.xml">notification.xml</a></li><li><a href="/samples/CustomNotifications/res/layout/notification_expanded.html" title="notification_expanded.xml">notification_expanded.xml</a></li><li><a href="/samples/CustomNotifications/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/CustomNotifications/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/CustomNotifications/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/CustomNotifications/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/CustomNotifications/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/CustomNotifications/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/CustomNotifications/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw720dp-land">values-sw720dp-land/</a></div><ul><li><a href="/samples/CustomNotifications/res/values-sw720dp-land/dimens.html" title="dimens.xml">dimens.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-v9">values-v9/</a></div><ul><li><a href="/samples/CustomNotifications/res/values-v9/styles.html" title="styles.xml">styles.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.customnotifications">com.example.android.customnotifications/</a></div><ul><li><a href="/samples/CustomNotifications/src/com.example.android.customnotifications/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li></ul></li><li class="nav-section"><div class="nav-section-header"><a href="/samples/topic.html#t=Views" title="Views">Views</a></div><ul><li class="nav-section"><div class="nav-section-header"><a href="/samples/TextLinkify/index.html" title="TextLinkify">TextLinkify</a></div><ul><li><a href="/samples/TextLinkify/AndroidManifest.html" title="AndroidManifest.xml">AndroidManifest.xml</a></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="res">res/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-hdpi">drawable-hdpi/</a></div><ul><li><a href="/samples/TextLinkify/res/drawable-hdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li><li><a href="/samples/TextLinkify/res/drawable-hdpi/tile.9.html" title="tile.9.png">tile.9.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-mdpi">drawable-mdpi/</a></div><ul><li><a href="/samples/TextLinkify/res/drawable-mdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xhdpi">drawable-xhdpi/</a></div><ul><li><a href="/samples/TextLinkify/res/drawable-xhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="drawable-xxhdpi">drawable-xxhdpi/</a></div><ul><li><a href="/samples/TextLinkify/res/drawable-xxhdpi/ic_launcher.html" title="ic_launcher.png">ic_launcher.png</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="layout">layout/</a></div><ul><li><a href="/samples/TextLinkify/res/layout/activity_main.html" title="activity_main.xml">activity_main.xml</a></li><li><a href="/samples/TextLinkify/res/layout/sample_main.html" title="sample_main.xml">sample_main.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values">values/</a></div><ul><li><a href="/samples/TextLinkify/res/values/base-strings.html" title="base-strings.xml">base-strings.xml</a></li><li><a href="/samples/TextLinkify/res/values/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/TextLinkify/res/values/strings.html" title="strings.xml">strings.xml</a></li><li><a href="/samples/TextLinkify/res/values/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw600dp">values-sw600dp/</a></div><ul><li><a href="/samples/TextLinkify/res/values-sw600dp/dimens.html" title="dimens.xml">dimens.xml</a></li><li><a href="/samples/TextLinkify/res/values-sw600dp/styles.html" title="styles.xml">styles.xml</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="values-sw720dp-land">values-sw720dp-land/</a></div><ul><li><a href="/samples/TextLinkify/res/values-sw720dp-land/dimens.html" title="dimens.xml">dimens.xml</a></li></ul></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="src">src/</a></div><ul><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.common.logger">com.example.android.common.logger/</a></div><ul><li><a href="/samples/TextLinkify/src/com.example.android.common.logger/Log.html" title="Log.java">Log.java</a></li><li><a href="/samples/TextLinkify/src/com.example.android.common.logger/LogFragment.html" title="LogFragment.java">LogFragment.java</a></li><li><a href="/samples/TextLinkify/src/com.example.android.common.logger/LogNode.html" title="LogNode.java">LogNode.java</a></li><li><a href="/samples/TextLinkify/src/com.example.android.common.logger/LogView.html" title="LogView.java">LogView.java</a></li><li><a href="/samples/TextLinkify/src/com.example.android.common.logger/LogWrapper.html" title="LogWrapper.java">LogWrapper.java</a></li><li><a href="/samples/TextLinkify/src/com.example.android.common.logger/MessageOnlyLogFilter.html" title="MessageOnlyLogFilter.java">MessageOnlyLogFilter.java</a></li></ul></li><li class="nav-section sticky"><div class="nav-section-header empty"><a href="#" onclick="return false;" title="com.example.android.textlinkify">com.example.android.textlinkify/</a></div><ul><li><a href="/samples/TextLinkify/src/com.example.android.textlinkify/MainActivity.html" title="MainActivity.java">MainActivity.java</a></li></ul></li></ul></li></ul></li></ul></li></ul>
diff --git a/docs/html/training/printing/custom-docs.jd b/docs/html/training/printing/custom-docs.jd
new file mode 100644
index 0000000..dd0eceb
--- /dev/null
+++ b/docs/html/training/printing/custom-docs.jd
@@ -0,0 +1,362 @@
+page.title=Printing Custom Documents
+parent.title=Printing Content
+parent.link=index.html
+
+trainingnavtop=true
+next.title=
+next.link=
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#print-manager">Connect to the Print Manager</a></li>
+ <li><a href="#print-adapter">Create a Print Adapter</a>
+ <ol>
+ <li><a href="#doc-info">Compute print document info</a></li>
+ <li><a href="#write-file">Write a print document file</a></li>
+ </ol>
+ </li>
+ <li><a href="#draw-content">Drawing PDF Page Content</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>For some applications, such as drawing apps, page layout apps and other apps that focus on
+ graphic output, creating beautiful printed pages is a key feature. In this case, it is not enough
+ to print an image or an HTML document. The print output for these types of applications requires
+ precise control of everything that goes into a page, including fonts, text flow, page breaks,
+ headers, footers, and graphic elements.</p>
+
+<p>Creating print output that is completely customized for your application requires more
+ programming investment than the previously discussed approaches. You must build components that
+ communicate with the print framework, adjust to printer settings, draw page elements and
+ manage printing on multiple pages.</p>
+
+<p>This lesson shows you how you connect with the print manager, create a print adapter and
+ build content for printing.</p>
+
+
+<h2 id="print-manager">Connect to the Print Manager</h2>
+
+<p>When your application manages the printing process directly, the first step after receiving a
+ print request from your user is to connect to the Android print framework and obtain an instance
+ of the {@link android.print.PrintManager} class. This class allows you to initialize a print job
+ and begin the printing lifecycle. The following code example shows how to get the print manager
+ and start the printing process.</p>
+
+<pre>
+private void doPrint() {
+ // Get a PrintManager instance
+ PrintManager printManager = (PrintManager) getActivity()
+ .getSystemService(Context.PRINT_SERVICE);
+
+ // Set job name, which will be displayed in the print queue
+ String jobName = getActivity().getString(R.string.app_name) + " Document";
+
+ // Start a print job, passing in a PrintDocumentAdapter implementation
+ // to handle the generation of a print document
+ printManager.print(jobName, new MyPrintDocumentAdapter(getActivity()),
+ null); //
+}
+</pre>
+
+<p>The example code above demonstrates how to name a print job and set an instance of the {@link
+ android.print.PrintDocumentAdapter} class which handles the steps of the printing lifecycle. The
+ implementation of the print adapter class is discussed in the next section.</p>
+
+<p class="note">
+ <strong>Note:</strong> The last parameter in the {@link android.print.PrintManager#print print()}
+ method takes a {@link android.print.PrintAttributes} object. You can use this parameter to
+ provide hints to the printing framework and pre-set options based on the previous printing cycle,
+ thereby improving the user experience. You may also use this parameter to set options that are
+ more appropriate to the content being printed, such as setting the orientation to landscape
+ when printing a photo that is in that orientation.
+</p>
+
+
+<h2 id="print-adapter">Create a Print Adapter</h2>
+
+<p>A print adapter interacts with the Android print framework and handles the steps of the
+ printing process. This process requires users to select printers and print options before creating
+ a document for printing. These selections can influence the final output as the user chooses
+ printers with different output capabilities, different page sizes, or different page orientations.
+ As these selections are made, the print framework asks your adapter to lay out and generate a
+ print document, in preparation for final output. Once a user taps the print button, the framework
+ takes the final print document and passes it to a print provider for output. During the printing
+ process, users can choose to cancel the print action, so your print adapter must also listen for
+ and react to a cancellation requests.</p>
+
+<p>The {@link android.print.PrintDocumentAdapter} abstract class is designed to handle the
+ printing lifecycle, which has four main callback methods. You must implement these methods
+ in your print adapter in order to interact properly with the print framework:</p>
+
+<ul>
+ <li>{@link android.print.PrintDocumentAdapter#onStart onStart()} - Called once at the
+ beginning of the print process. If your application has any one-time preparation tasks to
+ perform, such as getting a snapshot of the data to be printed, execute them here. Implementing
+ this method in your adapter is not required.</li>
+ <li>{@link android.print.PrintDocumentAdapter#onLayout onLayout()} - Called each time a
+ user changes a print setting which impacts the output, such as a different page size,
+ or page orientation, giving your application an opportunity to compute the layout of the
+ pages to be printed. At the minimum, this method must return how many pages are expected
+ in the printed document.</li>
+ <li>{@link android.print.PrintDocumentAdapter#onWrite onWrite()} - Called to render printed
+ pages into a file to be printed. This method may be called one or more times after each
+ {@link android.print.PrintDocumentAdapter#onLayout onLayout()} call.</li>
+ <li>{@link android.print.PrintDocumentAdapter#onFinish onFinish()} - Called once at the end
+ of the print process. If your application has any one-time tear-down tasks to perform,
+ execute them here. Implementing this method in your adapter is not required.</li>
+</ul>
+
+<p>The following sections describe how to implement the layout and write methods, which are
+ critical to the functioning of a print adapter.</p>
+
+<p class="note">
+ <strong>Note:</strong> These adapter methods are called on the main thread of your application. If
+ you expect the execution of these methods in your implementation to take a significant amount of
+ time, implement them to execute within a separate thread. For example, you can encapsulate the
+ layout or print document writing work in separate {@link android.os.AsyncTask} objects.
+</p>
+
+
+<h3 id="doc-info">Compute print document info</h3>
+
+<p>Within an implementation of the {@link android.print.PrintDocumentAdapter} class, your
+ application must be able to specify the type of document it is creating and calculate the total
+ number of pages for print job, given information about the printed page size.
+ The implementation of the {@link android.print.PrintDocumentAdapter#onLayout onLayout()} method in
+ the adapter makes these calculations and provides information about the expected output of the
+ print job in a {@link android.print.PrintDocumentInfo} class, including the number of pages and
+ content type. The following code example shows a basic implementation of the {@link
+ android.print.PrintDocumentAdapter#onLayout onLayout()} method for a {@link
+ android.print.PrintDocumentAdapter}:
+
+<pre>
+@Override
+public void onLayout(PrintAttributes oldAttributes,
+ PrintAttributes newAttributes,
+ CancellationSignal cancellationSignal,
+ LayoutResultCallback callback,
+ Bundle metadata) {
+ // Create a new PdfDocument with the requested page attributes
+ mPdfDocument = new PrintedPdfDocument(getActivity(), newAttributes);
+
+ // Respond to cancellation request
+ if (cancellationSignal.isCancelled() ) {
+ callback.onLayoutCancelled();
+ return;
+ }
+
+ // Compute the expected number of printed pages
+ int pages = computePageCount(newAttributes);
+
+ if (pages > 0) {
+ // Return print information to print framework
+ PrintDocumentInfo info = new PrintDocumentInfo
+ .Builder("print_output.pdf")
+ .setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
+ .setPageCount(pages);
+ .build();
+ // Content layout reflow is complete
+ callback.onLayoutFinished(info, true);
+ } else {
+ // Otherwise report an error to the print framework
+ callback.onLayoutFailed("Page count calculation failed.");
+ }
+}
+</pre>
+
+<p>The execution of {@link android.print.PrintDocumentAdapter#onLayout onLayout()} method can
+ have three outcomes: completion, cancellation, or failure in the case where calculation of the
+ layout cannot be completed. You must indicate one of these results by calling the appropriate
+ method of the {@link android.print.PrintDocumentAdapter.LayoutResultCallback} object.</p>
+
+<p class="note">
+ <strong>Note:</strong> The boolean parameter of the
+ {@link android.print.PrintDocumentAdapter.LayoutResultCallback#onLayoutFinished
+ onLayoutFinished()} method indicates whether or not the layout content has actually changed
+ since the last request. Setting this parameter properly allows the print framework to avoid
+ unnecessarily calling the {@link android.print.PrintDocumentAdapter#onWrite onWrite()} method,
+ essentially caching the previously written print document and improving performance.
+</p>
+
+<p>The main work of {@link android.print.PrintDocumentAdapter#onLayout onLayout()} is
+ calculating the number of pages that are expected as output given the attributes of the printer.
+ How you calculate this number is highly dependent on how your application lays out pages for
+ printing. The following code example shows an implementation where the number of pages is
+ determined by the print orientation:</p>
+
+<pre>
+private int computePageCount(PrintAttributes printAttributes) {
+ int itemsPerPage = 4; // default item count for portrait mode
+
+ MediaSize pageSize = printAttributes.getMediaSize();
+ if (!pageSize.isPortrait()) {
+ // Six items per page in landscape orientation
+ itemsPerPage = 6;
+ }
+
+ // Determine number of print items
+ int printItemCount = getPrintItemCount();
+
+ return (int) Math.ceil(printItemCount / itemsPerPage);
+}
+</pre>
+
+
+<h3 id="write-file">Write a print document file</h3>
+
+<p>When it is time to write print output to a file, the Android print framework calls the {@link
+ android.print.PrintDocumentAdapter#onWrite onWrite()} method of your application's {@link
+ android.print.PrintDocumentAdapter} class. The method's parameters specify which pages should be
+ written and the output file to be used. Your implementation of this method must then render each
+ requested page of content to a multi-page PDF document file. When this process is complete, you
+ call the {@link android.print.PrintDocumentAdapter.WriteResultCallback#onWriteFinished
+ onWriteFinished()} method of the callback object.</p>
+
+<p class="note">
+ <strong>Note:</strong> The Android print framework may call the {@link
+ android.print.PrintDocumentAdapter#onWrite onWrite()} method one or more times for every
+ call to {@link android.print.PrintDocumentAdapter#onLayout onLayout()}. For this reason, it is
+ important to set the boolean parameter of
+ {@link android.print.PrintDocumentAdapter.LayoutResultCallback#onLayoutFinished
+ onLayoutFinished()} method to {@code false} when the print content layout has not changed,
+ to avoid unnecessary re-writes of the print document.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> The boolean parameter of the
+ {@link android.print.PrintDocumentAdapter.LayoutResultCallback#onLayoutFinished
+ onLayoutFinished()} method indicates whether or not the layout content has actually changed
+ since the last request. Setting this parameter properly allows the print framework to avoid
+ unnecessarily calling the {@link android.print.PrintDocumentAdapter#onLayout onLayout()} method,
+ essentially caching the previously written print document and improving performance.
+</p>
+
+
+<p>The following sample demonstrates the basic mechanics of this process using the {@link
+ android.print.pdf.PrintedPdfDocument} class to create a PDF file:</p>
+
+<pre>
+@Override
+public void onWrite(final PageRange[] pageRanges,
+ final ParcelFileDescriptor destination,
+ final CancellationSignal cancellationSignal,
+ final WriteResultCallback callback) {
+ // Iterate over each page of the document,
+ // check if it's in the output range.
+ for (int i = 0; i < totalPages; i++) {
+ // Check to see if this page is in the output range.
+ if (containsPage(pageRanges, i)) {
+ // If so, add it to writtenPagesArray. writtenPagesArray.size()
+ // is used to compute the next output page index.
+ writtenPagesArray.append(writtenPagesArray.size(), i);
+ PdfDocument.Page page = mPdfDocument.startPage(i);
+
+ // check for cancellation
+ if (cancellationSignal.isCancelled()) {
+ callback.onWriteCancelled();
+ mPdfDocument.close();
+ mPdfDocument = null;
+ return;
+ }
+
+ // Draw page content for printing
+ drawPage(page);
+
+ // Rendering is complete, so page can be finalized.
+ mPdfDocument.finishPage(page);
+ }
+ }
+
+ // Write PDF document to file
+ try {
+ mPdfDocument.writeTo(new FileOutputStream(
+ destination.getFileDescriptor()));
+ } catch (IOException e) {
+ callback.onWriteFailed(e.toString());
+ return;
+ } finally {
+ mPdfDocument.close();
+ mPdfDocument = null;
+ }
+ PageRange[] writtenPages = computeWrittenPages();
+ // Signal the print framework the document is complete
+ callback.onWriteFinished(writtenPages);
+
+ ...
+}
+</pre>
+
+<p>This sample delegates rendering of PDF page content to <code>drawPage()</code>
+ method, which is discussed in the next section.
+</p>
+
+<p>As with layout, execution of {@link android.print.PrintDocumentAdapter#onWrite onWrite()}
+ method can have three outcomes: completion, cancellation, or failure in the case where the
+ the content cannot be written. You must indicate one of these results by calling the
+ appropriate method of the {@link android.print.PrintDocumentAdapter.WriteResultCallback} object.
+ </p>
+
+
+<p class="note">
+ <strong>Note:</strong> Rendering a document for printing can be a resource-intensive operation. In
+ order to avoid blocking the main user interface thread of your application, you should consider
+ performing the page rendering and writing operations on a separate thread, for example
+ in an {@link android.os.AsyncTask}.
+ For more information about working with execution threads like asynchronous tasks,
+ see <a href="{@docRoot}guide/components/processes-and-threads.html">Processes
+ and Threads</a>.
+</p>
+
+
+<h2 id="draw-content">Drawing PDF Page Content</h2>
+
+<p>When your application prints, your application must generate a PDF document and pass it to
+ the Android print framework for printing. You can use any PDF generation library for this
+ purpose. This lesson shows how to use the {@link android.print.pdf.PrintedPdfDocument} class
+ to generate PDF pages from your content.</p>
+
+<p>The {@link android.print.pdf.PrintedPdfDocument} class uses a {@link android.graphics.Canvas}
+ object to draw elements on an PDF page, similar to drawing on an activity layout. You can draw
+ elements on the printed page using the {@link android.graphics.Canvas} draw methods. The following
+ example code demonstrates how to draw some simple elements on a PDF document page using these
+ methods:</p>
+
+<pre>
+private void drawPage(PdfDocument.Page page) {
+ Canvas canvas = page.getCanvas();
+
+ // units are in points (1/72 of an inch)
+ int titleBaseLine = 72;
+ int leftMargin = 54;
+
+ Paint paint = new Paint();
+ paint.setColor(Color.BLACK);
+ paint.setTextSize(36);
+ canvas.drawText("Test Title", leftMargin, titleBaseLine, paint);
+
+ paint.setTextSize(11);
+ canvas.drawText("Test paragraph", leftMargin, titleBaseLine + 25, paint);
+
+ paint.setColor(Color.BLUE);
+ canvas.drawRect(100, 100, 172, 172, paint);
+}
+</pre>
+
+<p>When using {@link android.graphics.Canvas} to draw on a PDF page, elements are specified in
+ points, which is 1/72 of an inch. Make sure you use this unit of measure for specifying the size
+ of elements on the page. For positioning of drawn elements, the coordinate system starts at 0,0
+ for the top left corner of the page.</p>
+
+<p>
+ <strong>Tip:</strong> While the {@link android.graphics.Canvas} object allows you to place print
+ elements on the edge of a PDF document, many printers are not able to print to the edge of a
+ physical piece of paper. Make sure that you account for the unprintable edges of the page when
+ you build a print document with this class.
+</p>
diff --git a/docs/html/training/printing/html-docs.jd b/docs/html/training/printing/html-docs.jd
new file mode 100644
index 0000000..2c7f8e3
--- /dev/null
+++ b/docs/html/training/printing/html-docs.jd
@@ -0,0 +1,175 @@
+page.title=Printing HTML Documents
+parent.title=Printing Content
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Printing Custom Documents
+next.link=custom-docs.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#load-html">Load an HTML Document</a></li>
+ <li><a href="#print-job">Create a Print Job</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Printing out content beyond a simple photo on Android requires composing text and graphics in a
+ print document. The Android framework provides a way to use HTML to compose a document and
+ print it with a minimum of code.</p>
+
+<p>In Android 4.4 (API level 19), the {@link android.webkit.WebView} class has been updated to
+ enable printing HTML content. The class allows you to load a local HTML resource or download
+ a page from the web, create a print job and hand it off to Android's print services.</p>
+
+<p>This lesson shows you how to quickly build an HTML document containing text and graphics and
+use {@link android.webkit.WebView} to print it.</p>
+
+
+<h2 id="load-html">Load an HTML Document</h2>
+
+<p>Printing an HTML document with {@link android.webkit.WebView} involves loading an HTML
+ resource or building an HTML document as a string. This section describes how to build an HTML
+ string and load it into a {@link android.webkit.WebView} for printing.</p>
+
+<p>This view object is typically used as part of an activity layout. However, if your application
+ is not using a {@link android.webkit.WebView}, you can create an instance of the class
+ specifically for printing purposes. The main steps for creating this custom print view are:</p>
+
+<ol>
+ <li>Create a {@link android.webkit.WebViewClient} that starts a print job after
+ the HTML resource is loaded.</li>
+ <li>Load the HTML resource into the {@link android.webkit.WebView} object.</li>
+</ol>
+
+<p>The following code sample demonstrates how to create a simple {@link
+ android.webkit.WebViewClient} and load an HTML document created on the fly:</p>
+
+<pre>
+private WebView mWebView;
+
+private void doWebViewPrint() {
+ // Create a WebView object specifically for printing
+ WebView webView = new WebView(getActivity());
+ webView.setWebViewClient(new WebViewClient() {
+
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ return false;
+ }
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ Log.i(TAG, "page finished loading " + url);
+ createWebPrintJob(view);
+ mWebView = null;
+ }
+ });
+
+ // Generate an HTML document on the fly:
+ String htmlDocument = "<html><body><h1>Test Content</h1><p>Testing, " +
+ "testing, testing...</p></body></html>";
+ webView.loadDataWithBaseURL(null, htmlDocument, "text/HTML", "UTF-8", null);
+
+ // Keep a reference to WebView object until you pass the PrintDocumentAdapter
+ // to the PrintManager
+ mWebView = webView;
+}
+</pre>
+
+<p class="note">
+ <strong>Note:</strong> Make sure your call for generating a print job happens in the {@link
+ android.webkit.WebViewClient#onPageFinished onPageFinished()} method of the {@link
+ android.webkit.WebViewClient} you created in the previous section. If you don't wait until page
+ loading is finished, the print output may be incomplete or blank, or may fail completely.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> The example code above holds an instance of the
+ {@link android.webkit.WebView} object so that is it not garbage collected before the print job
+ is created. Make sure you do the same in your own implementation, otherwise the print process
+ may fail.
+</p>
+
+<p>
+ If you want to include graphics in the page, place the graphic files in the {@code assets/}
+ directory of your project and specify a base URL in the first parameter of the
+ {@link android.webkit.WebView#loadDataWithBaseURL loadDataWithBaseURL()} method, as shown in the
+ following code example:
+</p>
+
+<pre>
+webView.loadDataWithBaseURL("file:///android_asset/images/", htmlBody,
+ "text/HTML", "UTF-8", null);
+</pre>
+
+<p>You can also load a web page for printing by replacing the
+ {@link android.webkit.WebView#loadDataWithBaseURL loadDataWithBaseURL()} method with
+ {@link android.webkit.WebView#loadUrl loadUrl()} as shown below.</p>
+
+<pre>
+// Print an existing web page (remember to request INTERNET permission!):
+webView.loadUrl("http://developer.android.com/about/index.html");
+</pre>
+
+<p>When using {@link android.webkit.WebView} for creating print documents, you should be aware of
+ the following limitations:</p>
+
+<ul>
+ <li>You cannot add headers or footers, including page numbers, to the document.</li>
+ <li>The printing options for the HTML document do not include the ability to print page
+ ranges, for example: Printing page 2 to 4 of a 10 page HTML document is not supported.</li>
+ <li>An instance of {@link android.webkit.WebView} can only process one print job at a time.</li>
+ <li>An HTML document containing CSS print attributes, such as landscape properties, is not
+ supported.</li>
+ <li>You cannot use JavaScript in a HTML document to trigger printing.</li>
+</ul>
+
+<p class="note">
+ <strong>Note:</strong> The content of a {@link android.webkit.WebView} object that is included in
+ a layout can also be printed once it has loaded a document.
+</p>
+
+<p>If you want to create a more customized print output and have complete control of the content
+ draw on the printed page, jump to the next lesson:
+ <a href="custom-docs.html">Printing a Custom Document</a> lesson.</p>
+
+
+<h2 id="print-job">Create a Print Job</h2>
+
+<p>After creating a {@link android.webkit.WebView} and loading your HTML content, your
+ application is almost done with its part of the printing process. The next steps are accessing
+ the {@link android.print.PrintManager}, creating a print adapter, and finally, creating a print
+ job. The following example illustrates how to perform these steps:</p>
+
+<pre>
+private void createWebPrintJob(WebView webView) {
+
+ // Get a PrintManager instance
+ PrintManager printManager = (PrintManager) getActivity()
+ .getSystemService(Context.PRINT_SERVICE);
+
+ // Get a print adapter instance
+ PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();
+
+ // Create a print job with name and adapter instance
+ String jobName = getString(R.string.app_name) + " Document";
+ PrintJob printJob = printManager.print(jobName, printAdapter,
+ new PrintAttributes.Builder().build());
+
+ // Save the job object for later status checking
+ mPrintJobs.add(printJob);
+}
+</pre>
+
+<p>This example saves an instance of the {@link android.print.PrintJob} object for use by the
+ application, which is not required. Your application may use this object to track the progress of
+ the print job as it's being processed. This approach is useful when you want to monitor the status
+ of the print job in you application for completion, failure, or user cancellation. Creating an
+ in-app notification is not required, because the print framework automatically creates a system
+ notification for the print job.</p>
diff --git a/docs/html/training/printing/index.jd b/docs/html/training/printing/index.jd
new file mode 100644
index 0000000..7b67b74
--- /dev/null
+++ b/docs/html/training/printing/index.jd
@@ -0,0 +1,57 @@
+page.title=Printing Content
+page.tags="print","navigation","gesturedetector","scroller"
+
+trainingnavtop=true
+startpage=true
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+
+ <h2>Dependencies and prerequisites</h2>
+
+ <ul>
+ <li>Android 4.4 (API Level 19) or higher</li>
+ </ul>
+
+ </div>
+</div>
+
+<p>
+ Android users frequently view content solely on their devices, but there are times when
+ showing someone a screen is not an adequate way to share information. Being able to print
+ information from your Android application gives users a way to see a larger version of the
+ content from your app or share it with another person who is not using your application.
+ Printing also allows them to create a snapshot of information that does not depend on having a
+ device, sufficient battery power, or a wireless network connection.
+</p>
+
+<p>
+ In Android 4.4 (API level 19) and higher, the framework provides services for printing images and
+ documents directly from Android applications. This training describes how to enable printing in
+ your application, including printing images, HTML pages and creating custom documents for
+ printing.
+</p>
+
+
+<h2>Lessons</h2>
+
+<dl>
+ <dt>
+ <strong><a href="photos.html">Printing a Photo</a></strong>
+ </dt>
+ <dd>This lesson shows you how to print an image.</dd>
+
+ <dt>
+ <strong><a href="html-docs.html">Printing an HTML Document</a></strong>
+ </dt>
+ <dd>This lesson shows you how to print an HTML document.</dd>
+
+ <dt>
+ <strong><a href="custom-docs.html">Printing a Custom Document</a></strong>
+ </dt>
+ <dd>This lesson shows you how you connect to the Android print manager, create a print adapter
+ and build content for printing.</dd>
+</dl>
+
+
diff --git a/docs/html/training/printing/photos.jd b/docs/html/training/printing/photos.jd
new file mode 100644
index 0000000..f0289ef
--- /dev/null
+++ b/docs/html/training/printing/photos.jd
@@ -0,0 +1,84 @@
+page.title=Printing Photos
+parent.title=Printing Content
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Printing HTML Documents
+next.link=html-docs.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#image">Print an Image</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>
+ Taking and sharing photos is one of the most popular uses for mobile devices. If your application
+ takes photos, displays them, or allows users to share images, you should consider enabling printing
+ of those images in your application. The <a href="{@docRoot}tools/support-library/index.html"
+ >Android Support Library</a> provides a convenient function for enabling image printing using a
+ minimal amount of code and simple set of print layout options.
+</p>
+
+<p>This lesson shows you how to print an image using the v4 support library {@link
+ android.support.v4.print.PrintHelper} class.</p>
+
+
+<h2 id="image">Print an Image</h2>
+
+<p>The Android Support Library {@link android.support.v4.print.PrintHelper} class provides
+ a simple way to print of images. The class has a single layout option, {@link
+ android.support.v4.print.PrintHelper#setScaleMode setScaleMode()}, which allows you to print with
+ one of two options:</p>
+
+<ul>
+ <li>{@link android.support.v4.print.PrintHelper#SCALE_MODE_FIT SCALE_MODE_FIT} - This
+ option sizes the image so that the whole image is shown within the printable area of the page.
+ </li>
+ <li>{@link android.support.v4.print.PrintHelper#SCALE_MODE_FILL SCALE_MODE_FILL} - This
+ option scales the image so that it fills the entire printable area of the page. Choosing this
+ setting means that some portion of the top and bottom, or left and right edges of the image is
+ not printed. This option is the default value if you do not set a scale mode.</li>
+</ul>
+
+<p>Both scaling options for {@link android.support.v4.print.PrintHelper#setScaleMode
+ setScaleMode()} keep the existing aspect ratio of the image intact. The following code example
+ shows how to create an instance of the {@link android.support.v4.print.PrintHelper} class, set the
+ scaling option, and start the printing process:</p>
+
+<pre>
+private void doPhotoPrint() {
+ PrintHelper photoPrinter = new PrintHelper(getActivity());
+ photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT);
+ Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
+ R.drawable.droids);
+ photoPrinter.printBitmap("droids.jpg - test print", bitmap);
+}
+</pre>
+
+<p>
+ This method can be called as the action for a menu item. Note that menu items for actions that are
+ not always supported (such as printing) should be placed in the overflow menu. For more
+ information, see the <a href="{@docRoot}design/patterns/actionbar.html">Action Bar</a> design
+ guide.
+</p>
+
+<p>After the {@link android.support.v4.print.PrintHelper#printBitmap printBitmap()} method is
+ called, no further action from your application is required. The Android print user interface
+ appears, allowing the user to select a printer and printing options. The user can then print the
+ image or cancel the action. If the user chooses to print the image, a print job is created and a
+ printing notification appears in the system bar.</p>
+
+<p>If you want to include additional content in your printouts beyond just an image, you must
+ construct a print document. For information on creating documents for printing, see the
+ <a href="html-docs.html">Printing an HTML Document</a> or
+ <a href="custom-docs.html">Printing a Custom Document</a>
+ lessons.</p>
+
diff --git a/docs/html/training/system-ui/dim.jd b/docs/html/training/system-ui/dim.jd
new file mode 100644
index 0000000..7c365d7
--- /dev/null
+++ b/docs/html/training/system-ui/dim.jd
@@ -0,0 +1,89 @@
+page.title=Dimming the System Bars
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<!-- table of contents -->
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#dim">Dim the Status and Navigation Bars</a></li>
+ <li><a href="#reveal">Reveal the Status and Navigation Bars</a></li>
+</ol>
+
+
+<!-- other docs (NOT javadocs) -->
+<h2>You should also read</h2>
+
+<ul>
+ <li>
+ <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> API Guide
+ </li>
+ <li>
+ <a href="{@docRoot}design/index.html">
+ Android Design Guide
+ </a>
+ </li>
+</ul>
+
+
+</div>
+</div>
+
+<p>This lesson describes how to dim the system bars (that is, the status and the navigation
+bars) on Android 4.0 (API level 14) and higher. Android does not provide a built-in way to dim the
+system bars on earlier versions.</p>
+
+<p>When you use this approach, the content doesn't resize, but the icons in the system bars
+visually recede. As soon as the user touches either the status bar or the navigation bar area of
+the screen, both bars become fully visible. The advantage of this
+approach is that the bars are still present but their details are obscured, thus
+creating an immersive experience without sacrificing easy access to the bars.</p>
+
+<h2 id="dim">Dim the Status and Navigation Bars</h2>
+
+<p>You can dim the status and notification bars on Android 4.0 and higher using the
+{@link android.view.View#SYSTEM_UI_FLAG_LOW_PROFILE} flag, as follows:</p>
+
+<pre>
+// This example uses decor view, but you can use any visible view.
+View decorView = getActivity().getWindow().getDecorView();
+int uiOptions = View.SYSTEM_UI_FLAG_LOW_PROFILE;
+decorView.setSystemUiVisibility(uiOptions);
+</pre>
+
+<p>As soon as the user touches the status or navigation bar, the flag is cleared,
+causing the bars to be undimmed. Once the flag has been cleared, your app needs to reset
+it if you want to dim the bars again.</p>
+
+<p>Figure 1 shows a gallery image in which the navigation bar is dimmed (note that the Gallery app
+completely hides the status bar; it doesn't dim it). Notice that the navigation bar (right
+side of the image) has faint white dots on it to represent the navigation controls:</p>
+
+<p class="figure" style="width:340px">
+ <img src="{@docRoot}images/training/low_profile_hide2x.png"
+ alt="system bars" />
+ <p class="img-caption"><strong>Figure 1.</strong> Dimmed system bars.</p>
+
+<p>Figure 2 shows the same gallery image, but with the system bars displayed:</p>
+
+<p class="figure" style="width:340px">
+ <img src="{@docRoot}images/training/low_profile_show2x.png"
+ alt="system bars" />
+ <p class="img-caption"><strong>Figure 2.</strong> Visible system bars.</p>
+
+ <h2 id="reveal">Reveal the Status and Navigation Bars</h2>
+
+<p>If you want to programmatically clear flags set with
+{@link android.view.View#setSystemUiVisibility setSystemUiVisibility()}, you can do so
+as follows:</p>
+
+<pre>
+View decorView = getActivity().getWindow().getDecorView();
+// Calling setSystemUiVisibility() with a value of 0 clears
+// all flags.
+decorView.setSystemUiVisibility(0);
+</pre>
diff --git a/docs/html/training/system-ui/index.jd b/docs/html/training/system-ui/index.jd
new file mode 100644
index 0000000..7135a3d
--- /dev/null
+++ b/docs/html/training/system-ui/index.jd
@@ -0,0 +1,90 @@
+page.title=Managing the System UI
+page.tags=""
+
+trainingnavtop=true
+startpage=true
+
+
+@jd:body
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+
+<!-- Required platform, tools, add-ons, devices, knowledge, etc. -->
+<h2>Dependencies and prerequisites</h2>
+
+<ul>
+ <li>Android 1.6 (API Level 4) or higher</li>
+</ul>
+
+
+
+</div>
+</div>
+
+<a class="notice-designers wide" href="{@docRoot}design/get-started/ui-overview.html#system-bars">
+<div>
+ <h3>Design Guide</h3>
+ <p>System Bars</p>
+</div>
+</a>
+
+<div class="figure" style="width:278px">
+ <img src="{@docRoot}images/training/system-ui.png"
+ alt="system bars" />
+ <p class="img-caption"><strong>Figure 1.</strong> System bars, including the [1] status
+bar, and [2] navigation bar.</p>
+</div>
+
+<p>The <a href="https://developer.android.com/design/get-started/ui-overview.html#system-bars">
+system bars</a> are screen areas dedicated to the display of notifications, communication
+of device status, and device navigation. Typically the system bars (which consist of the status
+and navigation bars, as shown in figure 1) are displayed
+concurrently with your app. Apps that display immersive content, such as movies or images,
+can temporarily dim the system bar icons for a less distracting experience,
+or temporarily hide the bars for a fully immersive experience.</p>
+
+<p>If you're familiar with the <a href="{@docRoot}design/index.html">Android Design
+Guide</a>, you know the importance of designing your apps to conform to standard Android UI
+guidelines and usage patterns. You should carefully consider your users'
+needs and expectations before modifying the system bars, since they give users a
+standard way of navigating a device and viewing its status.</p>
+
+<p>This class describes how to dim or hide system bars across different versions of Android
+to create an immersive user experience, while still preserving easy access to the system
+bars.
+</p>
+<h2>Lessons</h2>
+
+<dl>
+ <dt>
+ <strong><a href="dim.html">Dimming the System Bars</a></strong>
+ </dt>
+ <dd>
+ Learn how to dim the status and navigation bars.
+ </dd>
+ <dt>
+ <strong><a href="status.html">Hiding the Status Bar</a></strong>
+ </dt>
+ <dd>
+ Learn how to hide the status bar on different versions of Android.
+ </dd>
+ <dt>
+ <strong><a href="navigation.html">Hiding the Navigation Bar</a></strong>
+ </dt>
+ <dd>
+ Learn how to hide the navigation bar, in addition to the status bar.
+ </dd>
+
+ <dt>
+ <strong><a href="visibility.html">Responding to UI Visibility Changes</a></strong>
+ </dt>
+ <dd>
+ Learn how to register a listener to get notified of system UI visibility changes
+ so that you can adjust your app's UI accordingly.
+ </dd>
+
+</dl>
\ No newline at end of file
diff --git a/docs/html/training/system-ui/navigation.jd b/docs/html/training/system-ui/navigation.jd
new file mode 100644
index 0000000..3843da3
--- /dev/null
+++ b/docs/html/training/system-ui/navigation.jd
@@ -0,0 +1,101 @@
+page.title=Hiding the Navigation Bar
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<!-- table of contents -->
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#40">Hiding the Navigation Bar on 4.0 and Higher</a></li>
+ <li><a href="#behind">Make Content Appear Behind the Navigation Bar</a></li>
+</ol>
+
+
+<!-- other docs (NOT javadocs) -->
+<h2>You should also read</h2>
+
+<ul>
+ <li>
+ <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> API Guide
+ </li>
+ <li>
+ <a href="{@docRoot}design/index.html">
+ Android Design Guide
+ </a>
+ </li>
+</ul>
+
+
+</div>
+</div>
+
+<p>This lesson describes how to hide the navigation bar, which was introduced in
+Android 4.0 (API level 14).</p>
+
+<p>Even though this lesson focuses on hiding the
+navigation bar, you should design your app to hide the status bar
+at the same time, as described in <a href="status.html">Hiding the Status Bar</a>.
+Hiding the navigation and status bars (while still keeping them readily accessible)
+lets the content use the entire display space, thereby providing a more immersive
+user experience. </p>
+
+<img src="{@docRoot}images/training/navigation-bar.png"
+ alt="system bars">
+<p class="img-caption"><strong>Figure 1.</strong> Navigation bar.</p>
+
+
+
+<h2 id="40">Hide the Navigation Bar on 4.0 and Higher</h2>
+
+<p>You can hide the navigation bar on Android 4.0 and higher using the
+{@link android.view.View#SYSTEM_UI_FLAG_HIDE_NAVIGATION} flag. This snippet hides both
+the navigation bar and the status bar:</p>
+<pre>View decorView = getWindow().getDecorView();
+// Hide both the navigation bar and the status bar.
+int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_FULLSCREEN;
+decorView.setSystemUiVisibility(uiOptions);</pre>
+
+<p>Note the following:</p>
+
+<ul>
+ <li>With this approach, touching anywhere on the screen causes the navigation bar (and
+ status bar) to reappear and remain visible. The user interaction causes the flags to be
+ be cleared.</li>
+<li>Once the flags have been cleared, your app needs to reset them if you
+want to hide the bars again. See <a href="visibility.html">Responding to UI Visibility Changes</a> for a
+discussion of how to listen for UI visibility changes so that your app can
+respond accordingly.</li>
+
+<li>Where you set the UI flags makes a difference. If you hide the system bars in your activity's
+ {@link android.app.Activity#onCreate onCreate()} method and the user presses Home, the system bars will
+ reappear. When the user reopens the activity, {@link android.app.Activity#onCreate onCreate()}
+won't get called, so the system bars will remain visible. If you want system UI changes to
+persist as the user navigates in and out of your activity, set UI flags in
+{@link android.app.Activity#onResume onResume()}
+or {@link android.view.Window.Callback#onWindowFocusChanged onWindowFocusChanged()}.</li>
+
+ <li>The method {@link android.view.View#setSystemUiVisibility setSystemUiVisibility()} only
+ has an effect if the view you call it from is visible.</li>
+ <li>Navigating away from the view causes flags
+ set with {@link android.view.View#setSystemUiVisibility setSystemUiVisibility()}
+ to be cleared.</li>
+</ul>
+
+<h2 id="behind">Make Content Appear Behind the Navigation Bar</h2>
+<p>On Android 4.1 and higher, you can set your application's content to appear behind
+the navigation bar, so that the content doesn't resize as the navigation bar hides and
+shows. To do this, use
+{@link android.view.View#setSystemUiVisibility setSystemuiVisibility(SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)}.
+You may also need to use
+{@link android.view.View#SYSTEM_UI_FLAG_LAYOUT_STABLE} to help your app maintain a
+stable layout.</p>
+
+<p>When you use this approach, it becomes your responsibility to ensure that critical parts
+of your app's UI don't end up getting covered by system bars. For more
+discussion of this topic, see the <a href="status.html#behind">
+Hiding the Status Bar</a> lesson.</p>
diff --git a/docs/html/training/system-ui/status.jd b/docs/html/training/system-ui/status.jd
new file mode 100644
index 0000000..25ee253
--- /dev/null
+++ b/docs/html/training/system-ui/status.jd
@@ -0,0 +1,220 @@
+page.title=Hiding the Status Bar
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<!-- table of contents -->
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#40">Hide the Status Bar on Android 4.0 and Lower</a></li>
+ <li><a href="#41">Hide the Status Bar on Android 4.1 and Higher</a></li>
+
+ <li><a href="#behind">Make Content Appear Behind the Status Bar</a></li>
+ <li><a href="#action-bar">Synchronize the Status Bar with Action Bar Transition</a></li>
+</ol>
+
+<!-- other docs (NOT javadocs) -->
+<h2>You should also read</h2>
+
+<ul>
+ <li>
+ <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> API Guide
+ </li>
+ <li>
+ <a href="{@docRoot}design/index.html">
+ Android Design Guide
+ </a>
+ </li>
+</ul>
+
+
+</div>
+</div>
+
+<p>
+ This lesson describes how to hide the status bar on different versions of
+ Android. Hiding the status bar (and optionally, the navigation bar) lets the
+ content use more of the display space, thereby providing a more immersive user experience.
+
+</p>
+
+<p>
+ Figure 1 shows an app with a visible status bar:
+</p>
+
+<img src="{@docRoot}images/training/status_bar_show.png"
+ alt="system bars">
+<p class="img-caption"><strong>Figure 1.</strong> Visible status bar.</p>
+
+<p>
+ Figure 2 shows an app with a hidden status bar. Note that the action bar is hidden too.
+ You should never show the action bar without the status bar.
+</p>
+
+<img src="{@docRoot}images/training/status_bar_hide.png"
+ alt="system bars">
+<p class="img-caption"><strong>Figure 2.</strong> Hidden status bar.</p>
+
+<h2 id="40">Hide the Status Bar on Android 4.0 and Lower</h2>
+
+<p>You can hide the status bar on Android 4.0 (API level 14) and lower by setting
+{@link android.view.WindowManager} flags. You can do this programmatically or by
+setting an activity theme in your app's manifest file. Setting an activity theme in your app's
+manifest file is the preferred approach if the status bar should always remain
+hidden in your app (though strictly speaking, you could programmatically override the
+theme if you wanted to). For example:</p>
+
+<pre>
+<application
+ ...
+ android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
+ ...
+</application>
+</pre>
+
+<p>The advantages of using an activity theme are as follows:</p>
+
+<ul>
+<li>It's easier to maintain and less error-prone than setting a flag programmatically.</li>
+<li>It results in smoother UI transitions, because the system has the information it needs
+to render your UI before instantiating your app's main activity.</li>
+</ul>
+
+<p>
+Alternatively, you can programmatically set {@link android.view.WindowManager} flags.
+This approach makes it easier to hide and show the status bar as the user interacts with
+your app:</p>
+
+<pre>public class MainActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // If the Android version is lower than Jellybean, use this call to hide
+ // the status bar.
+ if (Build.VERSION.SDK_INT < 16) {
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ }
+ setContentView(R.layout.activity_main);
+ }
+ ...
+}
+</pre>
+
+<p>When you set {@link android.view.WindowManager} flags (whether through an activity theme or
+programmatically), the flags remain in effect unless your app clears them.</p>
+
+<p>You can use
+{@link android.view.WindowManager.LayoutParams#FLAG_LAYOUT_IN_SCREEN}
+to set your activity layout to use the same screen area that's available when you've enabled
+{@link android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN}. This prevents your
+content from resizing when the status bar hides and shows.</p>
+
+
+<h2 id="41">Hide the Status Bar on Android 4.1 and Higher</h2>
+
+<p>You can hide the status bar on Android 4.1 (API level 16) and higher by
+using {@link android.view.View#setSystemUiVisibility setSystemUiVisibility()}.
+{@link android.view.View#setSystemUiVisibility setSystemUiVisibility()} sets UI flags at
+the individual view level; these settings are aggregated to the window level. Using
+{@link android.view.View#setSystemUiVisibility setSystemUiVisibility()} to set UI flags
+gives you more granular control over the system bars than using
+{@link android.view.WindowManager} flags. This snippet hides the status bar:</p>
+
+<pre>View decorView = getWindow().getDecorView();
+// Hide the status bar.
+int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
+decorView.setSystemUiVisibility(uiOptions);
+// Remember that you should never show the action bar if the
+// status bar is hidden, so hide that too if necessary.
+ActionBar actionBar = getActionBar();
+actionBar.hide();
+</pre>
+
+<p>Note the following:</p>
+
+<ul>
+<li>Once UI flags have been cleared (for example, by navigating away from the
+activity), your app needs to reset them if you want to hide the bars again.
+See <a href="visibility.html">Responding to UI Visibility Changes</a> for a
+discussion of how to listen for UI visibility changes so that your app can
+respond accordingly.</li>
+
+<li>Where you set the UI flags makes a difference. If you hide the system bars in your activity's
+ {@link android.app.Activity#onCreate onCreate()} method and the user presses Home, the system bars will
+ reappear. When the user reopens the activity, {@link android.app.Activity#onCreate onCreate()}
+won't get called, so the system bars will remain visible. If you want system UI changes to
+persist as the user navigates in and out of your activity, set UI flags in
+{@link android.app.Activity#onResume onResume()}
+or {@link android.view.Window.Callback#onWindowFocusChanged onWindowFocusChanged()}.</li>
+
+ <li>The method {@link android.view.View#setSystemUiVisibility setSystemUiVisibility()}
+ only has an effect if the view you call it from is visible.</li>
+
+ <li>Navigating away from the view causes flags
+ set with {@link android.view.View#setSystemUiVisibility setSystemUiVisibility()}
+ to be cleared.</li>
+</ul>
+
+
+ </p>
+
+ <h2 id="behind">Make Content Appear Behind the Status Bar</h2>
+<p>On Android 4.1 and higher, you can set your application's content to appear behind
+the status bar, so that the content doesn't resize as the status bar hides and shows.
+To do this, use
+{@link android.view.View#setSystemUiVisibility setSystemuiVisibility(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)}.
+You may also need to use
+{@link android.view.View#SYSTEM_UI_FLAG_LAYOUT_STABLE} to help your app maintain a
+stable layout.</p>
+
+<p>When you use this approach, it becomes your responsibility to ensure that critical parts
+of your app's UI (for example, the built-in controls in a Maps application) don't end up
+getting covered by system bars. This could make your app unusable. In most cases you can
+handle this by adding the {@code android:fitsSystemWindows} attribute to your XML layout file, set to
+{@code true}. This adjusts the padding of the parent {@link android.view.ViewGroup}
+to leave space for the system windows. This is sufficient for most applications.</p>
+
+<p>In some cases, however, you may need to modify the default padding to get the desired
+layout for your app. To directly manipulate how your
+content lays out relative to the system bars (which occupy a space known as the window's
+"content insets"), override {@link android.view.View#fitSystemWindows fitSystemWindows(Rect insets)}.
+The {@link android.view.View#fitSystemWindows fitSystemWindows()} method is called by the
+view hierarchy when the content insets for a window have changed, to allow the window to
+adjust its content accordingly. By overriding this method you can handle the
+insets (and hence your app's layout) however you want. </p>
+
+ <h2 id="action-bar">Synchronize the Status Bar with Action Bar Transition</h2>
+
+ <p>On Android 4.1 and higher, to avoid resizing your layout when the action bar hides and
+ shows, you can enable overlay mode for the <a href="{@docRoot}guide/topics/ui/actionbar.html">action bar</a>.
+ When in overlay mode, your activity layout uses all the
+ space available as if the action bar is not there and the system draws the action bar in
+ front of your layout. This obscures some of the layout at the top, but now when the
+ action bar hides or appears, the system does not need to resize your layout and the
+ transition is seamless.</p>
+
+ <p>To enable overlay mode for the action bar, you need to create a custom theme that
+ extends an existing theme with an action bar and set the
+ {@code android:windowActionBarOverlay} attribute
+ to {@code true}. For more discussion of this topic, see
+ <a href="{@docRoot}training/basics/actionbar/overlaying.html#EnableOverlay">
+ Overlaying the Action Bar</a> in the <a href="{@docRoot}training/basics/actionbar/index.html">
+ Adding the Action Bar</a> class.</p>
+
+
+<p>Then use
+{@link android.view.View#setSystemUiVisibility setSystemuiVisibility(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)},
+as described above,
+to set your activity layout to use the same screen area that's available when you've enabled
+{@link android.view.View#SYSTEM_UI_FLAG_FULLSCREEN}.
+
+When you want to hide the system UI, call
+{@link android.view.View#setSystemUiVisibility setSystemUiVisibility(SYSTEM_UI_FLAG_FULLSCREEN)}.
+This also hides the action bar (because {@code windowActionBarOverlay=”true”)} and does
+so with a coordinated animation when both hiding and showing the two.</p>
diff --git a/docs/html/training/system-ui/visibility.jd b/docs/html/training/system-ui/visibility.jd
new file mode 100644
index 0000000..c26092c
--- /dev/null
+++ b/docs/html/training/system-ui/visibility.jd
@@ -0,0 +1,69 @@
+page.title=Responding to UI Visibility Changes
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<!-- table of contents -->
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#listener">Register a Listener</a></li>
+</ol>
+
+
+<!-- other docs (NOT javadocs) -->
+<h2>You should also read</h2>
+
+<ul>
+ <li>
+ <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> API Guide
+ </li>
+ <li>
+ <a href="{@docRoot}design/index.html">
+ Android Design Guide
+ </a>
+ </li>
+</ul>
+
+
+</div>
+</div>
+
+<p>This lesson describes how to register a listener so that your app can get notified
+of system UI visibility changes. This is useful if you want to
+synchronize other parts of your UI with the hiding/showing of system bars.</p>
+
+<h2 id="listener">Register a Listener</h2>
+
+<p>To get notified of system UI visibility changes, register an
+{@link android.view.View.OnSystemUiVisibilityChangeListener} to your view.
+This is typically the view you are using to control the navigation visibility.</p>
+
+<p>For example, you could add this code to your activity's
+{@link android.app.Activity#onCreate onCreate()} method:</p>
+
+<pre>View decorView = getWindow().getDecorView();
+decorView.setOnSystemUiVisibilityChangeListener
+ (new View.OnSystemUiVisibilityChangeListener() {
+ @Override
+ public void onSystemUiVisibilityChange(int visibility) {
+ // Note that system bars will only be "visible" if none of the
+ // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
+ if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
+ // TODO: The system bars are visible. Make any desired
+ // adjustments to your UI, such as showing the action bar or
+ // other navigational controls.
+ } else {
+ // TODO: The system bars are NOT visible. Make any desired
+ // adjustments to your UI, such as hiding the action bar or
+ // other navigational controls.
+ }
+ }
+});</pre>
+
+<p>It's generally good practice to keep your UI in sync with changes in system bar
+visibility. For example, you could use this listener to hide and show the action bar in
+concert with the status bar hiding and showing.</p>
diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs
index 39386bc..547faae 100644
--- a/docs/html/training/training_toc.cs
+++ b/docs/html/training/training_toc.cs
@@ -335,6 +335,30 @@
</li>
</ul>
</li>
+
+ <li class="nav-section">
+ <div class="nav-section-header">
+ <a href="<?cs var:toroot ?>training/printing/index.html"
+ description=
+ "How to print photos, HTML documents, and custom documents from your app."
+ >Printing Content</a>
+ </div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>training/printing/photos.html">
+ Photos
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/printing/html-docs.html">
+ HTML Documents
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/printing/custom-docs.html">
+ Custom Documents
+ </a>
+ </li>
+ </ul>
+ </li>
+
</ul>
</li>
<!-- End multimedia -->
@@ -945,6 +969,34 @@
</ul>
</li>
+ <li class="nav-section">
+ <div class="nav-section-header">
+ <a href="<?cs var:toroot ?>training/system-ui/index.html"
+ description=
+ "How to hide and show status and navigation bars across different versions of Android,
+ while managing the display of other screen components."
+ >Managing the System UI</a>
+ </div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>training/system-ui/dim.html">
+ Dimming the System Bars
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/system-ui/status.html">
+ Hiding the Status Bar
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/system-ui/navigation.html">
+ Hiding the Navigation Bar
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/system-ui/visibility.html">
+ Responding to UI Visibility Changes
+ </a>
+ </li>
+ </ul>
+ </li>
+
</ul>
</li>
<!-- End best UX and UI -->