summaryrefslogtreecommitdiffstats
path: root/docs/html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/html')
-rw-r--r--docs/html/about/versions/android-5.0.jd32
-rw-r--r--docs/html/about/versions/lollipop.jd28
-rw-r--r--docs/html/distribute/essentials/essentials_toc.cs6
-rw-r--r--docs/html/distribute/essentials/quality/tv.jd25
-rw-r--r--docs/html/distribute/essentials/quality/wear.jd387
-rw-r--r--docs/html/distribute/images/gp-wear-quality.pngbin0 -> 126344 bytes
-rw-r--r--docs/html/images/android-5.0/managed_apps_launcher.pngbin182352 -> 115178 bytes
-rw-r--r--docs/html/images/android-5.0/managed_apps_launcher@2x.pngbin633518 -> 353053 bytes
-rw-r--r--docs/html/images/games/game-controller-buttons.pngbin0 -> 42107 bytes
-rw-r--r--docs/html/images/games/game-controller-buttons_2x.pngbin0 -> 69645 bytes
-rw-r--r--docs/html/jd_collections.js20
-rw-r--r--docs/html/samples/new/index.jd15
-rw-r--r--docs/html/samples/wearable.jd11
-rw-r--r--docs/html/sdk/installing/adding-packages.jd3
-rw-r--r--docs/html/sdk/installing/index.jd3
-rw-r--r--docs/html/support.jd10
-rw-r--r--docs/html/tools/revisions/build-tools.jd23
-rw-r--r--docs/html/tools/revisions/platforms.jd17
-rw-r--r--docs/html/tools/support-library/features.jd12
-rw-r--r--docs/html/training/articles/wear-location-detection.jd375
-rw-r--r--docs/html/training/basics/firstapp/building-ui.jd10
-rw-r--r--docs/html/training/basics/firstapp/creating-project.jd5
-rw-r--r--docs/html/training/basics/firstapp/index.jd8
-rw-r--r--docs/html/training/basics/firstapp/running-app.jd7
-rw-r--r--docs/html/training/basics/firstapp/starting-activity.jd5
-rw-r--r--docs/html/training/building-wearables.jd2
-rw-r--r--docs/html/training/material/compatibility.jd6
-rw-r--r--docs/html/training/material/drawables.jd2
-rw-r--r--docs/html/training/material/lists-cards.jd4
-rw-r--r--docs/html/training/training_toc.cs6
-rw-r--r--docs/html/training/tv/games/index.jd94
-rw-r--r--docs/html/training/wearables/apps/index.jd3
-rw-r--r--docs/html/training/wearables/notifications/index.jd2
-rw-r--r--docs/html/training/wearables/notifications/stacks.jd4
-rw-r--r--docs/html/training/wearables/ui/index.jd1
-rw-r--r--docs/html/wear/images/01_create.pngbin0 -> 105061 bytes
-rw-r--r--docs/html/wear/images/02_create.pngbin0 -> 97603 bytes
-rw-r--r--docs/html/wear/images/10_uilib.pngbin0 -> 19618 bytes
38 files changed, 1030 insertions, 96 deletions
diff --git a/docs/html/about/versions/android-5.0.jd b/docs/html/about/versions/android-5.0.jd
index f8d8ab6..a438420 100644
--- a/docs/html/about/versions/android-5.0.jd
+++ b/docs/html/about/versions/android-5.0.jd
@@ -23,6 +23,7 @@ sdk.platform.apiLevel=21
<li><a href="#BehaviorGetRecentTasks">If your app uses getRecentTasks()...</a></li>
<li><a href="#64BitSupport">If you are using the Android Native Development Kit (NDK)...</a></li>
<li><a href="#BindService">If your app binds to a Service...</a></li>
+<li><a href="#BehaviorWebView">If your app uses a WebView...</a></li>
</ol>
</li>
<li><a href="#UI">User Interface</a>
@@ -234,8 +235,8 @@ the system can present notifications correctly in
vibration.</p>
<p>Setting the device to
-{@link android.media.AudioManager#RINGER_MODE_SILENT RINGER_MODE_SILENT} now
-causes the device to enter the new priority mode. The device leaves priority
+{@link android.media.AudioManager#RINGER_MODE_SILENT RINGER_MODE_SILENT} causes
+the device to enter the new priority mode. The device leaves priority
mode if you set it to
{@link android.media.AudioManager#RINGER_MODE_NORMAL RINGER_MODE_NORMAL} or
{@link android.media.AudioManager#RINGER_MODE_NORMAL RINGER_MODE_VIBRATE}.</p>
@@ -366,6 +367,31 @@ and throws an exception if given an implicit intent.
To ensure your app is secure, use an explicit intent when starting or binding
your {@link android.app.Service}, and do not declare intent filters for the service.</p>
+<h3 id="BehaviorWebView">If your app uses WebView...</h3>
+
+<p>Android 5.0 changes the default behavior for your app.</p>
+<ul>
+<li><strong>If your app targets API level 21 or higher:</strong>
+ <ul>
+ <li>The system
+ blocks <a href="https://developer.mozilla.org/en-US/docs/Security/MixedContent"
+ class="external-link">mixed content</a> and third party cookies by default. To allow mixed
+ content and third party cookies, use the
+ {@link android.webkit.WebSettings#setMixedContentMode(int) setMixedContentMode()}
+and {@link android.webkit.CookieManager#setAcceptThirdPartyCookies(android.webkit.WebView, boolean) setAcceptThirdPartyCookies()}
+methods respectively.</li>
+ <li>The system now intelligently chooses portions of the HTML
+ document to draw. This new default behavior helps to reduce memory
+ footprint and increase performance. If you want to
+ render the whole document at once, disable this optimization by calling
+ {@link android.webkit.WebView#enableSlowWholeDocumentDraw()}.</li>
+ </ul>
+</li>
+<li><strong>If your app targets API levels lower than 21:</strong> The system
+ allows mixed content and third party cookies, and always renders the whole
+ document at once.</li>
+</ul>
+
<h2 id="UI">User Interface</h2>
<h3 id="MaterialDesign">Material design support</h3>
@@ -470,7 +496,7 @@ request the user’s permission by launching a screen capture dialog using an
method.</p>
<p>For an example of how to use the new APIs, see the {@code MediaProjectionDemo}
-class in the {@code ApiDemos} sample project.</p>
+class in the sample project.</p>
<h2 id="Notifications">Notifications</h2>
diff --git a/docs/html/about/versions/lollipop.jd b/docs/html/about/versions/lollipop.jd
index b9ad0dd..3ee0a86 100644
--- a/docs/html/about/versions/lollipop.jd
+++ b/docs/html/about/versions/lollipop.jd
@@ -26,14 +26,14 @@ page.title=Android Lollipop
<li><a href="#Documents">Document-centric apps</a></li>
<li><a href="#Connectivity">Advanced connectivity</a></li>
<li><a href="#Graphics">High-performance graphics</a></li>
- <li><a href="#Audio">More Powerful Audio</a></li>
- <li><a href="#Camera">Enhanced Camera & Video</a></li>
+ <li><a href="#Audio">More powerful audio</a></li>
+ <li><a href="#Camera">Enhanced camera & video</a></li>
<li><a href="#Work">Android in the workplace</a></li>
<li><a href="#ScreenCapture">Screen capturing and sharing</a></li>
<li><a href="#Sensors">New types of sensors</a></li>
<li><a href="#WebView">Chromium WebView</a></li>
- <li><a href="#Accessibility">Accessibility & Input</a></li>
- <li><a href="#Battery">Tools for building battery-efficient apps</a></li>
+ <li><a href="#Accessibility">Accessibility & input</a></li>
+ <li><a href="#Battery">Tools for battery-efficient apps</a></li>
</ul>
</div>
</div>
@@ -94,10 +94,11 @@ about Android 5.0 for consumers at
</div>
-<p>Ripple animations are available for buttons, checkboxes, and other touch controls in your app.</p>
+<p>Ripple animations are available for buttons, checkboxes, and other touch controls in your app.
-<p>A new system-managed processing thread called <strong>RenderThread</strong> keeps animations smooth even when there are delays in the main UI thread. </p>
+<p>You can also define vector drawables in XML and animate them in a variety of ways. Vector drawables scale without losing definition, so they are perfect for single-color in-app icons.</p>
+<p>A new system-managed processing thread called <strong>RenderThread</strong> keeps animations smooth even when there are delays in the main UI thread. </p>
<h2 id="Perf">Performance focus</h2>
@@ -179,7 +180,7 @@ video apps and games to display smooth synchronized content.</p>
<p>Android 5.0 also introduces the <strong>Android Extension Pack</strong> (AEP), a set of OpenGL ES extensions that give you access to features like tessellation shaders, geometry shaders, ASTC texture compression, per-sample interpolation and shading, and other advanced rendering capabilities. With AEP you can deliver high-performance graphics across a range of GPUs.</p>
-<h2 id="Audio">More Powerful Audio</h2>
+<h2 id="Audio">More powerful audio</h2>
<p>A new audio-capture design offers <strong>low-latency audio input</strong>. The new design includes: a fast capture thread that never blocks except during a read; fast track capture clients at native sample rate, channel count, and bit depth; and normal capture clients offer resampling, up/down channel mix, and up/down bit depth.</p>
@@ -194,7 +195,7 @@ video apps and games to display smooth synchronized content.</p>
<p>New <strong>{@link android.media.session.MediaSession}</strong> APIs for controlling media playback now make it easier to provide consistent media controls across screens and other controllers.</p>
-<h2 id="Camera">Enhanced Camera &amp; Video</h2>
+<h2 id="Camera">Enhanced camera &amp; video</h2>
<p>Android 5.0 introduces <strong>all new camera APIs</strong> that let you capture raw formats such as YUV and Bayer RAW, and control parameters such as exposure time, ISO sensitivity, and frame duration on a per-frame basis. The new fully-synchronized camera pipeline allows you to capture uncompressed full-resolution YUV images at 30 FPS on supported devices.</p>
@@ -206,10 +207,15 @@ video apps and games to display smooth synchronized content.</p>
-<img style="float:right; margin:0 0 40px 60px"
+<div class="figure" style="width:320px; margin:1em 0 0 20px;padding-left:2em;">
+<img style="float:right; margin:0 1em 1em 2em"
src="{@docRoot}images/android-5.0/managed_apps_launcher@2x.png"
srcset="{@docRoot}images/android-5.0/managed_apps_launcher@2x.png 2x"
alt="" width="300" />
+<p class="img-caption">Users have a unified view of their personal and work apps, which are
+badged for easy identification.</p>
+</div>
+
<h2 id="Work">Android in the workplace</h2>
@@ -253,13 +259,15 @@ can configure global device settings.</p>
<p>The initial release for Android 5.0 includes a version of Chromium for {@link android.webkit.WebView} based on the Chromium M37 release, adding support for <strong>WebRTC</strong>, <strong>WebAudio</strong>, and <strong>WebGL</strong>. </p>
+<p>Chromium M37 also includes native support for all of the <strong>Web Components</strong> specifications: Custom Elements, Shadow DOM, HTML Imports, and Templates. This means you can use <a href="http://polymer-project.org/">Polymer</a> and its <a href="https://www.polymer-project.org/docs/elements/material.html">material design elements</a> in a WebView without needing polyfills.</p>
+
<p>Although WebView has been based on Chromium since Android 4.4, the Chromium layer is now updatable from Google Play.</p>
<p>As new versions of Chromium become available, users can update from Google Play to ensure they get the latest enhancements and bug fixes for WebView, providing the latest web APIs and bug fixes for apps using WebView on Android 5.0 and higher.</p>
-<h2 id="Accessibility">Accessibility &amp; Input</h2>
+<h2 id="Accessibility">Accessibility &amp; input</h2>
<p>New accessibility APIs can retrieve detailed information about the properties of windows on the screen that sighted users can interact with and define standard or customized input actions for UI elements.</p>
diff --git a/docs/html/distribute/essentials/essentials_toc.cs b/docs/html/distribute/essentials/essentials_toc.cs
index 4e53468..a1c9575 100644
--- a/docs/html/distribute/essentials/essentials_toc.cs
+++ b/docs/html/distribute/essentials/essentials_toc.cs
@@ -17,6 +17,12 @@
</div>
</li>
<li class="nav-section">
+ <div class="nav-section empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/essentials/quality/wear.html">
+ <span class="en">Wear App Quality</span>
+ </a>
+ </div>
+ </li>
+ <li class="nav-section">
<div class="nav-section empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/essentials/optimizing-your-app.html">
<span class="en">Optimize Your App</span>
</a>
diff --git a/docs/html/distribute/essentials/quality/tv.jd b/docs/html/distribute/essentials/quality/tv.jd
index 8e17157..b13307e 100644
--- a/docs/html/distribute/essentials/quality/tv.jd
+++ b/docs/html/distribute/essentials/quality/tv.jd
@@ -234,7 +234,7 @@ page.image=/distribute/images/gp-tv-quality.png
</td>
<td>
<p style="margin-bottom:.5em;">
- App does not depend on a remote controller having a menu button to access user interface
+ App does not depend on a remote controller having a Menu button to access user interface
controls.
(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Learn how</a>)
</p>
@@ -291,8 +291,8 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- App manifest sets an intent type of {@code ACTION_MAIN} with category
- {@code CATEGORY_LEANBACK_LAUNCHER}.
+ App manifest sets an intent type of {@link android.content.Intent#ACTION_MAIN} with category
+ {@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER}.
(<a href="{@docRoot}training/tv/start/start.html#tv-activity">Learn how</a>)
</p>
</td>
@@ -321,8 +321,9 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- If the app requires a game controller, the app manifest sets the {@code uses-feature} setting
- {@code android.hardware.gamepad} to {@code required="true"}.
+ If the app uses a game controller as it's primary input method, it declares the appropriate
+ requirement with the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"
+ >{@code &lt;uses-feature>}</a> manifest tag.
(<a href="{@docRoot}training/tv/games/index.html#gamepad">Learn how</a>)
</p>
</td>
@@ -334,9 +335,9 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- If the app provides user instructions for use of game controllers, the instructions
- do not include a controller with any branding.
- (<a href="{@docRoot}training/tv/games/index.html#generic-controllers">Learn how</a>)
+ If the app provides visual instructions for using game controllers, the instructions should
+ be free of branding and show a compatible button layout.
+ (<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">Learn how</a>)
</p>
</td>
</tr>
@@ -351,7 +352,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- App enables interaction with any advertising using D-pad controls.
+ App allows interaction with advertising using D-pad controls.
(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Learn how</a>)
</p>
</td>
@@ -363,7 +364,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- For advertising that uses full-screen, non-video ads, the app allows the user to
+ For advertising that uses fullscreen, non-video ads, the app allows the user to
immediately dismiss the ad with D-pad controls.
</p>
</td>
@@ -375,7 +376,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- For advertising that uses clickable, non-full screen, non-video ads, the app does not allow
+ For advertising that uses clickable, non-fullscreen, non-video ads, the app does not allow
ads to link to a web URL.
</p>
</td>
@@ -387,7 +388,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- For advertising that uses clickable, non-full screen, non-video ads, the app does not allow
+ For advertising that uses clickable, non-fullscreen, non-video ads, the app does not allow
ads to link to another app that is not available on TV devices.
</p>
</td>
diff --git a/docs/html/distribute/essentials/quality/wear.jd b/docs/html/distribute/essentials/quality/wear.jd
new file mode 100644
index 0000000..667e945
--- /dev/null
+++ b/docs/html/distribute/essentials/quality/wear.jd
@@ -0,0 +1,387 @@
+page.title=Wear App Quality
+page.tags="wear","wearables","quality","guidelines"
+page.metaDescription=Wearables are small factor devices that are built for glanceability and require unique design and functionality.
+page.image=/distribute/images/gp-wear-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Quality Criteria</h2>
+ <ol>
+ <li><a href="#ux">Design and Interaction</a></li>
+ <li><a href="#fn">Functionality</a></li>
+ <li><a href="#faq">Frequently Asked Questions</a></li>
+ </ol>
+
+ <h2>You Should Also Read</h2>
+ <ol>
+ <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+ Core App Quality</a></li>
+ <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+ Optimize Your App</a></li>
+ <li><a href="{@docRoot}design/patterns/notifications.html">
+ Notifications</a></li>
+ </ol>
+</div>
+</div>
+
+<img src="{@docRoot}distribute/images/gp-wear-quality.png" style="width:480px;">
+
+<p>
+ Android Wear aims to provide users with just the right information at just the right time. Great
+ Android Wear experiences are launched automatically, glanceable, and require zero or low user
+ interaction. Designing apps for wearables is substantially different than designing for phones or
+ tablets. There are different strengths and weaknesses, different use cases, and different
+ ergonomics to take into consideration.
+</p>
+
+<p>
+ The first step toward creating a great experience for users on Wear is to read the
+ <a href="{@docRoot}design/wear/index.html">Android Wear design guidelines</a>, which provides
+ instructions on how to build the best user experience for Wear apps. You should also review the
+ <a href="{@docRoot}training/building-wearables.html">Building Apps for Wearables</a> training, to
+ understand the basic implementation requirements for a Wear app.
+</p>
+
+<p class="caution">
+ <strong>Important:</strong> To ensure a great user experience, apps for wearables must meet
+ specific requirements for usability. Only apps that meet the following quality criteria will
+ qualify as an Android Wear app on Google Play. Qualifying as a Wear app will make it easier for
+ Android Wear users to discover your app on Google Play.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> You will be able to submit your apps for Android Wear review when the
+ public release of Android 5.0 launches on November 3. Stay tuned for more information about how to
+ submit your apps for Android Wear review through the <a href="https://play.google.com/apps/publish/signup/">Google Play Developer Console</a>.
+</p>
+
+<div class="headerLine">
+ <h2 id="fn">
+ Functionality
+ </h2>
+
+
+</div>
+
+<p>
+ These criteria ensure that your app is configured correctly and provides the expected
+ functional behavior.
+</p>
+
+
+<table>
+<tr>
+ <th style="width:2px;">
+ Type
+ </th>
+ <th style="width:54px;">
+ ID
+ </th>
+ <th>
+ Description
+ </th>
+</tr>
+
+<tr>
+ <td rowspan="1" id="general">
+ General
+ </td>
+
+ <td id="WR-GL">
+ WR-GL
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ Handheld app includes either notifications with wearable-specific functionality or a wearable
+ app that runs directly on the Wear device.
+ (<a href="{@docRoot}training/building-wearables.html">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td rowspan="1" id="packaging">
+ Packaging
+ </td>
+
+ <td id="WR-PK">
+ WR-PK
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ Wearable apps that run directly on the device are packaged inside the primary handheld app.
+ (<a href="{@docRoot}training/wearables/apps/packaging.html">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+
+<tr>
+ <td rowspan="3" id="functional-notifications">
+ Notifications
+ </td>
+
+ <td id="WR-FW">
+ WR-FW
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ Notifications with wearable-specific functionality use a {@code RemoteInput} or
+ {@code WearableExtender}.
+ (<a href="{@docRoot}training/wearables/notifications/index.html">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td id="WR-FR">
+ WR-FR
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ Notifications for messaging apps allow users to reply via voice input or quick responses.
+ (<a href="{@docRoot}training/wearables/notifications/voice-input.html">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td id="WR-FG">
+ WR-FG
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ Similar notifications are grouped together in a stack.
+ (<a href="{@docRoot}training/wearables/notifications/stacks.html">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td rowspan="1" id="gestures">
+ Gestures
+ </td>
+
+ <td id="WR-GP">
+ WR-GP
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ Full-screen activities use long press for the sole purpose of prompting to quit.
+ <br/>
+ (<a href="{@docRoot}training/wearables/ui/exit.html">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+ <h2 id="ux">
+ Visual Design and User Interaction
+ </h2>
+
+
+</div>
+
+<p>
+ These criteria ensure that your app follows critical design and interaction patterns to provide a
+ consistent, intuitive, and enjoyable user experience on wearables.
+</p>
+
+<table>
+
+<tr>
+ <th style="width:2px;">
+ Type
+ </th>
+ <th style="width:54px;">
+ ID
+ </th>
+ <th>
+ Description
+ </th>
+</tr>
+
+<tr>
+ <td rowspan="2" id="layout">
+ Layout
+ </td>
+
+ <td id="WR-LL">
+ WR-LL
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ App user interface is formatted appropriately for both square and round displays.
+ (<a href="{@docRoot}training/wearables/ui/layouts.html">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td id="WR-TC">
+ WR-TC
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ App text is large and glanceable with a suggested minimum size of 16sp.
+ (<a href="{@docRoot}design/wear/style.html#Typography">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td rowspan="1" id="launcher">
+ Launcher
+ </td>
+
+ <td id="WR-LN">
+ WR-LN
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ App launcher string is the app name, not a command phrase.
+ (<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td rowspan="5" id="notifications">
+ Notifications
+ </td>
+
+ <td id="WR-NC">
+ WR-NC
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ App displays confirmation animations when appropriate.
+ (<a href="{@docRoot}design/wear/patterns.html#Countdown">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td id="WR-NR">
+ WR-NR
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ Notification cards have the app icon visible at the top right edge. The one exception is if the
+ notification card has single-action controls, for example a media playback card.
+ <br/>
+ (<a href="{@docRoot}design/wear/style.html#Assets">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td id="WR-WI">
+ WR-WI
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ Notification actions have a white icon, action title, and transparent background.
+ <br/>
+ (<a href="{@docRoot}training/wearables/notifications/creating.html#ActionButtons">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td id="WR-PB">
+ WR-PB
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ Notification photo backgrounds are used only to convey information, not to brand a card.
+ (<a href="{@docRoot}design/wear/style.html#Branding">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td id="WR-PR">
+ WR-PR
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ Notification photo backgrounds have a resolution of at least 400x400.
+ (<a href="{@docRoot}training/wearables/notifications/creating.html#AddWearableFeatures">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td rowspan="1" id="googleplay">
+ Google Play
+ </td>
+
+ <td id="WR-GS">
+ WR-GS
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">
+ App includes at least one Wear screenshot in its Play Store Listing.
+ (<a href="https://support.google.com/googleplay/android-developer/answer/1078870?hl=en">Learn how</a>)
+ </p>
+ </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+ <h2 id="faq">
+ Frequently Asked Questions
+ </h2>
+</div>
+
+<p style="margin-top:30px;">
+ <strong>After I submit my app for Android Wear review, how will I find out if my app does not meet
+ all the requirements for Wear?</strong>
+</p>
+<p>
+ If your app does not meet the usability requirements described on this page, the Play Store team
+ will contact you through the email address specified in the <a href=
+ "https://play.google.com/apps/publish/">Google Play Developer Console</a> account associated with
+ the app.
+</p>
+<p class="caution">
+ <strong>Caution:</strong> Make sure your app meets the <a href="#fn">functionality
+ requirements</a>, otherwise your app will not be considered a Wear app and will not be reviewed
+ for Wear <a href="#ux">design and interaction</a>.
+</p>
+<p class="note">
+ <strong>Note:</strong> You will be able to submit your apps for additional Android Wear review when
+ the public release of Android 5.0 launches on November 3.
+</p>
+
+
+<p style="margin-top:30px;">
+ <strong>If my app does not meet the Wear requirements, will my new or updated app still appear on
+ Google Play for phones and tablets and still be installable on wearables?</strong>
+</p>
+<p>
+ Yes. The requirements described above only determine whether your app will be identified as an
+ Android Wear app on Google Play and easier for Android Wear users to discover. If your app is not
+ accepted as a Wear app, it will still be available to other device types, such as phones and
+ tablets, and it will still be installable on wearables.
+</p>
diff --git a/docs/html/distribute/images/gp-wear-quality.png b/docs/html/distribute/images/gp-wear-quality.png
new file mode 100644
index 0000000..a51a32c
--- /dev/null
+++ b/docs/html/distribute/images/gp-wear-quality.png
Binary files differ
diff --git a/docs/html/images/android-5.0/managed_apps_launcher.png b/docs/html/images/android-5.0/managed_apps_launcher.png
index 8184556..46e4c74 100644
--- a/docs/html/images/android-5.0/managed_apps_launcher.png
+++ b/docs/html/images/android-5.0/managed_apps_launcher.png
Binary files differ
diff --git a/docs/html/images/android-5.0/managed_apps_launcher@2x.png b/docs/html/images/android-5.0/managed_apps_launcher@2x.png
index 66b7be9..d7fdbce 100644
--- a/docs/html/images/android-5.0/managed_apps_launcher@2x.png
+++ b/docs/html/images/android-5.0/managed_apps_launcher@2x.png
Binary files differ
diff --git a/docs/html/images/games/game-controller-buttons.png b/docs/html/images/games/game-controller-buttons.png
new file mode 100644
index 0000000..b3e458a
--- /dev/null
+++ b/docs/html/images/games/game-controller-buttons.png
Binary files differ
diff --git a/docs/html/images/games/game-controller-buttons_2x.png b/docs/html/images/games/game-controller-buttons_2x.png
new file mode 100644
index 0000000..7a0ad0b
--- /dev/null
+++ b/docs/html/images/games/game-controller-buttons_2x.png
Binary files differ
diff --git a/docs/html/jd_collections.js b/docs/html/jd_collections.js
index c49f8cc..08c0090 100644
--- a/docs/html/jd_collections.js
+++ b/docs/html/jd_collections.js
@@ -67,9 +67,9 @@ var RESOURCE_COLLECTIONS = {
"distribute/essentials/quality/core.html",
"distribute/essentials/quality/tablets.html",
"distribute/essentials/quality/tv.html",
+ "distribute/essentials/quality/wear.html",
"https://developers.google.com/edu/guidelines",
- "distribute/essentials/optimizing-your-app.html",
- "distribute/essentials/best-practices/games.html"
+ "distribute/essentials/optimizing-your-app.html"
]
},
"distribute/users": {
@@ -332,6 +332,22 @@ var RESOURCE_COLLECTIONS = {
"training/tv/games/index.html"
]
},
+ "distribute/essentials/wearqualityguidelines/visualdesign": {
+ "title": "",
+ "resources": [
+ "design/wear/index.html",
+ "training/building-wearables.html",
+ "training/wearables/ui/index.html"
+ ]
+ },
+ "distribute/essentials/wearqualityguidelines/functionality": {
+ "title": "",
+ "resources": [
+ "training/wearables/notifications/index.html",
+ "training/wearables/apps/index.html",
+ "training/wearables/notifications/voice-input.html"
+ ]
+ },
"distribute/essentials/core/performance": {
"title": "",
"resources": [
diff --git a/docs/html/samples/new/index.jd b/docs/html/samples/new/index.jd
index 523b922..330caa3 100644
--- a/docs/html/samples/new/index.jd
+++ b/docs/html/samples/new/index.jd
@@ -348,3 +348,18 @@ AppRestrictionEnforcer sample to toggle the restriction.
</p>
<p><a href="http://github.com/googlesamples/android-AppRestrictionSchema">Get it on GitHub</a></p>
+
+<h3 id="SpeedTracker">Speed Tracker (Wear)</h3>
+
+<p>
+This sample uses the FusedLocation APIs of Google Play Services on Android Wear
+devices that have a hardware GPS built in. In those cases, this sample provides
+a simple screen that shows the current speed of the wearable device. User can
+set a speed limit and if the speed approaches that limit, it changes the color
+to yellow and if it exceeds the limit, it turns red. User can also enable
+recording of coordinates and when it pairs back with the phone, this data
+is synced with the phone component of the app and user can see a track
+made of those coordinates on a map on the phone.
+</p>
+
+<p><a href="http://github.com/googlesamples/android-SpeedTracker">Get it on GitHub</a></p>
diff --git a/docs/html/samples/wearable.jd b/docs/html/samples/wearable.jd
new file mode 100644
index 0000000..3114374
--- /dev/null
+++ b/docs/html/samples/wearable.jd
@@ -0,0 +1,11 @@
+page.title=Wearable
+@jd:body
+
+
+<div id="samples" class="wearable">
+</div>
+
+
+<script>
+ $(document).ready(showSamples);
+</script>
diff --git a/docs/html/sdk/installing/adding-packages.jd b/docs/html/sdk/installing/adding-packages.jd
index e6c0118..22d055c 100644
--- a/docs/html/sdk/installing/adding-packages.jd
+++ b/docs/html/sdk/installing/adding-packages.jd
@@ -1,5 +1,8 @@
page.title=Adding SDK Packages
+page.tags=studio, sdk tools, eclipse adt, sdk manager, google play services, support library
+helpoutsWidget=true
+
@jd:body
<style>
diff --git a/docs/html/sdk/installing/index.jd b/docs/html/sdk/installing/index.jd
index ec0e2f8..6a99952 100644
--- a/docs/html/sdk/installing/index.jd
+++ b/docs/html/sdk/installing/index.jd
@@ -1,5 +1,8 @@
page.title=Installing the Android SDK
+page.tags=studio, sdk tools, eclipse adt
+helpoutsWidget=true
+
@jd:body
<style>
diff --git a/docs/html/support.jd b/docs/html/support.jd
index 4271eee..bbed7df 100644
--- a/docs/html/support.jd
+++ b/docs/html/support.jd
@@ -3,6 +3,7 @@ page.type=about
fullpage=1
page.metaDescription=Resources available to help you report and resolve issues while you are developing apps for Android.
page.image=/images/android-support-card.png
+
@jd:body
<div class="wrap" style="width:940px;">
@@ -28,13 +29,20 @@ page.image=/images/android-support-card.png
<a href="http://webchat.freenode.net/?channels=android">#android</a>, <a href="http://webchat.freenode.net/?channels=android-dev">#android-dev</a> <span style="color:#888">(IRC via irc.freenode.net)</span><br />
</p>
+<p><b>
+<a target="_blank"
+href="https://helpouts.google.com/partner/ask?vertical=programming&tags=android&origin=http:%2F%2Fdeveloper.android.com%2Fsupport.html">Ask a question in Google Helpouts</a>
+</b></p>
+
<h5>Send Feedback</h5>
<p>
<a href="http://code.google.com/p/android/issues/entry?template=Developer%20Documentation">Report documentation bug</a><br />
<a href="https://code.google.com/p/android/issues/entry?template=User%20bug%20report">Report device bug</a><br />
<a href="https://code.google.com/p/android/issues/entry?template=Developer%20bug%20report">Report platform bug</a><br />
-
+</p>
+
+
</div>
diff --git a/docs/html/tools/revisions/build-tools.jd b/docs/html/tools/revisions/build-tools.jd
index fe78ce9..6f07755 100644
--- a/docs/html/tools/revisions/build-tools.jd
+++ b/docs/html/tools/revisions/build-tools.jd
@@ -77,6 +77,28 @@ listing in the Android SDK Manager.</p>
<div class="toggle-content opened">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
+ alt=""/>Build Tools, Revision 21.0.2</a> <em>(October 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <p>Complete updates for Eclipse ADT to solve instability issues on Windows platforms.</p>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+ alt=""/>Build Tools, Revision 21.0.1</a> <em>(October 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <p>Initial updates for Eclipse ADT on Windows. Please use Revision 21.0.2.</p>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
alt=""/>Build Tools, Revision 21.0.0</a> <em>(October 2014)</em>
</p>
<div class="toggle-content-toggleme">
@@ -96,6 +118,7 @@ listing in the Android SDK Manager.</p>
</div>
</div>
+
<div class="toggle-content closed">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
diff --git a/docs/html/tools/revisions/platforms.jd b/docs/html/tools/revisions/platforms.jd
index 3fa1b9b..85b9c5e 100644
--- a/docs/html/tools/revisions/platforms.jd
+++ b/docs/html/tools/revisions/platforms.jd
@@ -80,6 +80,23 @@ class="toggle-content-img" alt="" />Revision 1</a> <em>(October 2014)</em>
<h2 id="4.4">Android 4.4W</h2>
+<div class="toggle-content open">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-open.png"
+class="toggle-content-img" alt="" />Revision 2</a> <em>(October 2014)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+
+ <p>Added location APIs support for Wear.</p>
+
+ <p>Dependencies:</p>
+ <ul>
+ <li>Android SDK Platform-tools r20 or higher is required.</li>
+ <li>Android SDK Tools 23.0 or higher is required.</li>
+ </ul>
+ </div>
+
<div class="toggle-content closed">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-closed.png"
diff --git a/docs/html/tools/support-library/features.jd b/docs/html/tools/support-library/features.jd
index 8311097..44c5045 100644
--- a/docs/html/tools/support-library/features.jd
+++ b/docs/html/tools/support-library/features.jd
@@ -139,10 +139,10 @@ page.title=Support Library Features
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:support-v4:18.0.+
+com.android.support:support-v4:21.0.+
</pre>
-<p>This dependency notation specifies the release version 18.0.0 or higher.</p>
+<p>This dependency notation specifies the release version 21.0.0 or higher.</p>
<h2 id="v7">v7 Support Libraries</h2>
@@ -237,10 +237,10 @@ com.android.support:cardview-v7:21.0.+
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:gridlayout-v7:18.0.+
+com.android.support:gridlayout-v7:21.0.+
</pre>
-<p>This dependency notation specifies the release version 18.0.0 or higher.</p>
+<p>This dependency notation specifies the release version 21.0.0 or higher.</p>
<h3 id="v7-mediarouter">v7 mediarouter library</h3>
@@ -271,10 +271,10 @@ both the <code>android-support-v7-mediarouter.jar</code> and
<p>If you are using Android Studio, all you need to do is specify the Gradle build
script dependency identifier <code>com.android.support:support-v7-mediarouter:&lt;revision&gt;</code>,
-where "18.0.0" is the minimum revision at which the library is available. For example:</p>
+where "&lt;revision&gt;" is the minimum revision at which the library is available. For example:</p>
<pre>
-com.android.support:mediarouter-v7:18.0.+
+com.android.support:mediarouter-v7:21.0.+
</pre>
<p class="caution">The v7 mediarouter library APIs introduced in Support Library
diff --git a/docs/html/training/articles/wear-location-detection.jd b/docs/html/training/articles/wear-location-detection.jd
new file mode 100644
index 0000000..b0d9755
--- /dev/null
+++ b/docs/html/training/articles/wear-location-detection.jd
@@ -0,0 +1,375 @@
+page.title=Detecting Location on Android Wear
+page.tags="gps"
+
+page.article=true
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+<h2>In this document</h2>
+<ol class="nolist">
+ <li><a href="#Connect">Connect to Google Play Services</a></li>
+ <li><a href="#Request">Request Location Updates</a></li>
+ <li><a href="#DetectGPS">Detect On-Board GPS</a></li>
+ <li><a href="#Disconnection">Handle Disconnection Events</a></li>
+ <li><a href="#Notify">Handle Location Not Found</a></li>
+ <li><a href="#Synchronize">Synchronize Data</a></li>
+</ol>
+<!-- Required platform, tools, add-ons, devices, knowledge, etc. -->
+<h2>Dependencies and prerequisites</h2>
+<ul>
+ <li>Android 4.3 (API Level 18) or higher on the handset device</li>
+ <li><a href="{@docRoot}google/play-services/index.html">Google Play services</a> 6.1 or higher</li>
+ <li>An Android Wear device</li>
+</ul>
+<h2>See also</h2>
+<ul>
+ <li><a href="{@docRoot}training/location/index.html">Making Your App Location-Aware
+ </a></li>
+</ul>
+</div></div>
+
+<p>Location awareness on wearable devices enables you to create apps that give users a better
+understanding of their geographic position, movement and what's around them. With the small form
+factor and glanceable nature of a wearable device, you can build low-friction apps that record and
+respond to location data.</p>
+
+<p>Some wearable devices include a GPS sensor that can retrieve location data without another
+tethered device. However, when you request location data in a wearable app, you don't have to worry
+about where the location data originates; the system retrieves the location updates using the most
+power-efficient method. Your app should be able to handle loss of location data, in case the wear
+device loses connection with its paired device and does not have a built-in GPS sensor.</p>
+
+<p>This document shows you how to check for on-device location sensors, receive location data, and
+monitor tethered data connections.</p>
+
+<p class="note"><b>Note:</b> The article assumes that you know how to use the Google Play services
+API to retrieve location data. For more information, see <a href="{@docRoot}training/
+location/index.html">Making Your App Location-Aware</a>.</p>
+
+<h2 id="Connect">Connect to Google Play Services</h2>
+
+<p>Location data on wearable devices is obtained though the Google Play services location APIs. You
+use the <a href="{@docRoot}reference/com/google/android/gms/location/FusedLocationProviderApi.html">
+<code>FusedLocationProviderApi</code></a> and its accompanying classes to obtain this data.
+To access location services, create an instance of
+<a href="{@docRoot}reference/com/google/android/gms/common/api/GoogleApiClient.html">
+<code>GoogleApiClient</code></a>, which is
+the main entry point for any of the Google Play services APIs.
+</p>
+
+<p class="caution"><b>Caution:</b> Do not use the existing <a href="{@docRoot}reference/android/location/package-summary.html">Location</a>
+APIs in the Android framework. The best practice for retrieving location updates is through the
+Google Play services API as outlined in this article.</p>
+
+<p>To connect to Google Play services, configure your app to create an instance of
+<a href="{@docRoot}reference/com/google/android/gms/common/api/GoogleApiClient.html">
+<code>GoogleApiClient</code></a>:</p>
+
+<ol>
+ <li>Create an activity that specifies an implementation for the interfaces <a
+href="{@docRoot}reference/com/google/android/gms/common/api/GoogleApiClient.ConnectionCallbacks.html"
+>{@code ConnectionCallbacks}</a>, <a href="{@docRoot}reference/com/google/android/gms/common/api/
+GoogleApiClient.OnConnectionFailedListener.html">{@code OnConnectionFailedListener}</a>, and <a
+href="{@docRoot}reference/com/google/android/gms/location/LocationListener.html">{@code
+LocationListener}</a>.</li>
+ <li>In your activity's {@link android.app.Activity#onCreate onCreate()} method, create an instance
+of <a href="{@docRoot}reference/com/google/android/gms/common/api/GoogleApiClient.html"><code>
+GoogleApiClient</code></a> and add the Location service.
+ </li>
+ <li>To gracefully manage the lifecycle of the connection, call <a href="{@docRoot}reference/com/google/android/gms/common/api/GoogleApiClient.html#connect()">
+ {@code connect()}</a> in the {@link android.app.Activity#onResume onResume()} method and
+ <a href="{@docRoot}reference/com/google/android/gms/common/api/GoogleApiClient.html#disconnect()">
+ {@code disconnect()}</a> in the {@link android.app.Activity#onPause onPause()} method.
+ </li>
+</ol>
+
+<p>The following code example shows an implementation of an activity that implements the
+<a href="{@docRoot}reference/com/google/android/gms/location/LocationListener.html">
+{@code LocationListener}</a> interface:</p>
+
+<pre>
+public class WearableMainActivity extends Activity implements
+ GoogleApiClient.ConnectionCallbacks,
+ GoogleApiClient.OnConnectionFailedListener,
+ LocationListener {
+
+ private GoogleApiClient mGoogleApiClient;
+ ...
+
+ &#64;Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ ...
+ mGoogleApiClient = new GoogleApiClient.Builder(this)
+ .addApi(LocationServices.API)
+ .addApi(Wearable.API) // used for data layer API
+ .addConnectionCallbacks(this)
+ .addOnConnectionFailedListener(this)
+ .build();
+ }
+
+ &#64;Override
+ protected void onResume() {
+ super.onResume();
+ mGoogleApiClient.connect();
+ ...
+ }
+
+ &#64;Override
+ protected void onPause() {
+ super.onPause();
+ ...
+ mGoogleApiClient.disconnect();
+ }
+}
+</pre>
+
+<p>For more information on connecting to Google Play services, see <a href="{@docRoot}google/auth
+/api-client.html">Accessing Google APIs</a>.</p>
+
+<h2 id="Request">Request Location Updates</h2>
+
+<p>After your app has connected to the Google Play services API, it is ready to start receiving
+location updates. When the system invokes the
+<a href="{@docRoot}reference/com/google/android/gms/common/api/GoogleApiClient.ConnectionCallbacks.html#onConnected(android.os.Bundle)">
+<code>onConnected()</code></a> callback for your client, you build the location data request as
+follows:</p>
+
+<ol>
+ <li>Create a <a
+href="{@docRoot}reference/com/google/android/gms/location/LocationRequest.html"
+>{@code LocationRequest}</a> object and set any options using methods like <a
+href="{@docRoot}reference/com/google/android/gms/location/LocationRequest.html#setPriority(int)"
+>{@code setPriority()}</a>.
+ </li>
+ <li>Request location updates using <a href="{@docRoot}reference/com/google/android/gms/location/FusedLocationProviderApi.html#requestLocationUpdates(com.google.android.gms.common.api.GoogleApiClient, com.google.android.gms.location.LocationRequest, com.google.android.gms.location.LocationListener)">
+ <code>requestLocationUpdates()</code></a>.
+ </li>
+ <li>Remove location updates using <a href="{@docRoot}reference/com/google/android/gms/location/FusedLocationProviderApi.html#removeLocationUpdates(com.google.android.gms.common.api.GoogleApiClient, com.google.android.gms.location.LocationListener)">
+ <code>removeLocationUpdates()</code></a> in the {@link android.app.Activity#onPause
+ onPause()} method.
+ </li>
+</ol>
+
+<p>The following example shows how to retrieve and remove location updates:</p>
+
+<pre>
+&#64;Override
+public void onConnected(Bundle bundle) {
+ LocationRequest locationRequest = LocationRequest.create()
+ .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
+ .setInterval(UPDATE_INTERVAL_MS)
+ .setFastestInterval(FASTEST_INTERVAL_MS);
+
+ LocationServices.FusedLocationApi
+ .requestLocationUpdates(mGoogleApiClient, locationRequest, this)
+ .setResultCallback(new ResultCallback<Status>() {
+
+ &#64;Override
+ public void onResult(Status status) {
+ if (status.getStatus().isSuccess()) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Successfully requested location updates");
+ }
+ } else {
+ Log.e(TAG,
+ "Failed in requesting location updates, "
+ + "status code: "
+ + status.getStatusCode()
+ + ", message: "
+ + status.getStatusMessage());
+ }
+ }
+ });
+}
+
+&#64;Override
+protected void onPause() {
+ super.onPause();
+ if (mGoogleApiClient.isConnected()) {
+ LocationServices.FusedLocationApi
+ .removeLocationUpdates(mGoogleApiClient, this);
+ }
+ mGoogleApiClient.disconnect();
+}
+
+&#64;Override
+public void onConnectionSuspended(int i) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "connection to location client suspended");
+ }
+}
+
+</pre>
+
+<p>Now that you have enabled location updates, the system calls the {@link android.location.LocationListener#onLocationChanged
+onLocationChanged()} method with the updated location at the interval specified in <a
+href="{@docRoot}reference/com/google/android/gms/location/LocationRequest.html#setInterval(long)">
+{@code setInterval()}</a>
+</p>
+
+<h2 id="DetectGPS">Detect On-Board GPS</h2>
+
+<p>Not all wearables have a GPS sensor. If your user goes out for a run and leaves their phone at
+home, your wearable app cannot receive location data through a tethered connection. If the
+wearable device does not have a sensor, you should detect this situation and warn the user that
+location functionality is not available.
+
+<p>To determine whether your Android Wear device has a built-in GPS sensor, use the
+{@link android.content.pm.PackageManager#hasSystemFeature hasSystemFeature()}
+method. The following code detects whether the device has built-in GPS when you start an activity:
+</p>
+
+<pre>
+
+protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.main_activity);
+ if (!hasGps()) {
+ Log.d(TAG, "This hardware doesn't have GPS.");
+ // Fall back to functionality that does not use location or
+ // warn the user that location function is not available.
+ }
+
+ ...
+}
+
+private boolean hasGps() {
+ return getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
+}
+</pre>
+
+<h2 id="Disconnection">Handle Disconnection Events</h2>
+
+<p>Wearable devices relying on a tethered connection for location data may lose their connections
+abruptly. If your wearable app expects a constant stream of data, you must handle the
+disconnection based upon where that data is interrupted or unavailable. On a wearable device with no
+onboard GPS sensor, loss of location data occurs when the device loses its tethered data connection.
+</p>
+
+<p>In cases where your app depends on a tethered data connection for location data and the wear
+device does not have a GPS sensor, you should detect the loss of that connection, warn the user, and
+gracefully degrade the functionality of your app.</p>
+
+<p>To detect the loss of a tethered data connection:</p>
+
+<ol>
+ <li>Extend a <a href="{@docRoot}reference/com/google/android/gms/wearable/WearableListenerService.html">
+ <code>WearableListenerService</code></a> that lets you listen for important data layer events.
+ </li>
+ <li>Declare an intent filter in your Android manifest to notify the system about your
+ <a href="{@docRoot}reference/com/google/android/gms/wearable/WearableListenerService.html"><code>
+ WearableListenerService</code></a>.
+ This filter allows the system to bind your service as needed.
+<pre>
+&lt;service android:name=".NodeListenerService"&gt;
+ &lt;intent-filter&gt;
+ &lt;action android:name="com.google.android.gms.wearable.BIND_LISTENER" /&gt;
+ &lt;/intent-filter&gt;
+&lt;/service>
+</pre>
+ </li>
+ <li>Implement the <a href="{@docRoot}reference/com/google/android/gms/wearable/WearableListenerService.html#onPeerDisconnected(com.google.android.gms.wearable.Node)">
+ <code>onPeerDisconnected()</code></a> method and handle cases of whether or not the device has
+ built-in
+ GPS.
+<pre>
+public class NodeListenerService extends WearableListenerService {
+
+ private static final String TAG = "NodeListenerService";
+
+ &#64;Override
+ public void onPeerDisconnected(Node peer) {
+ Log.d(TAG, "You have been disconnected.");
+ if(!hasGPS()) {
+ // Notify user to bring tethered handset
+ // Fall back to functionality that does not use location
+ }
+ }
+ ...
+}
+</pre>
+ </li>
+</ol>
+
+For more information, read the <a href="{@docRoot}training/wearables/data-layer/events.html#Listen">
+Listen for Data Layer Events</a> guide.
+
+<h2 id="Notify">Handle Location Not Found</h2>
+
+<p>When the GPS signal is lost, you can still retrieve the last known location using
+<a href="{@docRoot}reference/com/google/android/gms/location/FusedLocationProviderApi.html#getLastLocation(com.google.android.gms.common.api.GoogleApiClient)">
+<code>getLastLocation()</code></a>. This method can be helpful in situations where you are unable to
+get a GPS fix, or when your wearable doesn't have built-in GPS and loses its connection with the
+phone.</p>
+
+<p>The following code uses <a href="{@docRoot}reference/com/google/android/gms/location/FusedLocationProviderApi.html#getLastLocation(com.google.android.gms.common.api.GoogleApiClient)">
+<code>getLastLocation()</code></a> to retrieve the last known location if available:
+</p>
+
+<pre>
+Location location = LocationServices.FusedLocationApi
+ .getLastLocation(mGoogleApiClient);
+</pre>
+
+<h2 id="Synchronize">Synchronize Data</h2>
+
+<p>If your wearable app records data using the built-in GPS, you may want to synchronize
+the location data with the handset. With the {@link android.location.LocationListener}, you
+implement the {@link android.location.LocationListener#onLocationChanged onLocationChanged()}
+method to detect and record the location as it changes.
+
+<p>The following code for wearable apps detects when the location changes and uses the data layer
+API to store the data for later retrieval by your phone app:</p>
+
+<pre>
+&#64;Override
+public void onLocationChanged(Location location) {
+ ...
+ addLocationEntry(location.getLatitude(), location.getLongitude());
+
+}
+
+private void addLocationEntry(double latitude, double longitude) {
+ if (!mSaveGpsLocation || !mGoogleApiClient.isConnected()) {
+ return;
+ }
+
+ mCalendar.setTimeInMillis(System.currentTimeMillis());
+
+ // Set the path of the data map
+ String path = Constants.PATH + "/" + mCalendar.getTimeInMillis();
+ PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(path);
+
+ // Set the location values in the data map
+ putDataMapRequest.getDataMap()
+ .putDouble(Constants.KEY_LATITUDE, latitude);
+ putDataMapRequest.getDataMap()
+ .putDouble(Constants.KEY_LONGITUDE, longitude);
+ putDataMapRequest.getDataMap()
+ .putLong(Constants.KEY_TIME, mCalendar.getTimeInMillis());
+
+ // Prepare the data map for the request
+ PutDataRequest request = putDataMapRequest.asPutDataRequest();
+
+ // Request the system to create the data item
+ Wearable.DataApi.putDataItem(mGoogleApiClient, request)
+ .setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
+ &#64;Override
+ public void onResult(DataApi.DataItemResult dataItemResult) {
+ if (!dataItemResult.getStatus().isSuccess()) {
+ Log.e(TAG, "Failed to set the data, "
+ + "status: " + dataItemResult.getStatus()
+ .getStatusCode());
+ }
+ }
+ });
+}
+</pre>
+
+<p>For more information on how to use the Data Layer API, see the <a href="{@docRoot}training/
+wearables/data-layer/index.html">Sending and Syncing Data</a>
+guide.</p>
diff --git a/docs/html/training/basics/firstapp/building-ui.jd b/docs/html/training/basics/firstapp/building-ui.jd
index 179b3ac..c082642 100644
--- a/docs/html/training/basics/firstapp/building-ui.jd
+++ b/docs/html/training/basics/firstapp/building-ui.jd
@@ -1,12 +1,8 @@
page.title=Building a Simple User Interface
-parent.title=Building Your First App
-parent.link=index.html
-
trainingnavtop=true
-previous.title=Running Your App
-previous.link=running-app.html
-next.title=Starting Another Activity
-next.link=starting-activity.html
+
+page.tags=ui, views, layouts, widgets, string resources
+helpoutsWidget=true
@jd:body
diff --git a/docs/html/training/basics/firstapp/creating-project.jd b/docs/html/training/basics/firstapp/creating-project.jd
index c4cb362..418eb68 100644
--- a/docs/html/training/basics/firstapp/creating-project.jd
+++ b/docs/html/training/basics/firstapp/creating-project.jd
@@ -1,6 +1,7 @@
page.title=Creating an Android Project
-parent.title=Building Your First App
-parent.link=index.html
+
+page.tags=eclipse adt, sdk tools, project setup
+helpoutsWidget=true
trainingnavtop=true
next.title=Running Your App
diff --git a/docs/html/training/basics/firstapp/index.jd b/docs/html/training/basics/firstapp/index.jd
index 1b49096..ac8e64a 100644
--- a/docs/html/training/basics/firstapp/index.jd
+++ b/docs/html/training/basics/firstapp/index.jd
@@ -3,8 +3,9 @@ page.metaDescription=If you're new to Android app development, this where you sh
trainingnavtop=true
startpage=true
-next.title=Creating an Android Project
-next.link=creating-project.html
+
+page.tags=sdk tools
+helpoutsWidget=true
@jd:body
@@ -47,6 +48,3 @@ not apply to earlier versions.</p>
<p>This class uses a tutorial format that incrementally builds a small Android app that teaches
you some fundamental concepts about Android development, so it's important that you follow each
step.</p>
-
-<p><strong><a href="creating-project.html">Start the first lesson &rsaquo;</a></strong></p>
-
diff --git a/docs/html/training/basics/firstapp/running-app.jd b/docs/html/training/basics/firstapp/running-app.jd
index 23cedba..96b7172 100644
--- a/docs/html/training/basics/firstapp/running-app.jd
+++ b/docs/html/training/basics/firstapp/running-app.jd
@@ -3,10 +3,9 @@ parent.title=Building Your First App
parent.link=index.html
trainingnavtop=true
-previous.title=Creating a Project
-previous.link=creating-project.html
-next.title=Building a Simple User Interface
-next.link=building-ui.html
+
+page.tags=emulator
+helpoutsWidget=true
@jd:body
diff --git a/docs/html/training/basics/firstapp/starting-activity.jd b/docs/html/training/basics/firstapp/starting-activity.jd
index 27d2c10..f9dcba4 100644
--- a/docs/html/training/basics/firstapp/starting-activity.jd
+++ b/docs/html/training/basics/firstapp/starting-activity.jd
@@ -3,8 +3,9 @@ parent.title=Building Your First App
parent.link=index.html
trainingnavtop=true
-previous.title=Building a Simpler User Interface
-previous.link=building-ui.html
+
+page.tags=input events, intents, activity lifecycle
+helpoutsWidget=true
@jd:body
diff --git a/docs/html/training/building-wearables.jd b/docs/html/training/building-wearables.jd
index 0745c93..d751a81 100644
--- a/docs/html/training/building-wearables.jd
+++ b/docs/html/training/building-wearables.jd
@@ -1,6 +1,6 @@
page.title=Building Apps for Wearables
page.trainingcourse=true
-page.image=wear/images/notifications.png
+page.image=wear/images/02_create.png
page.metaDescription=Learn how to build notifications, send and sync data, and use voice actions.
@jd:body
diff --git a/docs/html/training/material/compatibility.jd b/docs/html/training/material/compatibility.jd
index 5e03450..49ef7f7 100644
--- a/docs/html/training/material/compatibility.jd
+++ b/docs/html/training/material/compatibility.jd
@@ -131,9 +131,9 @@ href="{@docRoot}/sdk/installing/studio-build.html#dependencies">Gradle dependenc
<pre>
dependencies {
- compile 'com.android.support:appcompat-v7:+'
- compile 'com.android.support:cardview-v7:+'
- compile 'com.android.support:recyclerview-v7:+'
+ compile 'com.android.support:appcompat-v7:21.0.+'
+ compile 'com.android.support:cardview-v7:21.0.+'
+ compile 'com.android.support:recyclerview-v7:21.0.+'
}
</pre>
diff --git a/docs/html/training/material/drawables.jd b/docs/html/training/material/drawables.jd
index 8d7f453..fd21e3d 100644
--- a/docs/html/training/material/drawables.jd
+++ b/docs/html/training/material/drawables.jd
@@ -73,7 +73,7 @@ app's module:</p>
<pre>
dependencies {
...
- compile 'com.android.support:palette-v7:+'
+ compile 'com.android.support:palette-v7:21.0.+'
}
</pre>
diff --git a/docs/html/training/material/lists-cards.jd b/docs/html/training/material/lists-cards.jd
index eb45f0d..e7bdfe0 100644
--- a/docs/html/training/material/lists-cards.jd
+++ b/docs/html/training/material/lists-cards.jd
@@ -260,7 +260,7 @@ app's module:</p>
<pre>
dependencies {
...
- compile 'com.android.support:cardview-v7:+'
- compile 'com.android.support:recyclerview-v7:+'
+ compile 'com.android.support:cardview-v7:21.0.+'
+ compile 'com.android.support:recyclerview-v7:21.0.+'
}
</pre>
diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs
index 0fee771..9f06666 100644
--- a/docs/html/training/training_toc.cs
+++ b/docs/html/training/training_toc.cs
@@ -834,6 +834,12 @@ include the action bar on devices running Android 2.1 or higher."
</li>
</ul>
</li>
+ <li>
+ <a href="<?cs var:toroot ?>training/articles/wear-location-detection.html"
+ description=
+ "How to detect location data on Android Wear devices."
+ >Detecting Location</a>
+ </li>
</ul>
</li>
<!-- End Building for wearables -->
diff --git a/docs/html/training/tv/games/index.jd b/docs/html/training/tv/games/index.jd
index 29b055b..2f510a9 100644
--- a/docs/html/training/tv/games/index.jd
+++ b/docs/html/training/tv/games/index.jd
@@ -31,7 +31,7 @@ page.article=true
</p>
-<h3 id="shared-display">Shared display</h3>
+<h3 id="shared-display">Consider the shared display</h3>
<p>
A living-room TV poses design challenges for multiplayer games, in that all players can see
@@ -57,7 +57,7 @@ page.article=true
</ul>
-<h3 id="landscape-display">Landscape display</h3>
+<h3 id="landscape-display">Support landscape display</h3>
<p>
A TV is always sideways: You can’t turn it, and there is no portrait orientation. Always design
@@ -69,19 +69,19 @@ page.article=true
<p>
TVs don't have touch interfaces, so it's even more important to get your controls right and make
- sure that players find them intuitive and fun to use. The separation of controller from device
- also introduces some other issues to pay attention to, like keeping track of multiple players'
+ sure players find them intuitive and fun to use. Handling controllers
+ also introduces some other issues to pay attention to, like keeping track of multiple
controllers, and handling disconnects gracefully.
</p>
-<h3 id="d-pad">D-pad</h3>
+<h3 id="d-pad">Support D-pad controls</h3>
<p>
Plan your control scheme around a directional pad (D-pad) control, since this control set is the
default for Android TV devices. The player needs to be able to use a D-Pad in all aspects of the
- game–not just controlling core gameplay, but also navigating menus and ads. For this reason, you
- should also ensure that your Android TV game does not refer to a touch interface: For example, an
- Android TV game should not tell a player to <strong>Tap here to skip</strong>.
+ game&mdash;not just controlling core gameplay, but also navigating menus and ads. For this reason, you
+ should also ensure that your Android TV game does not refer to a touch interface. For example, an
+ Android TV game should not tell a player to "<em>Tap</em> here to continue."
</p>
<p>
@@ -91,35 +91,35 @@ page.article=true
<ul>
<li>
- <strong>Communicate Controller Requirements up Front</strong> - Use your Play Store description
+ <strong>Communicate Controller Requirements up Front</strong>. Use your Google Play description
to communicate to the player any expectations about controllers. If a game is better suited to
a gamepad with a joystick than one with only a D-pad, make this fact clear. A player who uses
- an ill-suited controller for a game is likely to have a subpar experience–and penalize your
+ an ill-suited controller for a game is likely to have a subpar experience and penalize your
game in the ratings.
</li>
<li>
- <strong>Use Consistent Button Mapping</strong> - Intuitive and flexible button mapping is key
- to a good user experience. For example, you can adhere to accepted custom by using the A button
- to <code>Accept</code>, and the B button to <code>Cancel</code>. You can also offer flexibility
- in the form of remappability. For more information on button mapping, see <a href=
+ <strong>Use Consistent Button Mapping</strong>. Intuitive and flexible button mapping is key
+ to a good user experience. For example, you should adhere to accepted customs by using the A button
+ to <em>Accept</em>, and the B button to <em>Cancel</em>. You can also offer flexibility
+ in the form of remappability. For more information about button mapping, see <a href=
"http://developer.android.com/training/game-controllers/controller-input.html">Handling
Controller Actions</a>.
</li>
<li>
- <strong>Detect Controller Capabilities and Adjust Accordingly</strong> - Query the controller
+ <strong>Detect Controller Capabilities and Adjust Accordingly</strong>. Query the controller
about its capabilities in order to optimize the match between controller and game. For example,
you may intend for a player to steer an object by waving the controller in the air. If a
player's controller lacks accelerometer and gyroscope hardware, however, waving will not work.
- When, however, your game queries the controller and discovers that motion detection is not
- supported, it can switch over to an alternative, available control scheme. For more information
- on querying controller capabilities, see <a href=
+ So, your game should query the controller and if motion detection is not
+ supported, switch over to an alternative, available control scheme. For more information
+ about querying controller capabilities, see <a href=
"http://developer.android.com/training/game-controllers/compatibility.html">Supporting
Controllers Across Android Versions</a>.
</li>
</ul>
-<h3 id="back-button">Back-button behavior</h3>
+<h3 id="back-button">Provide appropriate Back-button behavior</h3>
<p>
The Back button should never act as a toggle. For example, do not use it to both open and close a
@@ -139,18 +139,18 @@ page.article=true
</p>
-<h3 id="multiple-controllers">Handling multiple controllers</h3>
+<h3 id="multiple-controllers">Handle multiple controllers</h3>
<p>
When multiple players are playing a game, each with his or her own controller, it is important to
- map each player-controller pair. For information on how to implement controller-number
+ map each player-controller pair. For information about how to implement controller-number
identification, see <a href=
"http://developer.android.com/reference/android/view/InputDevice.html#getControllerNumber">Input
Devices</a>.
</p>
-<h3 id="handle-disconnect">Handling disconnects</h3>
+<h3 id="handle-disconnect">Handle controller disconnects</h3>
<p>
When a controller is disconnected in the middle of gameplay, the game should pause, and a dialog
@@ -159,7 +159,7 @@ page.article=true
<p>
The dialog should also offer troubleshooting tips (for example, a pop-up dialog telling the
- player to "Check your Bluetooth connection"). For more information on implementing input-device
+ player to "Check your Bluetooth connection"). For more information about implementing input-device
support, see <a href=
"http://developer.android.com/training/game-controllers/controller-input.html">Handling Controller
Actions</a>. Specific information about Bluetooth connections is at <a href=
@@ -167,25 +167,53 @@ page.article=true
</p>
+<h3 id="ControllerHelp">Show controller instructions</h3>
+
+<p>If your game provides visual game control instructions, the
+controller image should be free of branding and include only <a
+href="{@docRoot}training/game-controllers/controller-input.html#button"
+>buttons compatible with Android</a>.</p>
+
+<p>For sample images of an Android-compatible controller, download the
+<a href="http://storage.googleapis.com/androiddevelopers/design/android_tv_gamepad_template-2014-10.zip"
+>Android TV Gamepad Template (ZIP)</a>.
+It includes a white controller on black background and a black controller on white background
+(shown in figure 1), as a PNG file and an Adobe&reg; Illustrator&reg; file.</p>
+
+<img src="{@docRoot}images/games/game-controller-buttons_2x.png" width="700"
+ srcset="{@docRoot}images/games/game-controller-buttons_2x.png 2x,
+ {@docRoot}images/games/game-controller-buttons.png 1x" />
+<p class="img-caption"><b>Figure 1.</b> Example controller instructions using the
+<a href="http://storage.googleapis.com/androiddevelopers/design/android_tv_gamepad_template-2014-10.zip"
+>Android TV Gamepad Template (ZIP)</a>.
+
+
+
+
<h2 id="manifest">Manifest</h2>
+<p>There are a some special things games should include in the Android manifest.</p>
+
+<h3 id="Launcher">Show your game in the launcher</h3>
<p>
- The Android TV launcher home screen displays games in a separate row from regular apps. The TV
- framework uses the <code>android:isGame</code> manifest attribute to differentiate games from
- non-game apps. Set this value to <code>true</code> in your game's app manifest, as shown in the
- following code example:
+ The Android TV launcher home screen displays games in a separate row from regular apps.
+ To make your game appear in the list of games, add the
+ <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"
+ ><code>&lt;meta-data></code></a> tag in your app manifest with <code>android:name</code>
+ set to <code>"isGame"</code> and <code>android:value</code>
+ set to <code>"true"</code>. For example:
</p>
<pre class="fragment">
&lt;application&gt;
...
- &lt; meta-data android:name="isGame" android:value="true" &gt;
+ &lt;meta-data android:name="isGame" android:value="true" &gt;
...
&lt;/application&gt;
</pre>
-<h3 id="gamepad">Game Controllers</h3>
+<h3 id="gamepad">Declare support for game controllers</h3>
<p>
Games controllers may not be available or active for users of a TV device. In order to properly
@@ -215,7 +243,9 @@ page.article=true
<h2 id="gpgs">Google Play Game Services</h2>
<p>
- If your game integrates Google Play Game Services, you should keep in mind a number of
+ If your game integrates <a
+ href="https://developers.google.com/games/services/">Google Play Game services</a>,
+ you should keep in mind a number of
considerations pertaining to achievements, sign-in, saving games, and multiplayer play.
</p>
@@ -224,7 +254,7 @@ page.article=true
<p>
Your game should include at least five (earnable) achievements. Only a user controlling gameplay
- from a supported input device should be able to earn achievements. For more information on
+ from a supported input device should be able to earn achievements. For more information about
achievements and how to implement them, see <a href=
"https://developers.google.com/games/services/android/achievements">Achievements in Android</a>.
</p>
@@ -262,7 +292,7 @@ page.article=true
<p>
A game offering a multiplayer experience must allow at least two players to enter a room. For
- further information on multiplayer games in Android, see the <a href=
+ further information about multiplayer games in Android, see the <a href=
"https://developers.google.com/games/services/android/realtimeMultiplayer">Real-time
Multiplayer</a> and <a href="">Turn-based Multiplayer</a> documentation on the Android developer
site.
diff --git a/docs/html/training/wearables/apps/index.jd b/docs/html/training/wearables/apps/index.jd
index 7d961b7..256205b 100644
--- a/docs/html/training/wearables/apps/index.jd
+++ b/docs/html/training/wearables/apps/index.jd
@@ -1,5 +1,6 @@
page.title=Creating Wearable Apps
-page.image=wear/images/notifications.png
+page.tags="wear","wearable","app"
+page.image=wear/images/01_create.png
@jd:body
diff --git a/docs/html/training/wearables/notifications/index.jd b/docs/html/training/wearables/notifications/index.jd
index 17f3cb3..a7b6733 100644
--- a/docs/html/training/wearables/notifications/index.jd
+++ b/docs/html/training/wearables/notifications/index.jd
@@ -1,4 +1,6 @@
page.title=Adding Wearable Features to Notifications
+page.tags="wear","notifications","wearables"
+page.image=wear/images/01_notifications.png
@jd:body
<div id="tb-wrapper">
diff --git a/docs/html/training/wearables/notifications/stacks.jd b/docs/html/training/wearables/notifications/stacks.jd
index e71e74c..9a528a4 100644
--- a/docs/html/training/wearables/notifications/stacks.jd
+++ b/docs/html/training/wearables/notifications/stacks.jd
@@ -45,7 +45,7 @@ final static String GROUP_KEY_EMAILS = "group_key_emails";
Notification notif = new NotificationCompat.Builder(mContext)
.setContentTitle("New mail from " + sender1)
.setContentText(subject1)
- .setSmallIcon(R.drawable.new_mail);
+ .setSmallIcon(R.drawable.new_mail)
.setGroup(GROUP_KEY_EMAILS)
.build();
@@ -65,7 +65,7 @@ instead of as a new card:</p>
Notification notif2 = new NotificationCompat.Builder(mContext)
.setContentTitle("New mail from " + sender2)
.setContentText(subject2)
- .setSmallIcon(R.drawable.new_mail);
+ .setSmallIcon(R.drawable.new_mail)
.setGroup(GROUP_KEY_EMAILS)
.build();
diff --git a/docs/html/training/wearables/ui/index.jd b/docs/html/training/wearables/ui/index.jd
index 8ef6fe7..5d97490 100644
--- a/docs/html/training/wearables/ui/index.jd
+++ b/docs/html/training/wearables/ui/index.jd
@@ -1,4 +1,5 @@
page.title=Creating Custom UIs for Wear Devices
+page.image=wear/images/10_uilib.png
@jd:body
diff --git a/docs/html/wear/images/01_create.png b/docs/html/wear/images/01_create.png
new file mode 100644
index 0000000..5a39dde
--- /dev/null
+++ b/docs/html/wear/images/01_create.png
Binary files differ
diff --git a/docs/html/wear/images/02_create.png b/docs/html/wear/images/02_create.png
new file mode 100644
index 0000000..e722df1
--- /dev/null
+++ b/docs/html/wear/images/02_create.png
Binary files differ
diff --git a/docs/html/wear/images/10_uilib.png b/docs/html/wear/images/10_uilib.png
new file mode 100644
index 0000000..de7be57
--- /dev/null
+++ b/docs/html/wear/images/10_uilib.png
Binary files differ