diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 2cb3f39..6e9950d 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -3778,28 +3778,10 @@
      * result callbacks including {@link #onRequestPermissionsResult(int, String[], int[])}.
      * </p>
      * <p>
-     * A sample permissions request looks like this:
+     * The <a href="http://developer.android.com/samples/RuntimePermissions/index.html">
+     * RuntimePermissions</a> sample app demonstrates how to use this method to
+     * request permissions at run time.
      * </p>
-     * <code><pre><p>
-     * private void showContacts() {
-     *     if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
-     *             != PackageManager.PERMISSION_GRANTED) {
-     *         requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
-     *                 PERMISSIONS_REQUEST_READ_CONTACTS);
-     *     } else {
-     *         doShowContacts();
-     *     }
-     * }
-     *
-     * {@literal @}Override
-     * public void onRequestPermissionsResult(int requestCode, String[] permissions,
-     *         int[] grantResults) {
-     *     if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS
-     *             && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
-     *         showContacts();
-     *     }
-     * }
-     * </code></pre></p>
      *
      * @param permissions The requested permissions.
      * @param requestCode Application specific request code to match with a result
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index fe95864..f959ac4 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1417,15 +1417,17 @@
     }
 
     /**
-     * An app can use this method to check if it is currently allowed to draw on top of other
-     * apps. In order to be allowed to do so, an app must first declare the
-     * {@link android.Manifest.permission#SYSTEM_ALERT_WINDOW} permission in its manifest. If it
-     * is currently disallowed, it can prompt the user to grant it this capability through a
-     * management UI by sending an Intent with action
-     * {@link android.provider.Settings#ACTION_MANAGE_OVERLAY_PERMISSION}.
+     * Checks if the specified context can draw on top of other apps. As of API
+     * level 23, an app cannot draw on top of other apps unless it declares the
+     * {@link android.Manifest.permission#SYSTEM_ALERT_WINDOW} permission in its
+     * manifest, <em>and</em> the user specifically grants the app this
+     * capability. To prompt the user to grant this approval, the app must send an
+     * intent with the action
+     * {@link android.provider.Settings#ACTION_MANAGE_OVERLAY_PERMISSION}, which
+     * causes the system to display a permission management screen.
      *
-     * @param context A context
-     * @return true if the calling app can draw on top of other apps, false otherwise.
+     * @param context App context.
+     * @return true if the specified context can draw on top of other apps, false otherwise
      */
     public static boolean canDrawOverlays(Context context) {
         int uid = Binder.getCallingUid();
@@ -1439,7 +1441,7 @@
      * {@link android.Manifest.permission#CHANGE_NETWORK_STATE} or
      * {@link android.Manifest.permission#WRITE_SETTINGS} permission in its manifest. If it
      * is currently disallowed, it can prompt the user to grant it this capability through a
-     * management UI by sending an Intent with action
+     * management UI by sending an intent with action
      * {@link android.provider.Settings#ACTION_MANAGE_WRITE_SETTINGS}.
      *
      * @param context A context
@@ -3727,14 +3729,16 @@
             Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS;
 
         /**
-         * An app can use this method to check if it is currently allowed to write or modify system
-         * settings. In order to gain write access to the system settings, an app must declare the
-         * {@link android.Manifest.permission#WRITE_SETTINGS} permission in its manifest. If it is
-         * currently disallowed, it can prompt the user to grant it this capability through a
-         * management UI by sending an Intent with action
-         * {@link android.provider.Settings#ACTION_MANAGE_WRITE_SETTINGS}.
+         * Checks if the specified app can modify system settings. As of API
+         * level 23, an app cannot modify system settings unless it declares the
+         * {@link android.Manifest.permission#WRITE_SETTINGS}
+         * permission in its manifest, <em>and</em> the user specifically grants
+         * the app this capability. To prompt the user to grant this approval,
+         * the app must send an intent with the action {@link
+         * android.provider.Settings#ACTION_MANAGE_WRITE_SETTINGS}, which causes
+         * the system to display a permission management screen.
          *
-         * @param context A context
+         * @param context App context.
          * @return true if the calling app can write to system settings, false otherwise
          */
         public static boolean canWrite(Context context) {
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 1939003..fb31871 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1408,11 +1408,21 @@
     <!-- ================================== -->
     <eat-comment />
 
-    <!-- Allows an application to open windows using the type
+    <!-- Allows an app to create windows using the type
          {@link android.view.WindowManager.LayoutParams#TYPE_SYSTEM_ALERT},
-         shown on top of all other applications.  Very few applications
+         shown on top of all other apps.  Very few apps
          should use this permission; these windows are intended for
-         system-level interaction with the user. -->
+         system-level interaction with the user.
+
+         <p class="note"><strong>Note:</strong> If the app
+         targets API level 23 or higher, the app user must explicitly grant
+         this permission to the app through a permission management screen. The app requests
+         the user's approval by sending an intent with action
+         {@link android.provider.Settings#ACTION_MANAGE_OVERLAY_PERMISSION}.
+         The app can check whether it has this authorization by calling
+         {@link android.provider.Settings#canDrawOverlays
+         Settings.canDrawOverlays()}.
+         <p>Protection level: signature -->
     <permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
         android:label="@string/permlab_systemAlertWindow"
         android:description="@string/permdesc_systemAlertWindow"
@@ -1535,7 +1545,16 @@
         android:protectionLevel="signature|privileged|development" />
 
     <!-- Allows an application to read or write the system settings.
-         <p>Protection level: signature
+
+        <p class="note"><strong>Note:</strong> If the app targets API level 23
+        or higher, the app user
+        must explicitly grant this permission to the app through a permission management screen.
+        The app requests the user's approval by sending an intent with action
+        {@link android.provider.Settings#ACTION_MANAGE_WRITE_SETTINGS}. The app
+        can check whether it has this authorization by calling {@link
+        android.provider.Settings.System#canWrite Settings.System.canWrite()}.
+
+        <p>Protection level: signature
     -->
     <permission android:name="android.permission.WRITE_SETTINGS"
         android:label="@string/permlab_writeSettings"
diff --git a/docs/html/about/versions/marshmallow/android-6.0-changes.jd b/docs/html/about/versions/marshmallow/android-6.0-changes.jd
index 2619310..bae4717 100644
--- a/docs/html/about/versions/marshmallow/android-6.0-changes.jd
+++ b/docs/html/about/versions/marshmallow/android-6.0-changes.jd
@@ -66,7 +66,7 @@
 
 <p>For details on supporting the new permissions model in your app, see
 <a href="{@docRoot}training/permissions/index.html">
-Working with System Permissionss</a>. For tips on how to assess the impact on your app,
+Working with System Permissions</a>. For tips on how to assess the impact on your app,
 see <a href="{@docRoot}training/permissions/best-practices.html#testing">Permissions Best Practices</a>.</p>
 
 <h2 id="behavior-power">Doze and App Standby</h2>
@@ -189,7 +189,7 @@
 
 <p>If you are using <a href="{@docRoot}tools/support-library/index.html">
 Android Support Library</a> revision 22.2, be aware that floating toolbars are not
-backward-compatible and appcompat takes control over {@link android.view.ActionMode} objects bywith th
+backward-compatible and appcompat takes control over {@link android.view.ActionMode} objects by
 default. This prevents floating toolbars from being displayed. To enable
 {@link android.view.ActionMode} support in an
 {@link android.support.v7.app.AppCompatActivity}, call
diff --git a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/land_back.png b/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/land_back.png
deleted file mode 100644
index 697fb7d..0000000
--- a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/land_back.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/land_fore.png b/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/land_fore.png
deleted file mode 100644
index 735262f..0000000
--- a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/land_fore.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/land_shadow.png b/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/land_shadow.png
deleted file mode 100644
index cfb7952..0000000
--- a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/land_shadow.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/port_back.png b/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/port_back.png
deleted file mode 100644
index 5bb815a..0000000
--- a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/port_back.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/port_fore.png b/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/port_fore.png
deleted file mode 100644
index 1be3b21..0000000
--- a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/port_fore.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/port_shadow.png b/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/port_shadow.png
deleted file mode 100644
index 7e8aff2..0000000
--- a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/port_shadow.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/thumb.png b/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/thumb.png
deleted file mode 100644
index b5db82e..0000000
--- a/docs/html/distribute/tools/promote/device-art-resources/nexus_7_2012/thumb.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/distribute/tools/promote/device-art.jd b/docs/html/distribute/tools/promote/device-art.jd
index f1986fa..9b4dd14 100644
--- a/docs/html/distribute/tools/promote/device-art.jd
+++ b/docs/html/distribute/tools/promote/device-art.jd
@@ -235,7 +235,22 @@
       landOffset: [579,321],
       portRes: ['shadow', 'back', 'fore'],
       portOffset: [312,579],
-      portSize: [1440, 2560],
+      portSize: [1440, 2560]
+    },
+    {
+      id: 'nexus_7',
+      title: 'Nexus 7',
+      url: 'http://www.google.com/nexus/7/',
+      physicalSize: 7,
+      physicalHeight: 8,
+      actualResolution: [1200,1920],
+      density: 'XHDPI',
+      landRes: ['shadow', 'back', 'fore'],
+      landOffset: [326,245],
+      portRes: ['shadow', 'back', 'fore'],
+      portOffset: [244,326],
+      portSize: [800,1280],
+      archived: true
     },
     {
       id: 'nexus_9',
@@ -267,20 +282,6 @@
       archived: true
     },
     {
-      id: 'nexus_7_2012',
-      title: 'Nexus 7 (2012)',
-      url: 'https://www.google.com/nexus/7/',
-      physicalSize: 7,
-      physicalHeight: 7.81,
-      density: '213dpi',
-      landRes: ['shadow', 'back', 'fore'],
-      landOffset: [315,270],
-      portRes: ['shadow', 'back', 'fore'],
-      portOffset: [264,311],
-      portSize: [800,1280],
-      archived: true
-    },
-    {
       id: 'nexus_4',
       title: 'Nexus 4',
       url: 'https://www.google.com/nexus/4/',
diff --git a/docs/html/guide/topics/resources/drawable-resource.jd b/docs/html/guide/topics/resources/drawable-resource.jd
index 74727fb..f974a5fe 100644
--- a/docs/html/guide/topics/resources/drawable-resource.jd
+++ b/docs/html/guide/topics/resources/drawable-resource.jd
@@ -8,6 +8,7 @@
     <h2>See also</h2>
     <ol>
       <li><a href="{@docRoot}guide/topics/graphics/2d-graphics.html">2D Graphics</a></li>
+      <li><a href="{@docRoot}tools/help/vector-asset-studio.html">Vector Asset Studio</a></li>
     </ol>
   </div>
 </div>
diff --git a/docs/html/images/tools/vas-codepreview.png b/docs/html/images/tools/vas-codepreview.png
new file mode 100644
index 0000000..ea8482c
--- /dev/null
+++ b/docs/html/images/tools/vas-codepreview.png
Binary files differ
diff --git a/docs/html/images/tools/vas-imageincode.png b/docs/html/images/tools/vas-imageincode.png
new file mode 100644
index 0000000..8295cfa
--- /dev/null
+++ b/docs/html/images/tools/vas-imageincode.png
Binary files differ
diff --git a/docs/html/images/tools/vas-layout.png b/docs/html/images/tools/vas-layout.png
new file mode 100644
index 0000000..f70461b
--- /dev/null
+++ b/docs/html/images/tools/vas-layout.png
Binary files differ
diff --git a/docs/html/images/tools/vas-materialicon.png b/docs/html/images/tools/vas-materialicon.png
new file mode 100644
index 0000000..d04a831
--- /dev/null
+++ b/docs/html/images/tools/vas-materialicon.png
Binary files differ
diff --git a/docs/html/images/tools/vas-rtl.png b/docs/html/images/tools/vas-rtl.png
new file mode 100644
index 0000000..0d45b94
--- /dev/null
+++ b/docs/html/images/tools/vas-rtl.png
Binary files differ
diff --git a/docs/html/images/tools/vas-rtlmenu.png b/docs/html/images/tools/vas-rtlmenu.png
new file mode 100644
index 0000000..aaf95de
--- /dev/null
+++ b/docs/html/images/tools/vas-rtlmenu.png
Binary files differ
diff --git a/docs/html/images/tools/vas-svgerror.png b/docs/html/images/tools/vas-svgerror.png
new file mode 100644
index 0000000..8c85247
--- /dev/null
+++ b/docs/html/images/tools/vas-svgerror.png
Binary files differ
diff --git a/docs/html/jd_collections.js b/docs/html/jd_collections.js
index 8b21984..9f39602 100644
--- a/docs/html/jd_collections.js
+++ b/docs/html/jd_collections.js
@@ -1409,14 +1409,6 @@
       "https://support.google.com/googleplay/answer/2651410"
     ]
   },
-  "marshmallow/landing/resources": {
-    "title": "",
-    "resources": [
-      "about/versions/marshmallow/android-6.0-changes.html",
-      "about/versions/marshmallow/android-6.0.html",
-      "about/versions/marshmallow/samples.html"
-    ]
-  },
   "autolanding": {
     "title": "",
     "resources": [
@@ -1643,9 +1635,9 @@
   "marshmallow/landing/resources": {
     "title": "",
     "resources": [
-       "about/versions/marshmallow/android-6.0-changes.html",
        "about/versions/marshmallow/android-6.0.html",
-       "about/versions/marshmallow/samples.html"
+       "about/versions/marshmallow/samples.html",
+       "https://developers.google.com/android/nexus/images"
     ]
   },
   "marshmallow/landing/videos": {
diff --git a/docs/html/jd_extras.js b/docs/html/jd_extras.js
index be24220..dda5277 100644
--- a/docs/html/jd_extras.js
+++ b/docs/html/jd_extras.js
@@ -584,6 +584,19 @@
     "titleFriendly": ""
   },
   {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://developers.google.com/android/nexus/images",
+    "timestamp": 1194884220000,
+    "image": "images/cards/card-download_16-9_2x.png",
+    "title": "System Images",
+    "summary": "Download system images for Marshmallow.",
+    "keywords": [],
+    "type": "support",
+    "titleFriendly": ""
+  },
+  {
     "lang": "zh-cn",
     "group": "",
     "tags": [],
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index bbbf86a..b274738 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -31,22 +31,22 @@
 
 
 
-sdk.linux_download=android-sdk_r24.4-linux.tgz
-sdk.linux_bytes=320008735
-sdk.linux_checksum=eec87cdb9778718e4073b4ca326a46cdd084f901
+sdk.linux_download=android-sdk_r24.4.1-linux.tgz
+sdk.linux_bytes=326412652
+sdk.linux_checksum=725bb360f0f7d04eaccff5a2d57abdd49061326d
 
-sdk.mac_download=android-sdk_r24.4-macosx.zip
-sdk.mac_bytes=101886955
-sdk.mac_checksum=a9b6f025a9691aef430b19b52e01844dbbcbf6b4
+sdk.mac_download=android-sdk_r24.4.1-macosx.zip
+sdk.mac_bytes=102781947
+sdk.mac_checksum=85a9cccb0b1f9e6f1f616335c5f07107553840cd
 
-sdk.win_download=android-sdk_r24.4-windows.zip
-sdk.win_bytes=197290202
-sdk.win_checksum=6ab463b85544398c20ab5520f380af7d91379864
+sdk.win_download=android-sdk_r24.4.1-windows.zip
+sdk.win_bytes=199701062
+sdk.win_checksum=66b6a6433053c152b22bf8cab19c0f3fef4eba49
 
 
-sdk.win_installer=installer_r24.4-windows.exe
-sdk.win_installer_bytes=149239901
-sdk.win_installer_checksum=c82ae81c0437a230c2fc0ab4fc7915942a6b3afb
+sdk.win_installer=installer_r24.4.1-windows.exe
+sdk.win_installer_bytes=151659917
+sdk.win_installer_checksum=f9b59d72413649d31e633207e31f456443e7ea0b
 
 
 
diff --git a/docs/html/support.jd b/docs/html/support.jd
index 94d6478..9ef4a16 100644
--- a/docs/html/support.jd
+++ b/docs/html/support.jd
@@ -42,8 +42,6 @@
   <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>
diff --git a/docs/html/tools/help/index.jd b/docs/html/tools/help/index.jd
index f90d029..d49a279 100644
--- a/docs/html/tools/help/index.jd
+++ b/docs/html/tools/help/index.jd
@@ -134,6 +134,10 @@
 WYSIWYG editor. It also previews stretched versions of the image, and highlights the area in which
 content is allowed.</dd>
 
+<dt><a href="{@docRoot}tools/help/vector-asset-studio.html">Vector Asset Studio</a></dt>
+    <dd>Helps you add material icons and import Scalable Vector Graphic (SVG) files into your
+    Android Studio project as a drawable resource.</dd>
+
   <dt><a href="{@docRoot}tools/help/etc1tool.html">etc1tool</a></dt>
     <dd>A command line utility that lets you encode PNG images to the ETC1 compression standard and
     decode ETC1 compressed images back to PNG.</dd>
diff --git a/docs/html/tools/help/vector-asset-studio.jd b/docs/html/tools/help/vector-asset-studio.jd
new file mode 100644
index 0000000..58e53cc
--- /dev/null
+++ b/docs/html/tools/help/vector-asset-studio.jd
@@ -0,0 +1,487 @@
+page.title=Vector Asset Studio
+parent.title=Tools
+parent.link=index.html
+page.tags=vector
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+<ol>
+  <li><a href="#about">About Vector Asset Studio</a></li>
+  <li><a href="#running">Running Vector Asset Studio</a></li>
+  <li><a href="#importing">Importing a Vector Graphic</a></li>
+  <li><a href="#layout">Adding a Vector Drawable to a Layout</a></li>
+  <li><a href="#referring">Referring to a Vector Drawable in Code</a></li>
+  <li><a href="#code">Modifying XML Code Generated by Vector Asset Studio</a></li>
+  <li><a href="#delete">Deleting a Vector Asset from a Project</a></li>
+  <li><a href="#apk">Delivering an App Containing Vector Drawables</a></li>
+</ol>
+
+ <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}training/material/drawables.html#VectorDrawables">Create Vector Drawables</a></li>
+    <li><a href="http://www.google.com/design/icons" class="external-link">Material Icons</a></li>
+    <li><a href="{@docRoot}reference/android/graphics/drawable/Drawable.html">Drawable Class</a></li>
+    <li><a href="{@docRoot}reference/android/graphics/drawable/VectorDrawable.html">VectorDrawable Class</a></li>
+  </ol>
+
+  <h2>Videos</h2>
+  <ol>
+    <li><a href="http://www.youtube.com/watch?t=126&v=wlFVIIstKmA" class="external-link">DevBytes: Android Vector Graphics</a></li>
+    <li><a href="http://www.youtube.com/watch?v=8e3I-PYJNHg" class="external-link">Android Studio Support for Vector Graphics</a></li>
+  </ol>
+
+  <h2>Dependencies and Prerequisites</h2>
+  <ul>
+    <li>Gradle 1.4.0 or higher</li>
+  </ul>
+
+</div>
+</div>
+
+<p>Vector Asset Studio helps you add material icons
+and import Scalable Vector Graphic (SVG) files into your app project as a drawable resource.
+Compared to raster images, vector drawables can reduce the size of your app and be resized without
+loss of image quality. They help you to more easily support different Android devices with varying
+screen sizes and resolutions because you can display one vector drawable on all of them. </p>
+
+<h2 id="about">About Vector Asset Studio</h2>
+
+<p>Vector Asset Studio adds a vector graphic to the project as an XML file that describes the image.
+Maintaining one XML file can be easier than updating multiple raster graphics at various resolutions.</p>
+
+<p>Android 4.4 (API level 20) and lower doesn't support vector drawables. If your minimum API level
+is set at one of these API levels, Vector Asset Studio also directs Gradle to generate raster images
+of the vector drawable for backward-compatibility. You can refer to vector assets as
+{@link android.graphics.drawable.Drawable} in Java code or <code>@drawable</code> in XML code; when
+your app runs, the corresponding vector or raster image displays automatically depending on the API
+level.</p>
+
+
+<h3 id="types">Supported vector graphic types</h3>
+
+<p>The Google material design specification provides <a href="http://www.google.com/design/icons" class="external-link">material icons</a>
+that you can use in your Android apps. Vector
+Asset Studio helps you choose, import, and size material icons, as well as define opacity and the
+Right-to-Left (RTL) mirroring setting.</p>
+
+<p>Vector Asset Studio also helps you to import your own SVG files. SVG is an XML-based open
+standard of the World Wide Web Consortium (W3C). Vector Asset Studio supports the essential
+standard, but not all features. When you specify an SVG file, Vector Asset Studio gives immediate
+feedback about whether the graphics code is supported or not. If the SVG code is supported, it
+converts the file into an XML file containing {@link
+android.graphics.drawable.VectorDrawable} code.</p>
+
+<h3 id="when">Considerations for SVG files</h3>
+
+<p>A vector drawable is appropriate for simple icons. The
+<a href="http://www.google.com/design/icons" class="external-link">material icons</a> provide good
+examples of the types
+of images that work well as vector drawables in an app. In contrast, many app launch icons do have
+many details, so they work better as raster images.</p>
+
+<p>The initial loading of a vector graphic can cost more CPU cycles than the corresponding raster
+image. Afterward, memory use and performance are similar between the two. We recommend that you
+limit a vector image to a maximum of 200 x 200 dp; otherwise, it can take too long to draw.</p>
+
+<p>Although vector drawables do support one or more colors, in many cases it makes sense to color
+icons black (<code>android:fillColor="#FF000000"</code>). Using this approach, you can add a
+<a href="{@docRoot}training/material/drawables.html#DrawableTint">tint</a> to the vector drawable
+that you placed in a layout, and the icon color changes to the tint color. If the icon color
+isn't black, the icon color might instead blend with the tint color.</p>
+
+<h3 id="apilevel">Vector drawable support at different API levels</h3>
+
+<p>Android 5.0 (API level 21) and higher provides vector drawable support. If your app has a
+minimum API level that is lower, Vector Asset Studio adds the vector drawable file to your
+project; also, at build time, Gradle creates Portable Network Graphic (PNG) raster images at various
+resolutions. Gradle generates the PNG densities specified by the Domain Specific Language (DSL)
+<a href="http://google.github.io/android-gradle-dsl/1.4/com.android.build.gradle.internal.dsl.ProductFlavor.html#com.android.build.gradle.internal.dsl.ProductFlavor:generatedDensities" class="external-link">generatedDensities</a> property
+in a <code>build.gradle</code> file. To generate PNGs, the build system requires Gradle 1.4.0 or higher.</p>
+
+<p>For Android 5.0 (API level 21) and higher, Vector Asset Studio supports all of the {@link
+android.graphics.drawable.VectorDrawable} elements. For backward compatibility with Android 4.4 (API
+level 20) and lower, Vector Asset Studio supports the following XML elements:</p>
+
+<div class="wrap">
+  <div class="cols">
+    <div class="col-1of2">
+
+<p><code>&lt;vector></code></p>
+<ul>
+  <li><code>android:width</code></li>
+  <li><code>android:height</code></li>
+  <li><code>android:viewportWidth</code></li>
+  <li><code>android:viewportHeight</code></li>
+  <li><code>android:alpha</code></li>
+</ul>
+
+</div>
+
+
+<div class="col-1of2">
+
+<p><code>&lt;path></code></p>
+<ul>
+  <li><code>android:pathData</code></li>
+  <li><code>android:fillColor</code></li>
+  <li><code>android:strokeColor</code></li>
+  <li><code>android:strokeWidth</code></li>
+  <li><code>android:strokeAlpha</code></li>
+  <li><code>android:fillAlpha</code></li>
+</ul>
+
+</div>
+
+</div>
+</div>
+
+<p>Only Android 5.0 (API level 21) and higher supports dynamic attributes, for example, <code>android:fillColor="?android:attr/colorControlNormal"</code>.</p>
+
+<p>You can change the XML code that Vector Asset Studio generates, although it’s not a best practice.
+Changing the values in the code should not cause any issues, as long as they’re valid and static. If
+you want to add XML elements, you need to make sure that they’re supported based on your minimum API
+level.</p>
+
+<p>For Android 5.0 (API level 21) and higher, you can use the {@link
+android.graphics.drawable.AnimatedVectorDrawable} class to animate the properties of {@link
+android.graphics.drawable.VectorDrawable}. For more information, see
+<a href="{@docRoot}training/material/animations.html#AnimVector">Animating Vector Drawables</a>.</p>
+
+<h2 id="running">Running Vector Asset Studio</h2>
+
+<p>Follow these steps to start Vector Asset Studio:</p>
+
+<ol>
+  <li>In Android Studio, open an Android app project.</li>
+  <li>In the <em>Project</em> window, select the
+  <a href="{@docRoot}sdk/installing/create-project.html#ProjectView">Android view</a>.</li>
+  <li>Right-click the <strong>res</strong> folder and select <strong>New</strong> >
+  <strong>Vector Asset</strong>.</li>
+  <p>Some other project views and folders have this menu item as well.</p>
+  <p>Vector Asset Studio appears.</p>
+  <img src="{@docRoot}images/tools/vas-materialicon.png" />
+  <li>If a <em>Need newer Android plugin for Gradle</em> dialog appears instead, correct
+  your Gradle version as follows.</li>
+    <ol type="a">
+      <li>Select <strong>File</strong> > <strong>Project Structure</strong>.</li>
+      <li>In the <em>Project Structure</em> dialog, select <strong>Project</strong>.</li>
+      <li>In the <strong>Android Plugin Version</strong> field, change the Gradle version to
+      <strong>1.4.0</strong> or higher, and click <strong>OK</strong>.</li>
+      <p>Gradle syncs the project.</p>
+      <li>In the <a href="{@docRoot}sdk/installing/create-project.html#ProjectView">Android view</a>
+      of the <em>Project</em> window, right-click the <strong>res</strong> folder and select
+      <strong>New</strong> > <strong>Vector Asset</strong>.</li>
+      <p>Vector Asset Studio appears.</p>
+    </ol>
+  <li>Continue with <a href="#importing">Importing a Vector Graphic</a>.</li>
+</ol>
+
+<h2 id="importing">Importing a Vector Graphic</h2>
+
+<p>Vector Asset Studio helps you to import a vector graphics file into your app project. Follow one
+  of the following procedures:</p>
+<ul>
+  <li><a href="#materialicon">Adding a material icon</a></li>
+  <li><a href="#svg">Importing an SVG file</a></li>
+</ul>
+
+<h3 id="materialicon">Adding a material icon</h3>
+
+<p>After you <a href="#running">open Vector Asset Studio</a>, you can add a material icon as follows:</p>
+
+<ol>
+  <li>In Vector Asset Studio, select <strong>Material Icon</strong>.</li>
+  <li>Click <strong>Choose</strong>.</li>
+  <li>Select a material icon and click <strong>OK</strong>.</li>
+  <p>The icon appears in the <strong>Vector Drawable Preview</strong>.</p>
+  <li>Optionally change the resource name, size, opacity, and Right-To-Left (RTL) mirroring setting:
+    <ul>
+      <li><strong>Resource name</strong> - Type a new name if you don’t want to use the default name.
+      Vector Asset Studio automatically creates a unique name (adds a number to the end of the name)
+      if that resource name already exists in the project. The name can contain lowercase
+      characters, underscores, and digits only.</li>
+      <li><strong>Override default size from material design</strong> - Select this option if you
+      want to adjust the size of the image. When you type a new size, the change appears in the
+      preview area.</li>
+      <p>The default is 24 x 24 dp, which is defined in the
+      <a href="http://www.google.com/design/icons" class="external-link">material design</a>
+      specification. Deselect the checkbox to return to the default.</p>
+      <li><strong>Opacity</strong> - Use the slider to adjust the opacity of the image. The change
+      appears in the preview area.</li>
+      <li><strong>Enable auto mirroring for RTL layout</strong> - Select this option if you want a
+      mirror image to display when the layout is right to left, instead of left to right. For
+      example, some languages are read right to left; if you have an arrow icon, you might want to
+      display a mirror image of it in this case. Note that if you’re working with an older project,
+      you might also
+      need to add <code>android:supportsRtl="true"</code> to your app manifest. Auto-mirroring is
+      supported on Android 5.0 (API level 21) and higher only.</li>
+    </ul>
+  <li>Click <strong>Next</strong>.</li>
+  <li>Optionally change the module and resource directory:</li>
+   <ul>
+      <li><strong>Target Module</strong> - Select a module in the project where you want to add the
+      resource. For more information, see
+      <a href="{@docRoot}sdk/installing/create-project.html#CreatingAModule">Creating an Android Module</a>.</li>
+      <li><strong>Res Directory</strong> - Select the resource source set where you want to add the
+      vector asset: <code>src/main/res</code>, <code>src/debug/res</code>, <code>src/release/res</code>,
+      or a user-defined source set. The main source set applies to all build variants, including
+      debug and release. The debug and release source sets override the main source set and apply
+      to one version of a build. The debug source set is for debugging only. To define a new source
+      set, select <strong>File</strong> > <strong>Project Structure</strong> > <strong>app</strong> >
+      <strong>Build Types</strong>. For example, you could define a beta source set and create a
+      version of an icon that includes the text "BETA” in the bottom right corner. For more information, see
+      <a href="{@docRoot}tools/building/configuring-gradle.html#workBuildVariants">Working with Build Variants</a>.</li>
+    </ul>
+    <p>The <strong>Output Directories</strong> area displays the vector image and the directory
+    where it will appear.</p>
+  <li>Click <strong>Finish</strong>.</li>
+  <p>Vector Asset Studio adds an XML file defining the vector drawable to the project in the
+  <code>app/src/main/res/drawable/</code> folder. From the
+  <a href="{@docRoot}sdk/installing/create-project.html#ProjectView">Android view</a> of the <em>Project</em>
+  window, you can view the generated vector XML file in the <strong>drawable</strong> folder.</p>
+  <li>Build the project.</li>
+  <p>If the minimum API level is Android 4.4 (API level 20) and lower, Vector Asset Studio generates
+  PNG files. From the <a href="{@docRoot}sdk/installing/create-project.html#ProjectView">Project view</a>
+  of the <em>Project</em> window, you can view the generated PNG and XML files in the
+  <code>app/build/generated/res/pngs/debug/</code> folder.</p>
+  <p>You should not edit these generated raster files, but instead work with the vector XML file. The
+  build system regenerates the raster files automatically when needed so you don’t need to maintain
+  them.</p>
+</ol>
+
+<h3 id="svg">Importing a Scalable Vector Graphic (SVG)</h3>
+
+<p>After you <a href="#running">open Vector Asset Studio</a>, you can import an SVG file as follows:</p>
+
+<ol>
+  <li>In Vector Asset Studio, select <strong>Local SVG file</strong>.</li>
+  <p>The file must be on a local drive. If it’s located on the network, for example, you need to
+  download it to a local drive first.</p>
+  <li>Specify an <strong>Image file</strong> by clicking <strong>…</strong> .</li>
+  <p>The image appears in the <strong>Vector Drawable Preview</strong>.</p>
+  <p>However, if the SVG file contains unsupported features, an error appears at the bottom left of
+  Vector Asset Studio, as shown in the following figure.</p>
+  <img src="{@docRoot}images/tools/vas-svgerror.png" />
+  <p>In this case, you can’t use Vector Asset Studio to add the graphics file. Click
+    <strong>More</strong> to view the errors. For a list of supported elements, see
+  <a href="#apilevel">Vector Drawable Support at Different API Levels</a>.</p>
+  <li>Optionally change the resource name, size, opacity, and Right-To-Left (RTL) mirroring setting:</li>
+    <ul>
+      <li><strong>Resource name</strong> - Type a new name if you don’t want to use the default
+      name. Vector Asset Studio automatically creates a unique name (adds a number to the end of the
+      name) if that resource name already exists in the project. The name can contain lowercase
+      characters, underscores, and digits only.</li>
+      <li><strong>Override default size from material design</strong> - Select this option if you
+      want to adjust the size of the image. After you select it, the size changes to the size of the
+      image itself. Whenever you change the size, the change appears in the preview area.</li>
+      <p>The default is 24 x 24 dp, which is defined in the
+      <a href="http://www.google.com/design/icons" class="external-link">material design</a>
+      specification. Deselect the checkbox to return to the default.</p>
+      <li><strong>Opacity</strong> - Use the slider to adjust the opacity of the image. The change
+      appears in the preview area.</li>
+      <li><strong>Enable auto mirroring for RTL layout</strong> - Select this option if you want a
+      mirror image to display when the layout is right to left, instead of left to right. For
+      example, some languages are read right to left; if you have an arrow icon, you might want to
+      display a mirror image of it in this case. Note that if you’re working with an older project,
+      you might
+      need to add <code>android:supportsRtl="true"</code> to your app manifest.  Auto-mirroring is
+      supported on Android 5.0 (API level 21) and higher only.</li>
+    </ul>
+  <li>Click <strong>Next</strong>.</li>
+  <li>Optionally change the module and resource directory:</li>
+  <ul>
+      <li><strong>Target Module</strong> - Select a module in the project where you want to add the
+      resource. For more information, see
+      <a href="{@docRoot}sdk/installing/create-project.html#CreatingAModule">Creating an Android Module</a>.</li>
+      <li><strong>Res Directory</strong> - Select the resource source set where you want to add the
+      vector asset: <code>src/main/res</code>, <code>src/debug/res</code>, <code>src/release/res</code>,
+      or a user-defined source set. The main source set applies to all build variants, including
+      debug and release. The debug and release source sets override the main source set and apply
+      to one version of a build. The debug source set is for debugging only. To define a new source
+      set, select <strong>File</strong> > <strong>Project Structure</strong> > <strong>app</strong> >
+      <strong>Build Types</strong>. For example, you could define a beta source set and create a
+      version of an icon that includes the text "BETA” in the bottom right corner. For more information, see
+      <a href="{@docRoot}tools/building/configuring-gradle.html#workBuildVariants">Working with Build Variants</a>.</li>
+    </ul>
+    <p>The <strong>Output Directories</strong> area displays the vector image and the directory
+    where it will appear.</p>
+  <li>Click <strong>Finish</strong>.</li>
+  <p>Vector Asset Studio adds an XML file defining the vector drawable to the project in the
+  <code>app/src/main/res/drawable/</code> folder. From the
+  <a href="{@docRoot}sdk/installing/create-project.html#ProjectView">Android view</a> of the <em>Project</em>
+  window, you can view the generated vector XML file in the <strong>drawable</strong> folder.</p>
+  <li>Build the project.</li>
+  <p>If the minimum API level is Android 4.4 (API level 20) and lower, Vector Asset Studio generates
+  PNG files. From the <a href="{@docRoot}sdk/installing/create-project.html#ProjectView">Project view</a>
+  of the <em>Project</em> window, you can view the generated PNG and XML files in the
+  <code>app/build/generated/res/pngs/debug/</code> folder.</p>
+  <p>You should not edit these generated raster files, but instead work with the vector XML file. The
+  build system regenerates the raster files automatically when needed so you don’t need to maintain
+  them.</p>
+</ol>
+
+<h2 id="layout">Adding a Vector Drawable to a Layout</h2>
+
+<p>In a layout file, you can set any icon-related widget, such as {@link android.widget.ImageButton},
+{@link android.widget.ImageView}, and so on, to point to a vector asset. For example, the following
+layout shows a vector asset displayed on a button:</p>
+
+<img src="{@docRoot}images/tools/vas-layout.png" />
+
+<p>Follow these steps to display a vector asset on a widget, as shown in the figure:</p>
+
+<ol>
+  <li>Open a project and <a href="#running">import a vector asset</a>.</li>
+  <li>In the <a href="{@docRoot}sdk/installing/create-project.html#ProjectView">Android view</a> of
+  the <em>Project</em> window, double-click a layout XML file, such as <code>content_main.xml</code>.</li>
+  <li>Click the <strong>Design</strong> tab to display the
+  <a href="{@docRoot}sdk/installing/studio-layout.html">Layout Editor</a>.</li>
+  <li>Drag the {@link
+android.widget.ImageButton} widget from the <em>Palette</em> window onto the Layout Editor.</li>
+  <li>In the <em>Properties</em> window, locate the <strong>src</strong> property of the
+  <code>ImageButton</code> instance and click <strong>…</strong> .</li>
+  <li>In the <em>Resources</em> dialog, select the <strong>Project</strong> tab, navigate to the
+    <strong>Drawable</strong> folder, and select a vector asset. Click <strong>OK</strong>.</li>
+  <p>The vector asset appears on the <code>ImageButton</code> in the layout.</p>
+  <li>To change the color of the image to the accent color defined in the theme, locate the
+  <strong>tint</strong> property in the <em>Properties</em> window and click <strong>…</strong> .</li>
+  <li>In the <em>Resources</em> dialog, select the <strong>Project</strong> tab, navigate to the
+  <strong>Color</strong> folder, and select <strong>colorAccent</strong>. Click <strong>OK</strong>.</li>
+  <p>The color of the image changes to the accent color in the layout.</p>
+</ol>
+
+<p>The <code>ImageButton</code> code should be similar to the following:</p>
+
+<pre>
+&lt;ImageButton
+  android:id="@+id/imageButton"
+  android:src="@drawable/ic_build_24dp"
+  android:tint="@color/colorAccent"
+  android:layout_width="wrap_content"
+  android:layout_height="wrap_content"
+  android:layout_below="@+id/textView2"
+  android:layout_marginTop="168dp" />
+</pre>
+
+<h2 id="referring">Referring to a Vector Drawable in Code</h2>
+
+<p>You can normally refer to a vector drawable resource in a generic way in your code, and when
+your app runs, the corresponding vector or raster image displays automatically depending on the API
+level:</p>
+
+<ul>
+  <li>In most cases, you can refer to vector assets as <code>@drawable</code> in XML code or
+    {@link android.graphics.drawable.Drawable} in Java code. </li>
+  <p>For example, the following layout XML code applies the image to a view:</p>
+<pre>
+&lt;ImageView
+    android:layout_height="wrap_content"
+    android:layout_width="wrap_content"
+    android:src="@drawable/myimage" />
+</pre>
+  <p>The following Java code retrieves the image as a {@link android.graphics.drawable.Drawable}:</p>
+<pre>
+Resources res = {@link android.content.Context#getResources()};
+Drawable drawable = res.{@link android.content.res.Resources#getDrawable(int) getDrawable}(R.drawable.myimage);
+</pre>
+  <li>Occasionally, you might need to typecast the drawable resource to its exact class, such as
+  when you need to use specific features of the {@link android.graphics.drawable.VectorDrawable}
+  class. To do so, you could use Java code such as the following:</li>
+<pre>
+if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+   VectorDrawable vectorDrawable =  (VectorDrawable) drawable;
+} else {
+   BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
+}
+</pre>
+</ul>
+
+
+<h2 id="code">Modifying XML Code Generated by Vector Asset Studio</h2>
+
+<p>You can modify the vector asset XML code, but not the PNGs and corresponding XML code generated
+at build time. However, we don't recommended it. Vector Asset Studio makes sure that the vector
+drawable and the PNGs match, and that the manifest contains the proper code. If you add code that's
+<a href="#apilevel">not supported</a> on Android 4.4 (API level 20) and lower, your vector and PNG
+images might differ. You also need to make sure that the manifest contains the code to support your
+changes.</p>
+
+<p>Follow these steps to modify the vector XML file:</p>
+
+<ol>
+  <li>In the <em>Project</em> window, double-click the generated vector XML file in the
+  <strong>drawable</strong> folder.</li>
+  <p>The XML file appears in the editor and <em>Preview</em> windows.</p>
+
+  <img src="{@docRoot}images/tools/vas-codepreview.png" />
+
+  <li>Edit the XML code based on what’s supported by the minimum API level:</li>
+    <ul>
+      <li>Android 5.0 (API level 21) and higher - Vector Asset Studio supports all of the
+      {@link android.graphics.drawable.Drawable} and
+      {@link android.graphics.drawable.VectorDrawable} elements. You can add XML elements and
+      change values.</li>
+      <li>Android 4.4 (API level 20) and lower - Vector Asset Studio supports all of the
+      {@link android.graphics.drawable.Drawable} elements and a subset of the
+      {@link android.graphics.drawable.VectorDrawable} elements. See
+      <a href="#apilevel">Support at Different API Levels</a> for a list. You can change values in
+      the generated code and add XML elements that are supported. Dynamic attributes aren't
+      supported.</li>
+   </ul>
+  <p>For example, if you didn’t select the RTL option in Vector Asset Studio but realize you now
+  need it, you can add the <a href="{@docRoot}reference/android/R.attr.html#autoMirrored">autoMirrored</a>
+  attribute later. To view the RTL version, select <strong>Preview Right-to-Left Layout</strong> in
+  the <img src="{@docRoot}images/tools/vas-rtlmenu.png" style="vertical-align:sub;margin:0;height:17px" alt="" />
+  menu of the <em>Preview</em> window. (Select <strong>None</strong> to remove the RTL preview.)</p>
+<img src="{@docRoot}images/tools/vas-rtl.png" />
+  <p class="note"><strong>Note:</strong> If you’re working with an older project, you might need to
+  add <code>android:supportsRtl="true"</code> to your app manifest. Also, because
+  <code>autoMirrored</code> is a dynamic attribute, it's supported on Android 5.0 (API level 21) and
+  higher only.</p>
+  <li>Build the project and check that the vector and raster images look the same.</li>
+  <p>Remember that the generated PNGs could display differently in the <em>Preview</em> window than
+  in the app due to different rendering engines and any changes made to the vector drawable before a
+  build. If you add code to the vector XML file created by Vector Asset Studio, any features
+  unsupported in Android 4.4 (API level 20) and lower don't appear in the generated PNG files. As a
+  result, when you add code, you should always check that the generated PNGs match the vector
+  drawable. To do so, you could double-click the PNG in the
+  <a href="{@docRoot}sdk/installing/create-project.html#ProjectView">Project view</a> of the <em>Project</em>
+  window; the left margin of the code editor also displays the PNG image when your code refers to
+  the drawable.</p>
+  <img src="{@docRoot}images/tools/vas-imageincode.png" />
+</ol>
+
+
+<h2 id="delete">Deleting a Vector Asset from a Project</h2>
+
+<p>Follow these steps to remove a vector asset from a project:</p>
+
+<ol>
+  <li>In the <em>Project</em> window, delete the generated vector XML file by selecting the file and
+  pressing the <strong>Delete</strong> key (or select <strong>Edit</strong> > <strong>Delete</strong>).</li>
+  <p>The <em>Safe Delete</em> dialog appears.</p>
+  <li>Optionally select options to find where the file is used in the project, and click
+  <strong>OK</strong>.</li>
+  <p>Android Studio deletes the file from the project and the drive. However, if you chose to search
+  for places in the project where the file is used and some usages are found, you can view them and
+  decide whether to delete the file.</p>
+  <li>Select <strong>Build</strong> > <strong>Clean Project</strong>.</li>
+  <p>Any auto-generated PNG and XML files corresponding to the deleted vector
+  asset are removed from the project and the drive.</p>
+</ol>
+
+<h2 id="apk">Delivering an App Containing Vector Drawables</h2>
+
+<p>When your minimum API level includes Android 4.4 (API level 20) or lower, you have corresponding
+  vector and raster images in your project. In this case, you have two options for delivering your
+  APK files:</p>
+
+<ul>
+  <li>Create one APK that includes both the vector images and the corresponding raster
+    representations. This is the easiest solution.</li>
+  <li>Create separate APKs for different API levels. When you don’t include the corresponding
+    raster images in the APK for Android 5.0 (API level 21) and higher, the APK can be much smaller in
+    size. For more information, see <a href="{@docRoot}google/play/publishing/multiple-apks.html">Multiple APK Support</a>.</li>
+</ul>
diff --git a/docs/html/tools/sdk/tools-notes.jd b/docs/html/tools/sdk/tools-notes.jd
index 8c27784..3859ecf 100644
--- a/docs/html/tools/sdk/tools-notes.jd
+++ b/docs/html/tools/sdk/tools-notes.jd
@@ -26,6 +26,40 @@
 <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=""/>SDK Tools, Revision 24.4.1</a> <em>(October 2015)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+
+    <dl>
+    <dt>Dependencies:</dt>
+
+    <dd>
+      <ul>
+        <li>Android SDK Platform-tools revision 23 or later.</li>
+      </ul>
+    </dd>
+
+    <dt>General Notes:</dt>
+    <dd>
+      <ul>
+        <li>Fixed a problem where the emulator title bar was hidden off screen.
+        (<a href="http://code.google.com/p/android/issues/detail?id=178344">Issue 178344</a>)</li>
+        <li>Enabled the emulator to resize the user data partition by including e2fsprogs binaries.
+        (<a href="http://code.google.com/p/android/issues/detail?id=189030">Issue 189030</a>)</li>
+        <li>Fixed a regression on the 32-bit Windows OS where the emulator fails to boot Android 6.0
+        (API level 23) through Android 5.0 (API level 21) system images.
+        (<a href="http://code.google.com/p/android/issues/detail?id=188326">Issue 188326</a>)</li>
+      </ul>
+    </dd>
+
+  </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=""/>SDK Tools, Revision 24.4.0</a> <em>(October 2015)</em>
   </p>
 
diff --git a/docs/html/tools/tools_toc.cs b/docs/html/tools/tools_toc.cs
index 969ca4a..d183f42 100644
--- a/docs/html/tools/tools_toc.cs
+++ b/docs/html/tools/tools_toc.cs
@@ -176,6 +176,7 @@
        <li><a href="<?cs var:toroot ?>tools/help/systrace.html">Systrace</a></li>
        <li><a href="<?cs var:toroot ?>tools/help/gltracer.html">Tracer for OpenGL ES</a></li>
        <li><a href="<?cs var:toroot ?>tools/help/traceview.html">Traceview</a></li>
+       <li><a href="<?cs var:toroot ?>tools/help/vector-asset-studio.html">Vector Asset Studio</a></li>
        <li><a href="<?cs var:toroot ?>tools/help/zipalign.html">zipalign</a></li>
     </ul>
   </li>
diff --git a/docs/html/training/auto/audio/index.jd b/docs/html/training/auto/audio/index.jd
index f5a797c..68aff75 100644
--- a/docs/html/training/auto/audio/index.jd
+++ b/docs/html/training/auto/audio/index.jd
@@ -29,8 +29,8 @@
     <ul>
       <li><a href="{@docRoot}samples/MediaBrowserService/index.html">
         MediaBrowserService</a></li>
-      <li><a href="//github.com/googlesamples/android-UniversalMusicPlayer">Universal Media
-      Player</a></li>
+      <li><a href="//github.com/googlesamples/android-UniversalMusicPlayer"
+        class="external-link">Universal Media Player</a></li>
     </ul>
 
     <h2>See Also</h2>
@@ -290,13 +290,20 @@
 
 <p>Your implementation of {@link android.service.media.MediaBrowserService#onGetRoot
 onGetRoot()} returns information about the root node of the menu
-hierarchy. This root node is the parent of the top items your browse hierarchy.
+hierarchy. This root node is the parent of the top items of your browse hierarchy.
 The method is passed information about the calling client. You can use this
 information to decide if the client should have access to your content at all.
 For example, if you want to limit your app's content to a list of approved
-clients, you can compare the passed {@code clientPackageName} to your whitelist.
-If the caller isn't an approved package, you can return null to deny access to
-your content.</p>
+clients, you can compare the passed {@code clientPackageName} to your whitelist
+and verify the certificate used to sign the caller's APK.
+If the caller can't be verified to be an approved package, return null to deny access to
+your content. For an example of an app that validates that the caller is an
+approved app, see the
+<a href="https://github.com/googlesamples/android-UniversalMusicPlayer/blob/master/mobile/src/main/java/com/example/android/uamp/PackageValidator.java"
+class="external-link"><code>PackageValidator</code></a> class in the
+<a href="https://github.com/googlesamples/android-UniversalMusicPlayer"
+class="external-link">Universal Android Music Player</a> sample app.
+</p>
 
 <p>A typical implementation of {@link
 android.service.media.MediaBrowserService#onGetRoot onGetRoot()} might
@@ -307,28 +314,23 @@
 public BrowserRoot onGetRoot(String clientPackageName, int clientUid,
     Bundle rootHints) {
 
-    // To ensure you are not allowing any arbitrary app to browse your app's
-    // contents, you need to check the origin:
-    if (!PackageValidator.isCallerAllowed(this, clientPackageName, clientUid)) {
+    // Verify that the specified package is allowed to access your
+    // content! You'll need to write your own logic to do this.
+    if (!isValid(clientPackageName, clientUid)) {
         // If the request comes from an untrusted package, return null.
         // No further calls will be made to other media browsing methods.
-        LogHelper.w(TAG, "OnGetRoot: IGNORING request from untrusted package "
-                + clientPackageName);
+
         return null;
     }
-    if (ANDROID_AUTO_PACKAGE_NAME.equals(clientPackageName)) {
-        // Optional: if your app needs to adapt ads, music library or anything
-        // else that needs to run differently when connected to the car, this
-        // is where you should handle it.
-    }
-    return new BrowserRoot(MEDIA_ID_ROOT, null);
+
+    return new BrowserRoot(MY_MEDIA_ROOT_ID, null);
 }
 </pre>
 
 <p>
   The Auto device client builds the top-level menu by calling {@link
   android.service.media.MediaBrowserService#onLoadChildren onLoadChildren()}
-  with the root node object and getting it's children. The client builds
+  with the root node object and getting its children. The client builds
   submenus by calling the same method with other child nodes. The following
   example code shows a simple implementation of {@link
   android.service.media.MediaBrowserService#onLoadChildren onLoadChildren()} method:
@@ -341,21 +343,30 @@
 
     // Assume for example that the music catalog is already loaded/cached.
 
-    List&lt;MediaBrowser.MediaItem&gt; mediaItems = new ArrayList&lt;&gt;();
+    List&lt;MediaItem&gt; mediaItems = new ArrayList&lt;&gt;();
 
     // Check if this is the root menu:
-    if (MEDIA_BROWSER_ROOT.equals(parentMediaId)) {
+    if (MY_MEDIA_ROOT_ID.equals(parentMediaId)) {
 
         // build the MediaItem objects for the top level,
-        // and put them in the &lt;result&gt; list
+        // and put them in the mediaItems list
     } else {
 
         // examine the passed parentMediaId to see which submenu we're at,
-        // and put the children of that menu in the &lt;result&gt; list
+        // and put the children of that menu in the mediaItems list
     }
+    result.sendResult(mediaItems);
 }
 </pre>
 
+<p>
+  For examples of how to implement {@link
+  android.service.media.MediaBrowserService#onLoadChildren onLoadChildren()},
+  see the <a href="{@docRoot}samples/MediaBrowserService/index.html">
+  MediaBrowserService</a> and
+  <a href="https://github.com/googlesamples/android-UniversalMusicPlayer"
+  class="external-link">Universal Android Music Player</a> sample apps.
+</p>
 
 <h2 id="implement_callback">Enable Playback Control</h2>
 
@@ -671,4 +682,4 @@
 the
 <a href="//github.com/googlesamples/android-UniversalMusicPlayer/">Universal Media Player</a>
 sample.
-</p>
\ No newline at end of file
+</p>
diff --git a/docs/html/training/backup/autosyncapi.jd b/docs/html/training/backup/autosyncapi.jd
index d216f70..0e2a9a9 100644
--- a/docs/html/training/backup/autosyncapi.jd
+++ b/docs/html/training/backup/autosyncapi.jd
@@ -26,12 +26,20 @@
 
 <p>
   Users frequently invest time and effort to configure apps just the way they like them. Switching
-  to a new device can cancel out all that careful configuration. Devices running Android 6.0 and
-  higher automatically back up app data to the cloud. The system performs this automatic backup
+  to a new device can cancel out all that careful configuration. For apps whose <a href=
+  "{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">target SDK version</a>
+  is Android 6.0 (API level 23) and higher, devices running Android 6.0 and higher automatically
+  back up app data to the cloud. The system performs this automatic backup
   for nearly all app data by default, and does so without your having to write any additional app
   code.
 </p>
 
+<p class="note">
+<strong>Note:</strong> To protect user privacy, the device user must have opted in to Google
+services for Auto Backup to work. The Google services opt-in dialog appears when the user goes
+through the Setup Wizard or configures the first Google account on the device.
+</p>
+
 <p>
   When a user installs your app on
   a new device, or reinstalls your app on one (for example, after a factory reset), the system
@@ -82,8 +90,8 @@
 &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         package="com.my.appexample"&gt;
-    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
-    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:minSdkVersion="23"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="23"/&gt;
     &lt;application ...
 <strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
     &lt;/app&gt;
@@ -222,8 +230,8 @@
 &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         package="com.my.appexample"&gt;
-    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
-    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:minSdkVersion="23"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="23"/&gt;
     &lt;application ...
 <strong>        android:allowBackup="false"&gt;</strong>
     &lt;/application&gt;
diff --git a/docs/html/training/material/drawables.jd b/docs/html/training/material/drawables.jd
index c58075e..da8bea8 100644
--- a/docs/html/training/material/drawables.jd
+++ b/docs/html/training/material/drawables.jd
@@ -14,6 +14,7 @@
 <ul>
   <li><a href="http://www.google.com/design/spec">Material design specification</a></li>
   <li><a href="{@docRoot}design/material/index.html">Material design on Android</a></li>
+  <li><a href="{@docRoot}tools/help/vector-asset-studio.html">Vector Asset Studio</a></li>
 </ul>
 </div>
 </div>
diff --git a/docs/html/training/monitoring-device-state/doze-standby.jd b/docs/html/training/monitoring-device-state/doze-standby.jd
index e167254..50c3d11 100644
--- a/docs/html/training/monitoring-device-state/doze-standby.jd
+++ b/docs/html/training/monitoring-device-state/doze-standby.jd
@@ -217,7 +217,7 @@
   The Doze restriction on network access is also likely to affect your app,
   especially if the app relies on real-time messages such as tickles or
   notifications. If your app requires a persistent connection to the network to
-  receive messages, you should use <a href="#using_gcm">Google Cloud Messaging(GCM)</a>
+  receive messages, you should use <a href="#using_gcm">Google Cloud Messaging (GCM)</a>
   if possible.
 </p>
 
@@ -283,7 +283,7 @@
 
 <p>
   High-priority GCM messages do not otherwise affect Doze mode, and they don’t
-  affect the state of any other app, This means that your app can use them to communicate
+  affect the state of any other app. This means that your app can use them to communicate
   efficiently while minimizing battery impacts across the system and device.
 </p>
 
@@ -377,13 +377,18 @@
   <li>Run your app and leave it active.
   </li>
 
-  <li>Force the system to cycle through Doze modes by running the following
-  commands:
+  <li>Shut off the device screen. (The app remains active.)
   </li>
 
-  <pre class="no-pretty-print">$ adb shell dumpsys battery unplug
-$ adb shell dumpsys deviceidle step
-$ adb shell dumpsys deviceidle -h</pre>
+  <li>Force the system to cycle through Doze modes by running the following
+  commands:
+
+  <pre class="no-pretty-print">
+$ adb shell dumpsys battery unplug
+$ adb shell dumpsys deviceidle step</pre>
+
+  <p>You may need to run the second command more than once. Repeat it until
+  the device state changes to idle.</p>
   </li>
 
   <li> Observe the behavior of your app after you reactivate the device. Make
diff --git a/docs/html/training/notepad/codelab/NotepadCodeLab.zip b/docs/html/training/notepad/codelab/NotepadCodeLab.zip
deleted file mode 100644
index cd30f29..0000000
--- a/docs/html/training/notepad/codelab/NotepadCodeLab.zip
+++ /dev/null
Binary files differ
diff --git a/docs/html/training/notepad/index.jd b/docs/html/training/notepad/index.jd
deleted file mode 100644
index 507b232..0000000
--- a/docs/html/training/notepad/index.jd
+++ /dev/null
@@ -1,136 +0,0 @@
-excludeFromSuggestions=true
-page.title=Notepad Tutorial
-parent.title=Tutorials
-@jd:body
-
-
-<p>This tutorial on writing a notepad application gives you a &quot;hands-on&quot; introduction
-to the Android framework and the  tools you use to build  applications on it.
-Starting from a preconfigured project file, it guides you through the process of
-developing a simple notepad application and provides concrete examples of how to
-set up the project,  develop the application logic and user interface, and then
-compile and run the application. </p>
-
-<p>The tutorial presents the application development as a set of 
-exercises (see below), each consisting of several steps. You should follow 
-the steps in each exercise to gradually build and refine your  
-application. The exercises explain each step in detail and provide all the 
-sample code you need to complete the application. </p>
-
-<p><p>When you are finished with the tutorial, you will have created a functioning
-Android application and will have learned many of the most important
-concepts in Android development.</p>
-
-<a name="who"></a>
-<h2>Who Should Use this Tutorial</h2>
-
-<p>This tutorial is designed for  experienced developers, especially those with 
-knowledge of the Java programming language. If you haven't written Java
-applications before, you can still use the tutorial, but you might need to work
-at a slower pace. </p>
-
-<p>Also note that this tutorial uses
-the Eclipse development environment, with the Android plugin installed. If you
-are not using Eclipse, you can  follow  the exercises and build the application,
-but you will need to determine how to accomplish the Eclipse-specific
-steps in your environment. </p>
-
-<a name="preparing"></a>
-<h2>Preparing for the Exercises</h2>
-
-<p>The tutorial  assumes that you have some familiarity with basic Android
-application concepts and terminology. If you are not, you
-should read <a href="{@docRoot}guide/components/fundamentals.html">Application 
-Fundamentals</a> before continuing. </p>
-
-<p>This tutorial also builds on the introductory information provided in the 
-<a href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a>
-tutorial, which explains how to set up your Eclipse environment
-for building Android applications. We recommend you complete the Hello World
-tutorial before starting this one.</p>
-
-<p>To prepare for this lesson:</p>
-
-<ol>
-  <li>Download the <a href="codelab/NotepadCodeLab.zip">project
-      exercises archive (.zip)</a>.</li>
-  <li>Unpack the archive file to a suitable location on your machine.</li>
-  <li>Open the <code>NotepadCodeLab</code> folder.</li>
-</ol>
-
-<p>Inside the <code>NotepadCodeLab</code> folder, you should see six project
-files: <code>Notepadv1</code>,
-    <code>Notepadv2</code>, <code>Notepadv3</code>,
-    <code>Notepadv1Solution</code>, <code>Notepadv2Solution</code>
-    and <code>Notepadv3Solution</code>. The <code>Notepadv#</code> projects are
-the starting points for each of the exercises, while the
-<code>Notepadv#Solution</code> projects are the exercise
-    solutions. If you are having trouble with a particular exercise, you
-    can compare your current work against the exercise solution.</p>
-
-<a name="exercises"></a>
-<h2> Exercises</h2>
-
-  <p>The table below lists the tutorial exercises and describes the development
-areas that each covers. Each exercise assumes that you have completed any
-previous exercises.</p>
-
-  <table border="0" style="padding:4px;spacing:2px;" summary="This
-table lists the
-tutorial examples and describes what each covers. ">
-    <tr>
-      <th width="120"><a href="{@docRoot}training/notepad/notepad-ex1.html">Exercise
-1</a></th>
-      <td>Start here. Construct a simple notes list that lets the user add new notes but not
-edit them. Demonstrates the basics of <code>ListActivity</code> and creating
-and handling
-      menu options. Uses a SQLite database to store the notes.</td>
-    </tr>
-    <tr>
-      <th><a href="{@docRoot}training/notepad/notepad-ex2.html">Exercise 2</a></th>
-      <td>Add a second Activity to the
-application. Demonstrates constructing a
-new Activity, adding it to the Android manifest, passing data between the
-activities, and using more advanced screen layout. Also shows how to
-invoke another Activity to return a result, using
-<code>startActivityForResult()</code>.</td>
-    </tr>
-    <tr>
-      <th><a href="{@docRoot}training/notepad/notepad-ex3.html">Exercise 3</a></th>
-      <td>Add handling of life-cycle events to
-the application, to let it
-maintain application state across the life cycle. </td>
-    </tr>
-    <tr>
-    <th><a href="{@docRoot}training/notepad/notepad-extra-credit.html">Extra
-Credit</a></th>
-    <td>Demonstrates how to use the Eclipse
-debugger and how you can use it to
-view life-cycle events as they are generated. This section is optional but
-highly recommended.</td>
-    </tr>
-</table>
-
-
-<a name="other"></a>
-<h2>Other Resources and Further Learning</h2>
-<ul>
-<li>For a lighter but broader introduction to concepts not covered in the
-tutorial,
-take a look at <a href="{@docRoot}resources/faq/commontasks.html">Common Android Tasks</a>.</li>
-
-<li>This tutorial draws from the full Notepad application included in the
-<code>samples/legacy/NotePad</code> directory of the SDK, though it does not
-match it exactly. When you are done with the tutorial, it is highly recommended
-that you take a closer look at this version of the Notepad application, as it
-demonstrates a variety of interesting additions for your application, such
-as:</li>
-  <ul>
-    <li>Setting up a custom striped list for the list of notes.</li>
-    <li>Creating a custom text edit view that overrides the <code>draw()</code>
-    method to make it look like a lined notepad.</li>
-    <li>Implementing a full <code>ContentProvider</code> for notes.</li>
-    <li>Reverting and discarding edits instead of just automatically saving
-    them.</li>
-  </ul>
-</ul>
diff --git a/docs/html/training/notepad/notepad-ex1.jd b/docs/html/training/notepad/notepad-ex1.jd
deleted file mode 100644
index f680f15..0000000
--- a/docs/html/training/notepad/notepad-ex1.jd
+++ /dev/null
@@ -1,583 +0,0 @@
-excludeFromSuggestions=true
-page.title=Notepad Exercise 1
-parent.title=Notepad Tutorial
-parent.link=index.html
-@jd:body
-
-
-<p><em>In this exercise, you will construct a simple notes list that lets the
-user add new notes but not edit them. The exercise demonstrates:</em></p>
-<ul>
-<li><em>The basics of <code>ListActivities</code> and creating and handling menu
-options. </em></li>
-<li><em>How to use a SQLite database to store the notes.</em></li>
-<li><em>How to bind data from a database cursor into a ListView using a
-SimpleCursorAdapter.</em></li>
-<li><em>The basics of screen layouts, including how to lay out a list view, how
-you can add items to the activity menu, and how the activity handles those menu
-selections. </em></li>
-</ul>
-
-<div style="float:right;white-space:nowrap">
-<span style="color:#BBB;">
-	[<a href="notepad-ex1.html" style="color:#BBB;">Exercise 1</a>]</span>
-	[<a href="notepad-ex2.html">Exercise 2</a>]
-	[<a href="notepad-ex3.html">Exercise 3</a>]
-	[<a href="notepad-extra-credit.html">Extra Credit</a>]
-</div>
-
-
-
-<h2>Step 1</h2>
-
-	<p>Open up the <code>Notepadv1</code> project in Eclipse.</p>
-    
-    <p><code>Notepadv1</code> is a project that is provided as a starting point. It
-    takes care of some of the boilerplate work that you have already seen if you
-    followed the <a href="{@docRoot}training/basics/firstapp/index.html">Hello,
-    World</a> tutorial.</p>
-    
-  <ol>
-    <li>
-      Start a new Android Project by clicking <strong>File</strong> > 
-      <strong>New</strong> > <strong>Android Project</strong>.</li>
-    <li>
-      In the New Android Project dialog, select <strong>Create project from existing source</strong>.</li>
-    <li>
-      Click <strong>Browse</strong> and navigate to where you copied the <code>NotepadCodeLab</code> 
-      (downloaded during <a href="{@docRoot}training/notepad/index.html#preparing">setup</a>) 
-      and select <code>Notepadv1</code>.</li>
-    <li>
-      The Project Name and other properties should be automatically filled for you. 
-      You must select the Build Target&mdash;we recommend selecting a target with the 
-      lowest platform version available. Also add an integer to the Min SDK Version field 
-      that matches the API Level of the selected Build Target.</li>
-    <li>
-      Click <strong>Finish</strong>. The <code>Notepadv1</code> project should open and be 
-      visible in your Eclipse package explorer.</li>
-  </ol>
-  
-    <p>If you see an error about <code>AndroidManifest.xml</code>, or some
-      problems related to an Android zip file, right click on the project and
-      select <strong>Android Tools</strong> > <strong>Fix Project Properties</strong>.
-      (The project is looking in the wrong location for the library file,
-      this will fix it for you.)</p>
-
-  <h2>Step 2</h2>
-
-  <div class="sidebox-wrapper">
-  <div class="sidebox">
-    <h2>Accessing and modifying data</h2>
-    <p>For this
-    exercise, we are using a SQLite database to store our data. This is useful
-    if only <em>your</em> application will need to access or modify the data. If you wish for
-    other activities to access or modify the data, you have to expose the data using a 
-    {@link android.content.ContentProvider ContentProvider}.</p>
-    <p>If you are interested, you can find out more about
-    <a href="{@docRoot}guide/topics/providers/content-providers.html">content providers</a> or the
-whole
-    subject of <a href="{@docRoot}guide/topics/data/data-storage.html">Data Storage</a>.
-    The NotePad sample in the <code>samples/</code> folder of the SDK also has an example of how
-    to create a ContentProvider.</p>
-  </div>
-  </div>
-
-    <p>Take a look at the <code>NotesDbAdapter</code> class &mdash; this class is provided to
-    encapsulate data access to a SQLite database that will hold our notes data
-    and allow us to update it.</p>
-    <p>At the top of the class are some constant definitions that will be used in the application
-    to look up data from the proper field names in the database. There is also a database creation
-    string defined, which is used to create a new database schema if one doesn't exist already.</p>
-    <p>Our database will have the name <code>data</code>, and have a single table called 
-    <code>notes</code>, which in turn has three fields: <code>_id</code>, <code>title</code> and 
-    <code>body</code>. The <code>_id</code> is named with an underscore convention used in a number of
-    places inside the Android SDK and helps keep a track of state. The <code>_id</code>
-    usually has to be specified when querying or updating the database (in the column projections
-    and so on). The other two fields are simple text fields that will store data.
-    </p>
-    <p>The constructor for <code>NotesDbAdapter</code> takes a Context, which allows it to communicate with aspects
-    of the Android operating system. This is quite common for classes that need to touch the
-    Android system in some way. The Activity class implements the Context class, so usually you will just pass
-    <code>this</code> from your Activity, when needing a Context.</p>
-    <p>The <code>open()</code> method calls up an instance of DatabaseHelper, which is our local
-    implementation of the SQLiteOpenHelper class. It calls <code>getWritableDatabase()</code>, 
-    which handles creating/opening a database for us.</p>
-    <p><code>close()</code> just closes the database, releasing resources related to the 
-    connection.</p>
-    <p><code>createNote()</code> takes strings for the title and body of a new note,
-    then creates that note in the database. Assuming the new note is created successfully, the
-    method also returns the row <code>_id</code> value for the newly created note.</p>
-    <p><code>deleteNote()</code> takes a <var>rowId</var> for a particular note, and deletes that note from
-    the database.</p>
-
-    <p><code>fetchAllNotes()</code> issues a query to return a {@link android.database.Cursor} over all notes in the
-    database. The <code>query()</code> call is worth examination and understanding. The first field is the 
-    name of the database table to query (in this case <code>DATABASE_TABLE</code> is "notes").
-    The next is the list of columns we want returned, in this case we want the <code>_id</code>, 
-    <code>title</code> and <code>body</code> columns so these are specified in the String array.
-    The remaining fields are, in order: <code>selection</code>, 
-    <code>selectionArgs</code>, <code>groupBy</code>, <code>having</code> and <code>orderBy</code>.
-    Having these all <code>null</code> means we want all data, need no grouping, and will take the default
-    order. See {@link android.database.sqlite.SQLiteDatabase SQLiteDatabase} for more details.</p>
-    <p class="note"><b>Note:</b> A Cursor is returned rather than a collection of rows. This allows
-    Android to use resources efficiently -- instead of putting lots of data straight into memory
-    the cursor will retrieve and release data as it is needed, which is much more efficient for
-    tables with lots of rows.</p>
-
-    <p><code>fetchNote()</code> is similar to <code>fetchAllNotes()</code> but just gets one note
-    with the <var>rowId</var> we specify. It uses a slightly different version of the 
-    {@link android.database.sqlite.SQLiteDatabase} <code>query()</code> method. 
-    The first parameter (set <em>true</em>) indicates that we are interested
-    in one distinct result. The <var>selection</var> parameter (the fourth parameter) has been specified to search
-    only for the row "where _id =" the <var>rowId</var> we passed in. So we are returned a Cursor on
-    the one row.</p>
-    <p>And finally, <code>updateNote()</code> takes a <var>rowId</var>, <var>title</var> and <var>body</var>, and uses a
-    {@link android.content.ContentValues ContentValues} instance to update the note of the given
-    <var>rowId</var>.</p>
-   
-<h2 style="clear:right;">Step 3</h2>
-
-	<div class="sidebox-wrapper">
-  <div class="sidebox">
-    <h2>Layouts and activities</h2>
-      <p>Most Activity classes will have a layout associated with them. The layout
-    will be the "face" of the Activity to the user. In this case our layout will
-    take over the whole screen and provide a list of notes.</p>
-    <p>Full screen layouts are not the only option for an Activity however. You
-    might also want to use a <a
-href="{@docRoot}resources/faq/commontasks.html#floatingorfull">floating 
-    layout</a> (for example, a <a
-href="{@docRoot}resources/faq/commontasks.html#dialogsandalerts">dialog
-    or alert</a>), 
-    or perhaps you don't need a layout at all (the Activity will be invisible 
-    to the user unless you specify some kind of layout for it to use).</p>
-  </div>
-  </div>
-    
-    <p>Open the <code>notepad_list.xml</code> file in <code>res/layout</code>
-and 
-    take a look at it. (You may have to
-    hit the <em>xml</em> tab, at the bottom, in order to view the XML markup.)</p>
-     
-    <p>This is a mostly-empty layout definition file. Here are some
-    things you should know about a layout file:</p>
-
-   
-  <ul>
-    <li>
-      All Android layout files must start with the XML header line:
-      <code>&lt;?xml version="1.0" encoding="utf-8"?&gt;</code>.    </li>
-    <li>
-      The next definition will often (but not always) be a layout
-      definition of some kind, in this case a <code>LinearLayout</code>.    </li>
-    <li>
-      The XML namespace of Android should always be defined in
-      the top level component or layout in the XML so that <code>android:</code> tags can
-      be used through the rest of the file:
-      <p><code>xmlns:android="http://schemas.android.com/apk/res/android"</code></p>
-    </li>
-  </ul>
-
-  <h2 style="clear:right;">Step 4</h2>
-    <p>We need to create the layout to hold our list. Add code inside
-    of the <code>LinearLayout</code> element so the whole file looks like this: </p>
-    <pre>
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
-    android:layout_width=&quot;wrap_content&quot;
-    android:layout_height=&quot;wrap_content&quot;&gt;
-
-  &lt;ListView android:id=&quot;@android:id/list&quot;
-        android:layout_width=&quot;wrap_content&quot;
-        android:layout_height=&quot;wrap_content&quot;/&gt;
-  &lt;TextView android:id=&quot;@android:id/empty&quot;
-        android:layout_width=&quot;wrap_content&quot;
-        android:layout_height=&quot;wrap_content&quot;
-        android:text=&quot;@string/no_notes&quot;/&gt;
-
-&lt;/LinearLayout&gt;
-</pre>
-  <ul>
-    <li>
-      The <strong>&#64;</strong> symbol in the id strings of the <code>ListView</code> and 
-      <code>TextView</code> tags means 
-      that the XML parser should parse and expand the rest of
-      the id string and use an ID resource.</li>
-    <li>
-      The <code>ListView</code> and <code>TextView</code> can be
-      thought as two alternative views, only one of which will be displayed at once.
-      ListView will be used when there are notes to be shown, while the TextView
-      (which has a default value of "No Notes Yet!" defined as a string
-      resource in <code>res/values/strings.xml</code>) will be displayed if there 
-      aren't any notes to display.</li>
-    <li>The <code>list</code> and <code>empty</code> IDs are
-      provided for us by the Android platform, so, we must 
-      prefix the <code>id</code> with <code>android:</code> (e.g., <code>@android:id/list</code>).</li>
-    <li>The View with the <code>empty</code> id is used 
-      automatically when the {@link android.widget.ListAdapter} has no data for the ListView. The 
-      ListAdapter knows to look for this name by default. Alternatively, you could change the      
-      default empty view by using {@link android.widget.AdapterView#setEmptyView(View)}
-      on the ListView.
-      <p>
-      More broadly, the <code>android.R</code> class is a set of predefined 
-      resources provided for you by the platform, while your project's 
-      <code>R</code> class is the set of resources your project has defined.
-      Resources found in the <code>android.R</code> resource class can be
-      used in the XML files by using the <code>android:</code> name space prefix      
-      (as we see here).</p>
-    </li>
-  </ul>
-
-  <h2 style="clear:right;">Step 5</h2>
-
-	<div class="sidebox-wrapper">
-  <div class="sidebox">
-    <h2>Resources and the R class</h2>
-    <p>The folders under res/ in the Eclipse project are for resources.
-     There is a <a href="{@docRoot}resources/faq/commontasks.html#filelist">specific structure</a>
-to the
-     folders and files under res/.</p>
-    <p>Resources defined in these folders and files will have
-    corresponding entries in the R class allowing them to be easily accessed
-    and used from your application. The R class is automatically generated using the contents
-    of the res/ folder by the eclipse plugin (or by aapt if you use the command line tools).
-    Furthermore, they will be bundled and deployed for you as part of the application.</p>
-    </p>
-  </div>
-  </div>
-
-    <p>To make the list of notes in the ListView, we also need to define a View for each row:</p>
-  <ol>
-    <li>
-      Create a new file under <code>res/layout</code> called 
-      <code>notes_row.xml</code>.    </li>
-    <li>
-      Add the following contents (note: again the XML header is used, and the
-      first node defines the Android XML namespace)<br>
-      <pre style="overflow:auto">
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;TextView android:id=&quot;&#64;+id/text1&quot;
-    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
-    android:layout_width=&quot;wrap_content&quot;
-    android:layout_height=&quot;wrap_content&quot;/&gt;</pre>
-    <p>
-      This is the View that will be used for each notes title row &mdash; it has only
-      one text field in it.    </p>
-    <p>In this case we create a new id called <code>text1</code>. The
-      <strong>+</strong> after the <strong>@</strong> in the id string indicates that the id should
-      be automatically created as a resource if it does not already exist, so we are defining
-      <code>text1</code> on the fly and then using it.</p>
-    </li>
-    <li>Save the file.</li>
-  </ol>
-      <p>Open the <code>R.java</code> class in the
-      project and look at it, you should see new definitions for
-      <code>notes_row</code> and <code>text1</code> (our new definitions)
-      meaning we can now gain access to these from the our code. </p>
-
-  <h2 style="clear:right;">Step 6</h2>
-<p>Next, open the <code>Notepadv1</code> class in the source. In the following steps, we are going to
-    alter this class to become a list adapter and display our notes, and also
-    allow us to add new notes.</p>
-
-<p><code>Notepadv1</code> will inherit from a subclass
-    of <code>Activity</code> called a <code>ListActivity</code>, 
-    which has extra functionality to accommodate the kinds of 
-    things you might want to do with a list, for
-    example: displaying an arbitrary number of list items in rows on the screen,
-    moving through the list items, and allowing them to be selected.</p>
-
-<p>Take a look through the existing code in <code>Notepadv1</code> class.
-    There is a currently an unused private field called <code>mNoteNumber</code> that
-    we will use to create numbered note titles.</p>
-    <p>There are also three override methods defined:
-    <code>onCreate</code>, <code>onCreateOptionsMenu</code> and
-    <code>onOptionsItemSelected</code>; we need to fill these
-    out:</p>
-    <ul>
-      <li><code>onCreate()</code> is called when the activity is
-      started &mdash; it is a little like the "main" method for an Activity. We use
-      this to set up resources and state for the activity when it is
-      running.</li>
-     <li><code>onCreateOptionsMenu()</code> is used to populate the
-      menu for the Activity. This is shown when the user hits the menu button,
-and
-      has a list of options they can select (like "Create
-      Note"). </li>
-     <li><code>onOptionsItemSelected()</code> is the other half of the
-      menu equation, it is used to handle events generated from the menu (e.g.,
-      when the user selects the "Create Note" item).
-      </li>
-    </ul>
-    
-  <h2>Step 7</h2>
-    <p>Change the inheritance of <code>Notepadv1</code> from
-<code>Activity</code>
-    to <code>ListActivity</code>:</p> 
-    <pre>public class Notepadv1 extends ListActivity</pre>
-    <p>Note: you will have to import <code>ListActivity</code> into the
-Notepadv1
-    class using Eclipse, <strong>ctrl-shift-O</strong> on Windows or Linux, or
-    <strong>cmd-shift-O</strong> on the Mac (organize imports) will do this for you
-    after you've written the above change.</p>
-
-  <h2>Step 8</h2>
-    <p>Fill out the body of the <code>onCreate()</code> method.</p>
-    <p>Here we will set the title for the Activity (shown at the top of the
-    screen), use the <code>notepad_list</code> layout we created in XML, 
-    set up the <code>NotesDbAdapter</code> instance that will
-    access notes data, and populate the list with the available note
-    titles:</p>
-    <ol>
-    <li>
-      In the <code>onCreate</code> method, call <code>super.onCreate()</code> with the 
-      <code>savedInstanceState</code> parameter that's passed in.</li>
-    <li>
-      Call <code>setContentView()</code> and pass <code>R.layout.notepad_list</code>.</li>
-    <li>
-      At the top of the class, create a new private class field called <code>mDbHelper</code> of class
-      <code>NotesDbAdapter</code>.
-    </li>
-    <li>
-      Back in the <code>onCreate</code> method, construct a new
-<code>NotesDbAdapter</code>
-      instance and assign it to the <code>mDbHelper</code> field (pass
-      <code>this</code> into the constructor for <code>DBHelper</code>)
-    </li>
-    <li>
-      Call the <code>open()</code> method on <code>mDbHelper</code> to open (or create) the
-      database.
-    </li>
-    <li>
-      Finally, call a new method <code>fillData()</code>, which will get the data and
-      populate the ListView using the helper &mdash; we haven't defined this method yet.    </li>
-  </ol>
-    <p>
-      <code>onCreate()</code> should now look like this:</p>
-      <pre>
-    &#64;Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.notepad_list);
-        mDbHelper = new NotesDbAdapter(this);
-        mDbHelper.open();
-        fillData();
-    }</pre>
-      <p>And be sure you have the <code>mDbHelper</code> field definition (right
-      under the mNoteNumber definition): </p>
-      <pre>    private NotesDbAdapter mDbHelper;</pre>
-
-  <h2>Step 9</h2>
-
-  <div class="sidebox-wrapper">
-  <div class="sidebox">
-    <h2>More about menus</h2>
-    <p>The notepad application we are constructing only scratches the
-     surface with <a href="{@docRoot}resources/faq/commontasks.html#addmenuitems">menus</a>. </p>
-    <p>You can also <a href="{@docRoot}resources/faq/commontasks.html#menukeyshortcuts">add
-shortcut keys for menu items</a>, <a
-href="{@docRoot}resources/faq/commontasks.html#menukeyshortcuts">create
-submenus</a> and even <a href="{@docRoot}resources/faq/commontasks.html#addingtoothermenus">add
-menu items to other applications!</a>. </p>
-  </div>
-  </div>
-
-<p>Fill out the body of the <code>onCreateOptionsMenu()</code> method.</p>
-
-<p>We will now create the "Add Item" button that can be accessed by pressing the menu
-button on the device. We'll specify that it occupy the first position in the menu.</p>
-
-  <ol>
-    <li>
-      In <code>strings.xml</code> resource (under <code>res/values</code>), add
-      a new string named "menu_insert" with its value set to <code>Add Item</code>:
-     <pre>&lt;string name="menu_insert"&gt;Add Item&lt;/string&gt;</pre>
-      <p>Then save the file and return to <code>Notepadv1</code>.</p>
-    </li>
-    <li>Create a menu position constant at the top of the  class:
-      <pre>public static final int INSERT_ID = Menu.FIRST;</pre>
-    </li>
-    <li>In the <code>onCreateOptionsMenu()</code> method, change the 
-    <code>super</code> call so we capture the boolean return as <code>result</code>. We'll return this value at the end.</li>
-    <li>Then add the menu item with <code>menu.add()</code>.</li>
-  </ol>
-  <p>The whole method should now look like this: 
-      <pre>
-    &#64;Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        boolean result = super.onCreateOptionsMenu(menu);
-        menu.add(0, INSERT_ID, 0, R.string.menu_insert);
-        return result;
-    }</pre>
-  <p>The arguments passed to <code>add()</code> indicate: a group identifier for this menu (none,
-  in this case), a unique ID (defined above), the order of the item (zero indicates no preference),
-  and the resource of the string to use for the item.</p>
-
-<h2 style="clear:right;">Step 10</h2>
-    <p>Fill out the body of the <code>onOptionsItemSelected()</code> method:</p>
-    <p>This is going
-    to handle our new "Add Note" menu item.  When this is selected, the
-    <code>onOptionsItemSelected()</code> method will be called with the
-    <code>item.getId()</code> set to <code>INSERT_ID</code> (the constant we
-    used to identify the menu item). We can detect this, and take the
-    appropriate actions:</p>
-  <ol>
-    <li>
-      The <code>super.onOptionsItemSelected(item)</code> method call goes at the
-      end of this method &mdash; we want to catch our events first!    </li>
-    <li>
-      Write a switch statement on <code>item.getItemId()</code>.   
-      <p>In the case of <var>INSERT_ID</var>, call a new method, <code>createNote()</code>,
-      and return true, because we have handled this event and do not want to
-      propagate it through the system.</p>
-    </li>
-    <li>Return the result of the superclass' <code>onOptionsItemSelected()</code>
-    method at the end.</li>
-   </ol>
-    <p>
-      The whole <code>onOptionsItemSelect()</code> method should now look like
-      this:</p>
-      <pre>
-    &#64;Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-        case INSERT_ID:
-            createNote();
-            return true;
-        }
-       
-        return super.onOptionsItemSelected(item);
-    }</pre>
-
-<h2>Step 11</h2>
-    <p>Add a new <code>createNote()</code> method:</p>
-    <p>In this first version of
-    our application, <code>createNote()</code> is not going to be very useful.
-We will simply
-    create a new note with a title assigned to it based on a counter ("Note 1",
-    "Note 2"...) and with an empty body. At present we have no way of editing
-    the contents of a note, so for now we will have to be content making one
-    with some default values:</p>
-  <ol>
-    <li>Construct the name using "Note" and the counter we defined in the class: <code>
-      String noteName = "Note " + mNoteNumber++</code></li>
-    <li>
-      Call <code>mDbHelper.createNote()</code> using <code>noteName</code> as the
-      title and <code>""</code> for the body 
-    </li>
-    <li>
-      Call <code>fillData()</code> to populate the list of notes (inefficient but
-      simple) &mdash; we'll create this method next.</li>
-  </ol>
-    <p>
-      The whole <code>createNote()</code> method should look like this: </p>
-      <pre>
-    private void createNote() {
-        String noteName = &quot;Note &quot; + mNoteNumber++;
-        mDbHelper.createNote(noteName, &quot;&quot;);
-        fillData();
-    }</pre>
-
-
-<h2>Step 12</h2>
-  <div class="sidebox-wrapper">
-  <div class="sidebox">
-    <h2>List adapters</h2>
-    <p>Our example uses a {@link android.widget.SimpleCursorAdapter
-     SimpleCursorAdapter} to bind a database {@link android.database.Cursor Cursor}
-     into a ListView, and this is a common way to use a {@link android.widget.ListAdapter 
-     ListAdapter}. Other options exist like {@link android.widget.ArrayAdapter ArrayAdapter} which 
-     can be used to take a List or Array of in-memory data and bind it in to
-     a list as well.</p>
-  </div>
-  </div>
-  
-  <p>Define the <code>fillData()</code> method:</p>
-   <p>This
-    method uses <code>SimpleCursorAdapter,</code> which takes a database <code>Cursor</code> 
-    and binds it to fields provided in the layout. These fields define the row elements of our list 
-    (in this case we use the <code>text1</code> field in our
-    <code>notes_row.xml</code> layout), so this allows us to easily populate the list with
-    entries from our database.</p>
-    <p>To do this we have to provide a mapping from the <code>title</code> field in the returned Cursor, to
-    our <code>text1</code> TextView, which is done by defining two arrays: the first a string array
-    with the list of columns to map <em>from</em> (just "title" in this case, from the constant 
-    <code>NotesDbAdapter.KEY_TITLE</code>) and, the second, an int array
-    containing references to the views that we'll bind the data <em>into</em> 
-    (the <code>R.id.text1</code> TextView).</p>
-    <p>This is a bigger chunk of code, so let's first take a look at it:</p>
-
-    <pre>
-    private void fillData() {
-        // Get all of the notes from the database and create the item list
-        Cursor c = mDbHelper.fetchAllNotes();
-        startManagingCursor(c);
-
-        String[] from = new String[] { NotesDbAdapter.KEY_TITLE };
-        int[] to = new int[] { R.id.text1 };
-        
-        // Now create an array adapter and set it to display using our row
-        SimpleCursorAdapter notes =
-            new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
-        setListAdapter(notes);
-    }</pre>
-    
-  <p>Here's what we've done:</p>
-  <ol>
-    <li>
-      After obtaining the Cursor from <code>mDbHelper.fetchAllNotes()</code>, we 
-      use an Activity method called
-      <code>startManagingCursor()</code> that allows Android to take care of the
-      Cursor lifecycle instead of us needing to worry about it. (We will cover the implications
-      of the lifecycle in exercise 3, but for now just know that this allows Android to do some
-      of our resource management work for us.)</li>
-    <li>
-      Then we create a string array in which we declare the column(s) we want 
-      (just the title, in this case), and an int array that defines the View(s)
-      to which we'd like to bind the columns (these should be in order, respective to 
-      the string array, but here we only have one for each).</li>
-    <li>
-      Next is the SimpleCursorAdapter instantiation. 
-      Like many classes in Android, the SimpleCursorAdapter needs a Context in order to do its
-      work, so we pass in <code>this</code> for the context (since subclasses of Activity 
-      implement Context). We pass the <code>notes_row</code> View we created as the receptacle
-      for the data, the Cursor we just created, and then our arrays.</li>
-   </ol>
-    <p>
-      In the future, remember that the mapping between the <strong>from</strong> columns and <strong>to</strong> resources
-      is done using the respective ordering of the two arrays. If we had more columns we wanted
-      to bind, and more Views to bind them in to, we would specify them in order, for example we
-      might use <code>{ NotesDbAdapter.KEY_TITLE, NotesDbAdapter.KEY_BODY }</code> and
-      <code>{ R.id.text1, R.id.text2 }</code> to bind two fields into the row (and we would also need
-      to define text2 in the notes_row.xml, for the body text). This is how you can bind multiple fields
-      into a single row (and get a custom row layout as well).</p>
-    <p>
-      If you get compiler errors about classes not being found, ctrl-shift-O or
-      (cmd-shift-O on the mac) to organize imports. 
-    </p>
-    
-<h2 style="clear:right;">Step 13</h2>
-    <p>Run it!
-  <ol>
-    <li>
-      Right click on the <code>Notepadv1</code> project.</li>
-    <li>
-      From the popup menu, select <strong>Run As</strong> &gt; 
-      <strong>Android Application</strong>.</li>
-    <li>
-      If you see a dialog come up, select Android Launcher as the way of running
-      the application (you can also use the link near the top of the dialog to
-      set this as your default for the workspace; this is recommended as it will
-      stop the plugin from asking you this every time).</li>
-    <li>Add new notes by hitting the menu button and selecting <em>Add
-    Item</em> from the menu.</li>
-  </ol>
-
-<h2 style="clear:right;">Solution and Next Steps</h2>
-    <p>You can see the solution to this class in <code>Notepadv1Solution</code>
-from
-the zip file to compare with your own.</p>
-
-<p>Once you are ready, move on to <a href="notepad-ex2.html">Tutorial
-Exercise 2</a> to add the ability to create, edit and delete notes.</p>
-
diff --git a/docs/html/training/notepad/notepad-ex2.jd b/docs/html/training/notepad/notepad-ex2.jd
deleted file mode 100644
index 5ebd1aa..0000000
--- a/docs/html/training/notepad/notepad-ex2.jd
+++ /dev/null
@@ -1,645 +0,0 @@
-excludeFromSuggestions=true
-page.title=Notepad Exercise 2
-parent.title=Notepad Tutorial
-parent.link=index.html
-@jd:body
-
-
-<p><em>In this exercise, you will add a second Activity to your notepad application, to let the user
-create and edit notes. You will also allow the user to delete existing notes through a context menu.
-The new Activity assumes responsibility for creating new notes by
-collecting user input and packing it into a return Bundle provided by the intent. This exercise
-demonstrates:</em></p>
-<ul>
-<li><em>Constructing a new Activity and adding it to the Android manifest</em></li>
-<li><em>Invoking another Activity asynchronously using <code>startActivityForResult()</code></em></li>
-<li><em>Passing data between Activity in Bundle objects</em></li>
-<li><em>How to use a more advanced screen layout</em></li>
-<li><em>How to create a context menu</em></li>
-</ul>
-
-<div style="float:right;white-space:nowrap">
-	[<a href="notepad-ex1.html">Exercise 1</a>]
-	<span style="color:#BBB;">
-		[<a href="notepad-ex2.html" style="color:#DDD;">Exercise 2</a>]
-	</span>
-	[<a href="notepad-ex3.html">Exercise 3</a>]
-	[<a href="notepad-extra-credit.html">Extra Credit</a>]
-</div>
-
-<h2>Step 1</h2>
-
-<p>Create a new Android project using the sources from <code>Notepadv2</code> under the
-<code>NotepadCodeLab</code> folder, just like you did for the first exercise. If you see an error about
-<code>AndroidManifest.xml</code>, or some problems related to an
-<code>android.zip</code> file, right click on the project and select <strong>Android
-Tools</strong> &gt; <strong>Fix Project Properties</strong>.</p>
-
-<p>Open the <code>Notepadv2</code> project and take a look around:</p>
-<ul>
-    <li>
-      Open and look at the <code>strings.xml</code> file under
-      <code>res/values</code> &mdash; there are several new strings which we will use
-      for our new functionality
-    </li>
-    <li>
-      Also, open and take a look at the top of the <code>Notepadv2</code> class,
-      you will notice several new constants have been defined along with a new <code>mNotesCursor</code>
-      field used to hold the cursor we are using.
-    </li>
-    <li>
-      Note also that the <code>fillData()</code> method has a few more comments and now uses
-      the new field to store the notes Cursor. The <code>onCreate()</code> method is
-      unchanged from the first exercise. Also notice that the member field used to store the
-      notes Cursor is now called <code>mNotesCursor</code>. The <code>m</code> denotes a member
-      field and is part of the Android coding style standards.
-    </li>
-    <li>
-      There are also a couple of new overridden methods
-      (<code>onCreateContextMenu()</code>, <code>onContextItemSelected()</code>,
-      <code>onListItemClick()</code> and <code>onActivityResult()</code>)
-      which we will be filling in below.
-    </li>
-</ul>
-
-
-<h2>Step 2</h2>
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<p>Context menus should always be used when performing actions upon specific elements in the UI.
-When you register a View to a context menu, the context menu is revealed by performing a "long-click"
-on the UI component (press and hold the touchscreen or highlight and hold down the selection key for about two seconds).</p>
-</div>
-</div>
-
-<p>First, let's create the context menu that will allow users to delete individual notes.
-Open the Notepadv2 class.</p>
-
-<ol>
-    <li>In order for each list item in the ListView to register for the context menu, we call
-    <code>registerForContextMenu()</code> and pass it our ListView. So, at the very end of
-    the <code>onCreate()</code> method add this line:
-    <pre>registerForContextMenu(getListView());</pre>
-    <p>Because our Activity extends the ListActivity class, <code>getListView()</code> will return us
-    the local ListView object for the Activity. Now, each list item in this ListView will activate the
-    context menu.
-    <li>
-      Now fill in the <code>onCreateContextMenu()</code> method. This callback is similar to the other
-    menu callback used for the options menu. Here, we add just one line, which will add a menu item
-    to delete a note. Call <code>menu.add()</code> like so:
-      <pre>
-public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
-    super.onCreateContextMenu(menu, v, menuInfo);
-    menu.add(0, DELETE_ID, 0, R.string.menu_delete);
-}</pre>
-    <p>The <code>onCreateContextMenu()</code> callback passes some other information in addition to the Menu object,
-    such as the View that has been triggered for the menu and
-    an extra object that may contain additional information about the object selected. However, we don't care about
-    these here, because we only have one kind of object in the Activity that uses context menus. In the next
-    step, we'll handle the menu item selection.</p>
-    </li>
-</ol>
-
-<h2>Step 3</h2>
-  <p>Now that we've registered our ListView for a context menu and defined our context menu item, we need
-  to handle the callback when it is selected. For this, we need to identify the list ID of the
-  selected item, then delete it. So fill in the
-  <code>onContextItemSelected()</code> method like this:</p>
-<pre>
-public boolean onContextItemSelected(MenuItem item) {
-    switch(item.getItemId()) {
-    case DELETE_ID:
-        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
-        mDbHelper.deleteNote(info.id);
-        fillData();
-        return true;
-    }
-    return super.onContextItemSelected(item);
-}</pre>
-<p>Here, we retrieve the {@link android.widget.AdapterView.AdapterContextMenuInfo AdapterContextMenuInfo}
-with {@link android.view.MenuItem#getMenuInfo()}. The <var>id</var> field of this object tells us
-the position of the item in the ListView. We then pass this to the <code>deleteNote()</code>
-method of our NotesDbAdapter and the note is deleted. That's it for the context menu &mdash; notes
-can now be deleted.</p>
-
-<h2 style="clear:right;">Step 4</h2>
-  <div class="sidebox-wrapper">
-  <div class="sidebox">
-    <h2>Starting Other Activities</h2>
-    <p>In this example our Intent uses a class name specifically.
-     As well as
-     <a href="{@docRoot}resources/faq/commontasks.html#intentexamples">starting intents</a> in
-    classes we already know about, be they in our own application or another
-    application, we can also create Intents without knowing exactly which
-    application will handle it.</p>
-    <p>For example, we might want to open a page in a
-    browser, and for this we still use
-    an Intent. But instead of specifying a class to handle it, we use
-    a predefined Intent constant, and a content URI that describes what we
-    want to do. See {@link android.content.Intent
-    android.content.Intent} for more information.</p>
-  </div>
-  </div>
-
-	<p>Fill in the body of the <code>createNote()</code> method:
-    <p>Create a new <code>Intent</code> to create a note
-    (<code>ACTIVITY_CREATE</code>) using the <code>NoteEdit</code> class.
-    Then fire the Intent using the <code>startActivityForResult()</code> method
-    call:</p>
-    <pre style="overflow:auto">
-Intent i = new Intent(this, NoteEdit.class);
-startActivityForResult(i, ACTIVITY_CREATE);</pre>
-      <p>This form of the Intent call targets a specific class in our Activity, in this case
-      <code>NoteEdit</code>. Since the Intent class will need to communicate with the Android
-      operating system to route requests, we also have to provide a Context (<code>this</code>).</p>
-      <p>The <code>startActivityForResult()</code> method fires the Intent in a way that causes a method
-      in our Activity to be called when the new Activity is completed. The method in our Activity
-      that receives the callback is called
-      <code>onActivityResult()</code> and we will implement it in a later step. The other way
-      to call an Activity is using <code>startActivity()</code> but this is a "fire-and-forget" way
-      of calling it &mdash; in this manner, our Activity is not informed when the Activity is completed, and there is
-      no way to return result information from the called Activity with <code>startActivity()</code>.
-      <p>Don't worry about the fact that <code>NoteEdit</code> doesn't exist yet,
-      we will fix that soon. </p>
-  </li>
-
-
-<h2>Step 5</h2>
-
-	<p>Fill in the body of the <code>onListItemClick()</code> override.</p>
-    <p><code>onListItemClick()</code> is a callback method that we'll override. It is called when
-    the user selects an item from the list. It is passed four parameters: the
-    <code>ListView</code> object it was invoked from, the <code>View</code>
-    inside the <code>ListView</code> that was clicked on, the
-    <code>position</code> in the list that was clicked, and the
-    <code>mRowId</code> of the item that was clicked. In this instance we can
-    ignore the first two parameters (we only have one <code>ListView</code> it
-    could be), and we ignore the <code>mRowId</code> as well. All we are
-    interested in is the <code>position</code> that the user selected. We use
-    this to get the data from the correct row, and bundle it up to send to
-    the <code>NoteEdit</code> Activity.</p>
-   <p>In our implementation of the callback, the method creates an
-    <code>Intent</code> to edit the note using
-    the <code>NoteEdit</code> class. It then adds data into the extras Bundle of
-    the Intent, which will be passed to the called Activity. We use it
-    to pass in the title and body text, and the <code>mRowId</code> for the note we are
-    editing. Finally, it will fire the Intent using the
-    <code>startActivityForResult()</code> method call. Here's the code that
-    belongs in <code>onListItemClick()</code>:</p>
-    <pre>
-super.onListItemClick(l, v, position, id);
-Cursor c = mNotesCursor;
-c.moveToPosition(position);
-Intent i = new Intent(this, NoteEdit.class);
-i.putExtra(NotesDbAdapter.KEY_ROWID, id);
-i.putExtra(NotesDbAdapter.KEY_TITLE, c.getString(
-        c.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
-i.putExtra(NotesDbAdapter.KEY_BODY, c.getString(
-        c.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
-startActivityForResult(i, ACTIVITY_EDIT);</pre>
-  <ul>
-    <li>
-      <code>putExtra()</code> is the method to add items into the extras Bundle
-      to pass in to intent invocations. Here, we are
-      using the Bundle to pass in the title, body and mRowId of the note we want to edit.
-    </li>
-    <li>
-      The details of the note are pulled out from our query Cursor, which we move to the
-      proper position for the element that was selected in the list, with
-      the <code>moveToPosition()</code> method.</li>
-    <li>With the extras added to the Intent, we invoke the Intent on the
-      <code>NoteEdit</code> class by passing <code>startActivityForResult()</code>
-      the Intent and the request code. (The request code will be
-      returned to <code>onActivityResult</code> as the <code>requestCode</code> parameter.)</li>
-  </ul>
-    <p class="note"><b>Note:</b> We assign the mNotesCursor field to a local variable at the
-    start of the method. This is done as an optimization of the Android code. Accessing a local
-    variable is much more efficient than accessing a field in the Dalvik VM, so by doing this
-    we make only one access to the field, and five accesses to the local variable, making the
-    routine much more efficient. It is recommended that you use this optimization when possible.</p>
-
-
-<h2>Step 6</h2>
-
-<p>The above <code>createNote()</code> and <code>onListItemClick()</code>
-    methods use an asynchronous Intent invocation. We need a handler for the callback, so here we fill
-    in the body of the <code>onActivityResult()</code>. </p>
-<p><code>onActivityResult()</code> is the overridden method
-    which will be called when an Activity returns with a result. (Remember, an Activity
-    will only return a result if launched with <code>startActivityForResult</code>.) The parameters provided
-    to the callback are: </p>
-  <ul>
-    <li><code>requestCode</code> &mdash; the original request code
-    specified in the Intent invocation (either <code>ACTIVITY_CREATE</code> or
-    <code>ACTIVITY_EDIT</code> for us).
-    </li>
-    <li><code>resultCode</code> &mdash; the result (or error code) of the call, this
-    should be zero if everything was OK, but may have a non-zero code indicating
-    that something failed. There are standard result codes available, and you
-    can also create your own constants to indicate specific problems.
-    </li>
-    <li><code>intent</code> &mdash; this is an Intent created by the Activity returning
-    results. It can be used to return data in the Intent "extras."
-    </li>
-  </ul>
-  <p>The combination of <code>startActivityForResult()</code> and
-  <code>onActivityResult()</code> can be thought of as an asynchronous RPC
-  (remote procedure call) and forms the recommended way for an Activity to invoke
-  another and share services.</p>
-  <p>Here's the code that belongs in your <code>onActivityResult()</code>:</p>
-    <pre>
-super.onActivityResult(requestCode, resultCode, intent);
-Bundle extras = intent.getExtras();
-
-switch(requestCode) {
-case ACTIVITY_CREATE:
-    String title = extras.getString(NotesDbAdapter.KEY_TITLE);
-    String body = extras.getString(NotesDbAdapter.KEY_BODY);
-    mDbHelper.createNote(title, body);
-    fillData();
-    break;
-case ACTIVITY_EDIT:
-    Long mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
-    if (mRowId != null) {
-        String editTitle = extras.getString(NotesDbAdapter.KEY_TITLE);
-        String editBody = extras.getString(NotesDbAdapter.KEY_BODY);
-        mDbHelper.updateNote(mRowId, editTitle, editBody);
-    }
-    fillData();
-    break;
-}</pre>
-
-  <ul>
-    <li>
-      We are handling both the <code>ACTIVITY_CREATE</code> and
-      <code>ACTIVITY_EDIT</code> activity results in this method.
-    </li>
-    <li>
-      In the case of a create, we pull the title and body from the extras (retrieved from the
-      returned Intent) and use them to create a new note.
-    </li>
-    <li>
-      In the case of an edit, we pull the mRowId as well, and use that to update
-      the note in the database.
-    </li>
-    <li>
-      <code>fillData()</code> at the end ensures everything is up to date .
-    </li>
-  </ul>
-
-
-<h2>Step 7</h2>
-
-  <div class="sidebox-wrapper">
-  <div class="sidebox">
-    <h2>The Art of Layout</h2>
-    <p>The provided
-    note_edit.xml layout file is the most sophisticated one in the application we will be building,
-    but that doesn't mean it is even close to the kind of sophistication you will be likely to want
-    in real Android applications.</p>
-    <p>Creating a
-    good UI is part art and part science, and the rest is work. Mastery of <a
-    href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a> is an essential part of
-creating
-    a good looking Android application.</p>
-    <p>The <a href="https://github.com/android/platform_development/tree/master/samples/ApiDemos"
-    class="external-link">ApiDemos sample project</a> is a good resource for
-    learning how to create different layouts.</p>
-  </div>
-  </div>
-
-<p>Open the file <code>note_edit.xml</code> that has been provided and take a
-    look at it. This is the UI code for the Note Editor.</p>
-    <p>This is the most
-    sophisticated UI we have dealt with yet. The file is given to you to avoid
-    problems that may sneak in when typing the code. (The XML is very strict
-    about case sensitivity and structure, mistakes in these are the usual cause
-    of problems with layout.)</p>
-    <p>There is a new parameter used
-    here that we haven't seen before: <code>android:layout_weight</code> (in
-    this case set to use the value 1 in each case).</p>
-    <p><code>layout_weight</code> is used in LinearLayouts
-    to assign "importance" to Views within the layout. All Views have a default
-    <code>layout_weight</code> of zero, meaning they take up only as much room
-    on the screen as they need to be displayed. Assigning a value higher than
-    zero will split up the rest of the available space in the parent View, according
-    to the value of each View's <code>layout_weight</code> and its ratio to the
-    overall <code>layout_weight</code> specified in the current layout for this
-    and other View elements.</p>
-    <p>To give an example: let's say we have a text label
-    and two text edit elements in a horizontal row. The label has no
-    <code>layout_weight</code> specified, so it takes up the minimum space
-    required to render. If the <code>layout_weight</code> of each of the two
-    text edit elements is set to 1, the remaining width in the parent layout will
-    be split equally between them (because we claim they are equally important).
-    If the first one has a <code>layout_weight</code> of 1
-    and the second has a <code>layout_weight</code> of 2, then one third of the
-    remaining space will be given to the first, and two thirds to the
-    second (because we claim the second one is more important).</p>
-    <p>This layout also demonstrates how to nest multiple layouts
-    inside each other to achieve a more complex and pleasant layout. In this
-    example, a horizontal linear layout is nested inside the vertical one to
-    allow the title label and text field to be alongside each other,
-    horizontally.</p>
-
-
-<h2 style="clear:right;">Step 8</h2>
-
-	<p>Create a <code>NoteEdit</code> class that extends
-    <code>android.app.Activity</code>.</p>
-    <p>This is the first time we will have
-    created an Activity without the Android Eclipse plugin doing it for us. When
-    you do so, the <code>onCreate()</code> method is not automatically
-    overridden for you. It is hard to imagine an Activity that doesn't override
-    the <code>onCreate()</code> method, so this should be the first thing you do.</p>
-  <ol>
-    <li>Right click on the <code>com.android.demo.notepad2</code> package
-    in the Package Explorer, and select <strong>New</strong> &gt; <strong>Class</strong> from the popup
-    menu.</li>
-    <li>Fill in <code>NoteEdit</code> for the <code>Name:</code> field in the
-    dialog.</li>
-    <li>In the <code>Superclass:</code> field, enter
-    <code>android.app.Activity</code> (you can also just type Activity and hit
-    Ctrl-Space on Windows and Linux or Cmd-Space on the Mac, to invoke code
-    assist and find the right package and class).</li>
-    <li>Click <strong>Finish</strong>.</li>
-    <li>In the resulting <code>NoteEdit</code> class, right click in the editor
-    window and select <strong>Source</strong> &gt; <strong>Override/Implement Methods...</strong></li>
-    <li>Scroll down through the checklist in the dialog until you see
-    <code>onCreate(Bundle)</code> &mdash; and check the box next to it.</li>
-    <li>Click <strong>OK</strong>.<p>The method should now appear in your class.</p></li>
-  </ol>
-
-<h2>Step 9</h2>
-
-<p>Fill in the body of the <code>onCreate()</code> method for <code>NoteEdit</code>.</p>
-
-<p>This will set the title of our new Activity to say "Edit Note" (one
-    of the strings defined in <code>strings.xml</code>). It will also set the
-    content view to use our <code>note_edit.xml</code> layout file. We can then
-    grab handles to the title and body text edit views, and the confirm button,
-    so that our class can use them to set and get the note title and body,
-    and attach an event to the confirm button for when it is pressed by the
-    user.</p>
-    <p>We can then unbundle the values that were passed in to the Activity
-    with the extras Bundle attached to the calling Intent. We'll use them to pre-populate
-    the title and body text edit views so that the user can edit them.
-    Then we will grab and store the <code>mRowId</code> so we can keep
-    track of what note the user is editing.</p>
-
-  <ol>
-    <li>
-      Inside <code>onCreate()</code>, set up the layout:<br>
-      <pre>setContentView(R.layout.note_edit);</pre>
-    </li>
-    <li>
-      Change the Activity title to the "Edit Note" string:
-      <pre>setTitle(R.string.edit_note);</pre>
-    </li>
-    <li>
-      Find the {@link android.widget.EditText} and {@link android.widget.Button} components we need:
-      <p>These are found by the
-      IDs associated to them in the R class, and need to be cast to the right
-      type of <code>View</code> (<code>EditText</code> for the two text views,
-      and <code>Button</code> for the confirm button):</p>
-      <pre>
-mTitleText = (EditText) findViewById(R.id.title);
-mBodyText = (EditText) findViewById(R.id.body);
-Button confirmButton = (Button) findViewById(R.id.confirm);</pre>
-      <p>Note that <code>mTitleText</code> and <code>mBodyText</code> are member
-      fields (you need to declare them at the top of the class definition).</p>
-    </li>
-    <li>At the top of the class, declare a <code>Long mRowId</code> private field to store
-      the current <code>mRowId</code> being edited (if any).
-    </li>
-    <li>Continuing inside <code>onCreate()</code>,
-      add code to initialize the <code>title</code>, <code>body</code> and
-      <code>mRowId</code> from the extras Bundle in
-      the Intent (if it is present):<br>
-      <pre>
-mRowId = null;
-Bundle extras = getIntent().getExtras();
-if (extras != null) {
-    String title = extras.getString(NotesDbAdapter.KEY_TITLE);
-    String body = extras.getString(NotesDbAdapter.KEY_BODY);
-    mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
-
-    if (title != null) {
-        mTitleText.setText(title);
-    }
-    if (body != null) {
-        mBodyText.setText(body);
-    }
-}</pre>
-     <ul>
-      <li>
-        We are pulling the <code>title</code> and
-        <code>body</code> out of the
-        <code>extras</code> Bundle that was set from the
-        Intent invocation.
-      </li><li>
-        We also null-protect the text field setting (i.e., we don't want to set
-        the text fields to null accidentally).</li>
-     </ul>
-    </li>
-    <li>
-      Create an <code>onClickListener()</code> for the button:
-      <p>Listeners can be one of the more confusing aspects of UI
-      implementation, but
-      what we are trying to achieve in this case is simple. We want an
-      <code>onClick()</code> method to be called when the user presses the
-      confirm button, and use that to do some work and return the values
-      of the edited note to the Intent caller. We do this using something called
-      an anonymous inner class. This is a bit confusing to look at unless you
-      have seen them before, but all you really need to take away from this is
-      that you can refer to this code in the future to see how to create a
-      listener and attach it to a button. (Listeners are a common idiom
-      in Java development, particularly for user interfaces.) Here's the empty listener:<br>
-      <pre>
-confirmButton.setOnClickListener(new View.OnClickListener() {
-
-    public void onClick(View view) {
-
-    }
-
-});</pre>
-    </li>
-  </ol>
-<h2>Step 10</h2>
-
-<p>Fill in the body of the <code>onClick()</code> method of the <code>OnClickListener</code> created in the last step.</p>
-
-    <p>This is the code that will be run when the user clicks on the
-    confirm button. We want this to grab the title and body text from the edit
-    text fields, and put them into the return Bundle so that they can be passed
-    back to the Activity that invoked this <code>NoteEdit</code> Activity. If the
-    operation is an edit rather than a create, we also want to put the
-    <code>mRowId</code> into the Bundle so that the
-    <code>Notepadv2</code> class can save the changes back to the correct
-    note.</p>
-  <ol>
-    <li>
-      Create a <code>Bundle</code> and put the title and body text into it using the
-      constants defined in Notepadv2 as keys:<br>
-      <pre>
-Bundle bundle = new Bundle();
-
-bundle.putString(NotesDbAdapter.KEY_TITLE, mTitleText.getText().toString());
-bundle.putString(NotesDbAdapter.KEY_BODY, mBodyText.getText().toString());
-if (mRowId != null) {
-    bundle.putLong(NotesDbAdapter.KEY_ROWID, mRowId);
-}</pre>
-    </li>
-    <li>
-      Set the result information (the Bundle) in a new Intent and finish the Activity:
-      <pre>
-Intent mIntent = new Intent();
-mIntent.putExtras(bundle);
-setResult(RESULT_OK, mIntent);
-finish();</pre>
-      <ul>
-      <li>The Intent is simply our data carrier that carries our Bundle
-      (with the title, body and mRowId).</li>
-      <li>The <code>setResult()</code> method is used to set the result
-      code and return Intent to be passed back to the
-      Intent caller. In this case everything worked, so we return RESULT_OK for the
-      result code.</li>
-      <li>The <code>finish()</code> call is used to signal that the Activity
-      is done (like a return call). Anything set in the Result will then be
-      returned to the caller, along with execution control.</li>
-      </ul>
-    </li>
-   </ol>
-   <p>The full <code>onCreate()</code> method (plus supporting class fields) should
-      now look like this:</p>
-      <pre>
-private EditText mTitleText;
-private EditText mBodyText;
-private Long mRowId;
-
-&#64;Override
-protected void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.note_edit);
-
-    mTitleText = (EditText) findViewById(R.id.title);
-    mBodyText = (EditText) findViewById(R.id.body);
-
-    Button confirmButton = (Button) findViewById(R.id.confirm);
-
-    mRowId = null;
-    Bundle extras = getIntent().getExtras();
-    if (extras != null) {
-        String title = extras.getString(NotesDbAdapter.KEY_TITLE);
-        String body = extras.getString(NotesDbAdapter.KEY_BODY);
-        mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
-
-        if (title != null) {
-            mTitleText.setText(title);
-        }
-        if (body != null) {
-            mBodyText.setText(body);
-        }
-    }
-
-    confirmButton.setOnClickListener(new View.OnClickListener() {
-
-        public void onClick(View view) {
-            Bundle bundle = new Bundle();
-
-            bundle.putString(NotesDbAdapter.KEY_TITLE, mTitleText.getText().toString());
-            bundle.putString(NotesDbAdapter.KEY_BODY, mBodyText.getText().toString());
-            if (mRowId != null) {
-                bundle.putLong(NotesDbAdapter.KEY_ROWID, mRowId);
-            }
-
-            Intent mIntent = new Intent();
-            mIntent.putExtras(bundle);
-            setResult(RESULT_OK, mIntent);
-            finish();
-        }
-    });
-}</pre>
-    </li>
-  </ol>
-
-<h2>Step 11</h2>
-
-  <div class="sidebox-wrapper">
-  <div class="sidebox">
-    <h2>The All-Important Android Manifest File</h2>
-  <p>The AndroidManifest.xml file is the way in which Android sees your
-    application. This file defines the category of the application, where
-    it shows up (or even if it shows up) in the launcher or settings, what
-    activities, services, and content providers it defines, what intents it can
-    receive, and more. </p>
-    <p>For more information, see the reference document
-    <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml
-File</a></p>
-  </div>
-  </div>
-
-<p>Finally, the new Activity has to be defined in the manifest file:</p>
-    <p>Before the new Activity can be seen by Android, it needs its own
-    Activity entry in the <code>AndroidManifest.xml</code> file. This is to let
-    the system know that it is there and can be called. We could also specify
-    which IntentFilters the activity implements here, but we are going to skip
-    this for now and just let Android know that the Activity is
-    defined.</p>
-    <p>There is a Manifest editor included in the Eclipse plugin that makes it much easier
-    to edit the AndroidManifest file, and we will use this. If you prefer to edit the file directly
-    or are not using the Eclipse plugin, see the box at the end for information on how to do this
-    without using the new Manifest editor.<p>
-    <ol>
-    <li>Double click on the <code>AndroidManifest.xml</code> file in the package explorer to open it.
-    </li>
-    <li>Click the <strong>Application</strong> tab at the bottom of the Manifest editor.</li>
-    <li>Click <strong>Add...</strong> in the Application Nodes section.
-      <p>If you see a dialog with radiobuttons at the top, select the top radio button:
-      "Create a new element at the top level, in Application".</p></li>
-    <li>Make sure "(A) Activity" is selected in the selection pane of the dialog, and click <strong>OK</strong>.</li>
-    <li>Click on the new "Activity" node, in the Application Nodes section, then
-    type <code>.NoteEdit</code> into the <em>Name*</em>
-    field to the right. Press Return/Enter.</li>
-    </ol>
-    <p>The Android Manifest editor helps you add more complex entries into the AndroidManifest.xml
-    file, have a look around at some of the other options available (but be careful not to select
-    them otherwise they will be added to your Manifest). This editor should help you understand
-    and alter the AndroidManifest.xml file as you move on to more advanced Android applications.</p>
-
-    <p class="note">If you prefer to edit this file directly, simply open the
-    <code>AndroidManifest.xml</code> file and look at the source (use the
-    <code>AndroidManifest.xml</code> tab in the eclipse editor to see the source code directly).
-    Then edit the file as follows:<br>
-    <code>&lt;activity android:name=".NoteEdit" /&gt;</code><br><br>
-    This should be placed just below the line that reads:<br>
-    <code>&lt;/activity&gt;</code> for the <code>.Notepadv2</code> activity.</p>
-
-<h2 style="clear:right;">Step 12</h2>
-
-<p>Now Run it!</p>
-<p>You should now be able to add real notes from
-the menu, as well as delete an existing one. Notice that in order to delete, you must
-first use the directional controls on the device to highlight the note.
-Furthermore, selecting a note title from the list should bring up the note
-editor to let you edit it. Press confirm when finished to save the changes
-back to the database.
-
-<h2>Solution and Next Steps</h2>
-
-<p>You can see the solution to this exercise in  <code>Notepadv2Solution</code>
-from the zip file to compare with your own.</p>
-<p>Now try editing a note, and then hitting the back button on the emulator
-instead of the confirm button (the back button is below the menu button). You
-will see an error come up. Clearly our application still has some problems.
-Worse still, if you did make some changes and hit the back button, when you go
-back into the notepad to look at the note you changed, you will find that all
-your changes have been lost. In the next exercise we will fix these
-problems.</p>
-
-<p>
-Once you are ready, move on to <a href="notepad-ex3.html">Tutorial
-Exercise 3</a> where you will fix the problems with the back button and lost
-edits by introducing a proper life cycle into the NoteEdit Activity.</p>
-
-
diff --git a/docs/html/training/notepad/notepad-ex3.jd b/docs/html/training/notepad/notepad-ex3.jd
deleted file mode 100644
index 648f9f2..0000000
--- a/docs/html/training/notepad/notepad-ex3.jd
+++ /dev/null
@@ -1,367 +0,0 @@
-excludeFromSuggestions=true
-page.title=Notepad Exercise 3
-parent.title=Notepad Tutorial
-parent.link=index.html
-@jd:body
-
-
-<p><em>In this exercise, you will use life-cycle event callbacks to store and
-retrieve application state data. This exercise demonstrates:</em></p>
-<ul>
-<li><em>Life-cycle events and how your application can use them</em></li>
-<li><em>Techniques for maintaining application state</em></li>
-</ul>
-
-<div style="float:right;white-space:nowrap">
-	[<a href="notepad-ex1.html">Exercise 1</a>]
-	[<a href="notepad-ex2.html">Exercise 2</a>]
-	<span style="color:#BBB;">
-		[<a href="notepad-ex3.html" style="color:#BBB;">Exercise 3</a>]
-	</span>
-	[<a href="notepad-extra-credit.html">Extra Credit</a>]
-</div>
-
-<h2>Step 1</h2>
-
-<p>Import <code>Notepadv3</code> into Eclipse. If you see an error about
-<code>AndroidManifest.xml,</code> or some problems related to an Android zip
-file, right click on the project and select <strong>Android Tools</strong> &gt;
-<strong>Fix Project Properties</strong> from the popup menu. The starting point for this exercise is
-exactly where we left off at the end of the Notepadv2. </p>
-<p>The current application has some problems &mdash; hitting the back button when editing
-causes a crash, and anything else that happens during editing will cause the
-edits to be lost.</p>
-<p>To fix this, we will move most of the functionality for creating and editing
-the note into the NoteEdit class, and introduce a full life cycle for editing
-notes.</p>
-
-  <ol>
-    <li>Remove the code in <code>NoteEdit</code> that parses the title and body
-    from the extras Bundle.
-    <p>Instead, we are going to use the <code>DBHelper</code> class
-    to access the notes from the database directly. All we need passed into the
-    NoteEdit Activity is a <code>mRowId</code> (but only if we are editing, if creating we pass
-    nothing). Remove these lines:</p>
-      <pre>
-String title = extras.getString(NotesDbAdapter.KEY_TITLE);
-String body = extras.getString(NotesDbAdapter.KEY_BODY);</pre>
-    </li>
-    <li>We will also get rid of the properties that were being passed in
-    the <code>extras</code> Bundle, which we were using to set the title
-    and body text edit values in the UI. So delete:
-    <pre>
-if (title != null) {
-    mTitleText.setText(title);
-}
-if (body != null) {
-    mBodyText.setText(body);
-}</pre>
-    </li>
-  </ol>
-
-<h2>Step 2</h2>
-
-<p>Create a class field for a <code>NotesDbAdapter</code> at the top of the NoteEdit class:</p>
-    <pre>&nbsp;&nbsp;&nbsp; private NotesDbAdapter mDbHelper;</pre>
-<p>Also add an instance of <code>NotesDbAdapter</code> in the
-    <code>onCreate()</code> method (right below the <code>super.onCreate()</code> call):</p>
-    <pre>
-&nbsp;&nbsp;&nbsp; mDbHelper = new NotesDbAdapter(this);<br>
-&nbsp;&nbsp;&nbsp; mDbHelper.open();</pre>
-
-<h2>Step 3</h2>
-
-<p>In <code>NoteEdit</code>, we need to check the <var>savedInstanceState</var> for the
-<code>mRowId</code>, in case the note
-    editing contains a saved state in the Bundle, which we should recover (this would happen
-  if our Activity lost focus and then restarted).</p>
-  <ol>
-    <li>
-      Replace the code that currently initializes the <code>mRowId</code>:<br>
-      <pre>
-        mRowId = null;
-
-        Bundle extras = getIntent().getExtras();
-        if (extras != null) {
-            mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
-        }
-        </pre>
-        with this:
-        <pre>
-        mRowId = (savedInstanceState == null) ? null :
-            (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
-        if (mRowId == null) {
-            Bundle extras = getIntent().getExtras();
-            mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
-                                    : null;
-        }
-        </pre>
-    </li>
-    <li>
-      Note the null check for <code>savedInstanceState</code>, and we still need to load up
-      <code>mRowId</code> from the <code>extras</code> Bundle if it is not
-      provided by the <code>savedInstanceState</code>. This is a ternary operator shorthand
-      to safely either use the value or null if it is not present.
-    </li>
-    <li>
-      Note the use of <code>Bundle.getSerializable()</code> instead of
-      <code>Bundle.getLong()</code>.  The latter encoding returns a <code>long</code> primitive and
-      so can not be used to represent the case when <code>mRowId</code> is <code>null</code>.
-    </li>
-  </ol>
-
-<h2>Step 4</h2>
-
-<p>Next, we need to populate the fields based on the <code>mRowId</code> if we
-    have it:</p>
-    <pre>populateFields();</pre>
-    <p>This goes before the <code>confirmButton.setOnClickListener()</code> line.
-    We'll define this method in a moment.</p>
-
-<h2>Step 5</h2>
-
-<p>Get rid of the Bundle creation and Bundle value settings from the
-    <code>onClick()</code> handler method. The Activity no longer needs to
-    return any extra information to the caller. And because we no longer have
-    an Intent to return, we'll use the shorter version
-    of <code>setResult()</code>:</p>
-    <pre>
-public void onClick(View view) {
-    setResult(RESULT_OK);
-    finish();
-}</pre>
-    <p>We will take care of storing the updates or new notes in the database
-    ourselves, using the life-cycle methods.</p>
-
-    <p>The whole <code>onCreate()</code> method should now look like this:</p>
-    <pre>
-super.onCreate(savedInstanceState);
-
-mDbHelper = new NotesDbAdapter(this);
-mDbHelper.open();
-
-setContentView(R.layout.note_edit);
-
-mTitleText = (EditText) findViewById(R.id.title);
-mBodyText = (EditText) findViewById(R.id.body);
-
-Button confirmButton = (Button) findViewById(R.id.confirm);
-
-mRowId = (savedInstanceState == null) ? null :
-    (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
-if (mRowId == null) {
-    Bundle extras = getIntent().getExtras();
-    mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
-                            : null;
-}
-
-populateFields();
-
-confirmButton.setOnClickListener(new View.OnClickListener() {
-
-    public void onClick(View view) {
-        setResult(RESULT_OK);
-        finish();
-    }
-
-});</pre>
-
-<h2>Step 6</h2>
-
-<p>Define the <code>populateFields()</code> method.</p>
-    <pre>
-private void populateFields() {
-    if (mRowId != null) {
-        Cursor note = mDbHelper.fetchNote(mRowId);
-        startManagingCursor(note);
-        mTitleText.setText(note.getString(
-	            note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
-        mBodyText.setText(note.getString(
-                note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
-    }
-}</pre>
-<p>This method uses the <code>NotesDbAdapter.fetchNote()</code> method to find the right note to
-edit, then it calls <code>startManagingCursor()</code> from the <code>Activity</code> class, which
-is an Android convenience method provided to take care of the Cursor life-cycle. This will release
-and re-create resources as dictated by the Activity life-cycle, so we don't need to worry about
-doing that ourselves. After that, we just look up the title and body values from the Cursor
-and populate the View elements with them.</p>
-
-
-<h2>Step 7</h2>
-
-  <div class="sidebox-wrapper">
-  <div class="sidebox">
-    <h2>Why handling life-cycle events is important</h2>
-    <p>If you are used to always having control in your applications, you
-    might not understand why all this life-cycle work is necessary. The reason
-    is that in Android, you are not in control of your Activity, the
-    operating system is!</p>
-    <p>As we have already seen, the Android model is based around activities
-    calling each other. When one Activity calls another, the current Activity
-    is paused at the very least, and may be killed altogether if the
-    system starts to run low on resources. If this happens, your Activity will
-    have to store enough state to come back up later, preferably in the same
-    state it was in when it was killed.</p>
-    <p>
-    Activities have a <a
-href="{@docRoot}guide/components/activities.html#Lifecycle">well-defined life
-cycle</a>.
-    Lifecycle events can happen even if you are not handing off control to
-    another Activity explicitly. For example, perhaps a call comes in to the
-    handset. If this happens, and your Activity is running, it will be swapped
-    out while the call Activity takes over.</p>
-  </div>
-  </div>
-
-<p>Still in the <code>NoteEdit</code> class, we now override the methods
-   <code>onSaveInstanceState()</code>, <code>onPause()</code> and
-   <code>onResume()</code>. These are our life-cycle methods
-   (along with <code>onCreate()</code> which we already have).</p>
-
-<p><code>onSaveInstanceState()</code> is called by Android if the
-    Activity is being stopped and <strong>may be killed before it is
-    resumed!</strong> This means it should store any state necessary to
-    re-initialize to the same condition when the Activity is restarted. It is
-    the counterpart to the <code>onCreate()</code> method, and in fact the
-    <code>savedInstanceState</code> Bundle passed in to <code>onCreate()</code> is the same
-    Bundle that you construct as <code>outState</code> in the
-    <code>onSaveInstanceState()</code> method.</p>
-
-<p><code>onPause()</code> and <code>onResume()</code> are also
-    complimentary methods. <code>onPause()</code> is always called when the
-    Activity ends, even if we instigated that (with a <code>finish()</code> call for example).
-    We will use this to save the current note back to the database. Good
-    practice is to release any resources that can be released during an
-    <code>onPause()</code> as well, to take up less resources when in the
-    passive state. <code>onResume()</code> will call our <code>populateFields()</code> method
-    to read the note out of the database again and populate the fields.</p>
-
-<p>So, add some space after the <code>populateFields()</code> method
-  and add the following life-cycle methods:</p>
-  <ol type="a">
-    <li><code>
-      onSaveInstanceState()</code>:
-      <pre>
-    &#64;Override
-    protected void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        saveState();
-        outState.putSerializable(NotesDbAdapter.KEY_ROWID, mRowId);
-    }</pre>
-    <p>We'll define <code>saveState()</code> next.</p>
-    </li>
-    <li><code>
-      onPause()</code>:
-      <pre>
-    &#64;Override
-    protected void onPause() {
-        super.onPause();
-        saveState();
-    }</pre>
-    </li>
-    <li><code>
-      onResume()</code>:
-      <pre>
-    &#64;Override
-    protected void onResume() {
-        super.onResume();
-        populateFields();
-    }</pre>
-    </li>
-  </ol>
-<p>Note that <code>saveState()</code> must be called in both <code>onSaveInstanceState()</code>
-and <code>onPause()</code> to ensure that the data is saved.  This is because there is no
-guarantee that <code>onSaveInstanceState()</code> will be called and because when it <em>is</em>
-called, it is called before <code>onPause()</code>.</p>
-
-
-<h2 style="clear:right;">Step 8</h2>
-
-<p>Define the <code>saveState()</code> method to put the data out to the
-database.</p>
-    <pre>
-     private void saveState() {
-        String title = mTitleText.getText().toString();
-        String body = mBodyText.getText().toString();
-
-        if (mRowId == null) {
-            long id = mDbHelper.createNote(title, body);
-            if (id > 0) {
-                mRowId = id;
-            }
-        } else {
-            mDbHelper.updateNote(mRowId, title, body);
-        }
-    }</pre>
-  <p>Note that we capture the return value from <code>createNote()</code> and if a valid row ID is
-  returned, we store it in the <code>mRowId</code> field so that we can update the note in future
-  rather than create a new one (which otherwise might happen if the life-cycle events are
-  triggered).</p>
-
-
-<h2 style="clear:right;">Step 9</h2>
-
-<p>Now pull out the previous handling code from the
-    <code>onActivityResult()</code> method in the <code>Notepadv3</code>
-    class.</p>
-<p>All of the note retrieval and updating now happens within the
-    <code>NoteEdit</code> life cycle, so all the <code>onActivityResult()</code>
-    method needs to do is update its view of the data, no other work is
-    necessary. The resulting method should look like this:</p>
-<pre>
-&#64;Override
-protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
-    super.onActivityResult(requestCode, resultCode, intent);
-    fillData();
-}</pre>
-
-<p>Because the other class now does the work, all this has to do is refresh
-      the data.</p>
-
-<h2>Step 10</h2>
-
-<p>Also remove the lines which set the title and body from the
-    <code>onListItemClick()</code> method (again they are no longer needed,
-    only the <code>mRowId</code> is):</p>
-<pre>
-    Cursor c = mNotesCursor;
-    c.moveToPosition(position);</pre>
-<br>
-and also remove:
-<br>
-<pre>
-    i.putExtra(NotesDbAdapter.KEY_TITLE, c.getString(
-                    c.getColumnIndex(NotesDbAdapter.KEY_TITLE)));
-    i.putExtra(NotesDbAdapter.KEY_BODY, c.getString(
-                    c.getColumnIndex(NotesDbAdapter.KEY_BODY)));</pre>
-<br>
-so that all that should be left in that method is:
-<br>
-<pre>
-    super.onListItemClick(l, v, position, id);
-    Intent i = new Intent(this, NoteEdit.class);
-    i.putExtra(NotesDbAdapter.KEY_ROWID, id);
-    startActivityForResult(i, ACTIVITY_EDIT);</pre>
-
-  <p>You can also now remove the mNotesCursor field from the class, and set it back to using
-  a local variable in the <code>fillData()</code> method:
-<br><pre>
-    Cursor notesCursor = mDbHelper.fetchAllNotes();</pre></p>
-  <p>Note that the <code>m</code> in <code>mNotesCursor</code> denotes a member field, so when we
-  make <code>notesCursor</code> a local variable, we drop the <code>m</code>. Remember to rename the
-  other occurrences of <code>mNotesCursor</code> in your <code>fillData()</code> method.
-</ol>
-<p>
-Run it! (use <em>Run As -&gt; Android Application</em> on the project right
-click menu again)</p>
-
-<h2>Solution and Next Steps</h2>
-
-<p>You can see the solution to this exercise in <code>Notepadv3Solution</code>
-from
-the zip file to compare with your own.</p>
-<p>
-When you are ready, move on to the <a href="notepad-extra-credit.html">Tutorial
-Extra Credit</a> exercise, where you can use the Eclipse debugger to
-examine the life-cycle events as they happen.</p>
diff --git a/docs/html/training/notepad/notepad-extra-credit.jd b/docs/html/training/notepad/notepad-extra-credit.jd
deleted file mode 100644
index 8ab2021..0000000
--- a/docs/html/training/notepad/notepad-extra-credit.jd
+++ /dev/null
@@ -1,71 +0,0 @@
-excludeFromSuggestions=true
-page.title=Notepad Extra Credit
-parent.title=Notepad Tutorial
-parent.link=index.html
-@jd:body
-
-
-<p><em>In this exercise, you will use the debugger to look at the work you did
-in Exercise 3. This exercise demonstrates:</em></p>
-<ul>
-<li><em>How to set breakpoints to observe execution</em> </li>
-<li><em>How to run your application in debug mode</code></em></li>
-</ul>
-
-<div style="float:right;white-space:nowrap">
-
-	[<a href="notepad-ex1.html">Exercise 1</a>]
-	[<a href="notepad-ex2.html">Exercise 2</a>]
-	[<a href="notepad-ex3.html">Exercise 3</a>]
-	<span style="color:#BBB;">
-		[<a href="notepad-extra-credit.html" style="color:#BBB;">Extra Credit</a>]
-	</span>
-</div>
-
-<h2>Step 1</h2>
-
-<p>Using the working <code>Notepadv3</code>, put breakpoints in the code at the
-    beginning of the <code>onCreate()</code>, <code>onPause()</code>,
-    <code>onSaveInstanceState()</code> and <code>onResume()</code> methods in the
-    <code>NoteEdit</code> class (if you are not familiar with Eclipse, just
-    right click in the narrow grey border on the left of the edit window at the
-    line you want a breakpoint, and select <em>Toggle Breakpoint</em>, you
-should see a blue dot appear).</p>
- 
-<h2>Step 2</h2>
-
-<p>Now start the notepad demo in debug mode:</p>
-
-<ol type="a">
-    <li>
-      Right click on the <code>Notepadv3</code> project and from the Debug menu
-      select <em>Debug As -&gt; Android Application.</em></li>
-    <li>
-      The Android emulator should say <em>"waiting for debugger to connect"</em>
-      briefly and then run the application.</li>
-  <li>
-      If it gets stuck on the waiting... screen, quit the emulator and Eclipse,
-      from the command line do an <code>adb kill-server</code>, and then restart
-Eclipse and try again.</li></ol>
-      
-      <h2>Step 3</h2>
-
-<p>When you edit or create a new note you should see the breakpoints getting
-    hit and the execution stopping.</p>
-    
-    <h2>Step 4</h2>
-
-<p>Hit the Resume button to let execution continue (yellow rectangle with a
-green triangle to its right in the Eclipse toolbars near the top).</p>
-
-<h2>Step 5</h2>
-
-<p>Experiment a bit with the confirm and back buttons, and try pressing Home and
-    making other mode changes. Watch what life-cycle events are generated and
-when.</p>
-
-<p>The Android Eclipse plugin not only offers excellent debugging support for
-your application development, but also superb profiling support. You can also
-try using <a href="{@docRoot}tools/help/traceview.html">Traceview</a> to profile your application. If your application is running too slow, this can help you 
-find the bottlenecks and fix them.</p>
-
diff --git a/docs/html/training/notepad/notepad-index.jd b/docs/html/training/notepad/notepad-index.jd
deleted file mode 100644
index fde43fa..0000000
--- a/docs/html/training/notepad/notepad-index.jd
+++ /dev/null
@@ -1,144 +0,0 @@
-excludeFromSuggestions=true
-page.title=Notepad Tutorial
-@jd:body
-
-
-<p>The  tutorial in this section gives you a &quot;hands-on&quot; introduction
-to the Android framework and the  tools you use to build  applications on it.
-Starting from a preconfigured project file, it guides you through the process of
-developing a simple notepad application and provides concrete examples of how to
-set up the project,  develop the application logic and user interface, and then
-compile and run the application. </p>
-
-<p>The tutorial presents the notepad application development as a set of 
-exercises (see below), each consisting of several steps. You can follow along 
-with the steps in each exercise and gradually build up and refine your  
-application. The exercises explain each step in detail and provide all the 
-sample code you need to complete the application. </p>
-
-<p>When you are finished with the tutorial, you will have created a functioning
-Android application and learned in depth about many of the most important
-concepts in Android development. If you want to add more complex features to
-your application, you can examine the code in an alternative implementation
-of a notepad application, in the 
-<a href="{@docRoot}samples/NotePad/index.html">Sample Code</a> documentation. </p>
-
-
-<a name="who"></a>
-<h2>Who Should Use this Tutorial</h2>
-
-<p>This tutorial is designed for  experienced developers, especially those with 
-knowledge of the Java programming language. If you haven't written Java
-applications before, you can still use the tutorial, but you might need to work
-at a slower pace. </p>
-
-<p>The tutorial  assumes that you have some familiarity with the basic Android
-application concepts and terminology. If you aren't yet familiar with those, you
-should read <a href="{@docRoot}intro/anatomy.html">Overview of an Android 
-Application</a> before continuing. </p>
-
-<p>Also note that this tutorial uses
-the Eclipse development environment, with the Android plugin installed. If you
-are not using Eclipse, you can  follow  the exercises and build the application,
-but you will need to determine how to accomplish the Eclipse-specific
-steps in your environment. </p>
-
-<a name="preparing"></a>
-<h2>Preparing for the Exercises</h2>
-
-<p>This tutorial builds on the information provided in the <a
-href="{@docRoot}intro/installing.html">Installing the SDK</a> and <a 
-href="{@docRoot}intro/hello-android.html">Hello Android</a>
-documents, which explain in detail how to set up your development environment
-for building Android applications. Before you start this tutorial, you should
-read both these documents, have the SDK installed, and your work environment set up.</p>
-
-<p>To prepare for this lesson:</p>
-
-<ol>
-  <li>Download the <a href="codelab/NotepadCodeLab.zip">project
-      exercises archive (.zip)</a></li>
-  <li>Unpack the archive file to a suitable location on your machine</li>
-  <li>Open the <code>NotepadCodeLab</code> folder</li>
-</ol>
-
-<p>Inside the <code>NotepadCodeLab</code> folder, you should see six project
-files: <code>Notepadv1</code>,
-    <code>Notepadv2</code>, <code>Notepadv3</code>,
-    <code>Notepadv1Solution</code>, <code>Notepadv2Solution</code>
-    and <code>Notepadv3Solution</code>. The <code>Notepadv#</code> projects are
-the starting points for each of the exercises, while the
-<code>Notepadv#Solution</code> projects are the exercise
-    solutions. If you are having trouble with a particular exercise, you
-    can compare your current work against the exercise solution.</p>
-
-<a name="exercises"></a>
-<h2> Exercises</h2>
-
-  <p>The table below lists the tutorial exercises and describes the development
-areas that each covers. Each exercise assumes that you have completed any
-previous exercises.</p>
-
-  <table border="0" style="padding:4px;spacing:2px;" summary="This
-table lists the
-tutorial examples and describes what each covers. ">
-    <tr>
-      <th width="120"><a href="{@docRoot}intro/tutorial-ex1.html">Exercise
-1</a></th>
-      <td>Start here. Construct a simple notes list that lets the user add new notes but not
-edit them. Demonstrates the basics of <code>ListActivity</code> and creating
-and handling
-      menu options. Uses a SQLite database to store the notes.</td>
-    </tr>
-    <tr>
-      <th><a href="{@docRoot}intro/tutorial-ex2.html">Exercise 2</a></th>
-      <td>Add a second Activity to the
-application. Demonstrates constructing a
-new Activity, adding it to the Android manifest, passing data between the
-activities, and using more advanced screen layout. Also shows how to
-invoke another Activity to return a result, using
-<code>startActivityForResult()</code>.</td>
-    </tr>
-    <tr>
-      <th><a href="{@docRoot}intro/tutorial-ex3.html">Exercise 3</a></th>
-      <td>Add handling of life-cycle events to
-the application, to let it
-maintain application state across the life cycle. </td>
-    </tr>
-    <tr>
-    <th><a href="{@docRoot}intro/tutorial-extra-credit.html">Extra
-Credit</a></th>
-    <td>Demonstrates how to use the Eclipse
-debugger and how you can use it to
-view life-cycle events as they are generated. This section is optional but
-highly recommended.</td>
-    </tr>
-</table>
-
-
-<a name="other"></a>
-<h2>Other Resources and Further Learning</h2>
-<ul>
-<li>For a lighter but broader introduction to concepts not covered in the
-tutorial,
-take a look at <a href="{@docRoot}kb/commontasks.html">Common Android Tasks</a>.</li>
-<li>The Android SDK includes a variety of fully functioning sample applications
-that make excellent opportunities for further learning. You can find the sample
-applications in the <code>samples/</code> directory of your downloaded SDK.</li>
-<li>This tutorial draws from the full Notepad application included in the
-<code>samples/</code> directory of the SDK, though it does not match it exactly. 
-When you are done with the tutorial,
-it is highly recommended that you take a closer look at this version of the Notepad
-application, 
-as it demonstrates a variety of interesting additions for your application, 
-such as:</li>
-  <ul>
-  <li>Setting up a custom striped list for the list of notes.</li>
-  <li>Creating a custom text edit view that overrides the <code>draw()</code>
-method to
-    make it look like a lined notepad.</li>
-  <li>Implementing a full <code>ContentProvider</code> for notes.</li>
-  <li>Reverting and discarding edits instead of just automatically saving
-them.</li>
-</ul>
-</ul>
diff --git a/docs/html/training/tv/playback/now-playing.jd b/docs/html/training/tv/playback/now-playing.jd
index a4c321e..0a50441 100644
--- a/docs/html/training/tv/playback/now-playing.jd
+++ b/docs/html/training/tv/playback/now-playing.jd
@@ -143,7 +143,7 @@
     metadataBuilder.putString(MediaMetadata.METADATA_KEY_ARTIST,
             myData.artist);
     // A small bitmap for the artwork is also recommended
-    metadataBuilder.putString(MediaMetadata.METADATA_KEY_ART,
+    metadataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ART,
             myData.artBitmap);
     // Add any other fields you have for your data as well
     mSession.setMetadata(metadataBuilder.build());
diff --git a/docs/html/training/volley/index.jd b/docs/html/training/volley/index.jd
index 97bddae..2cefc90 100644
--- a/docs/html/training/volley/index.jd
+++ b/docs/html/training/volley/index.jd
@@ -23,7 +23,7 @@
 </div>
 </div>
 
-<a class="notice-developers-video wide" href="https://developers.google.com/events/io/sessions/325304728">
+<a class="notice-developers-video wide" href="https://www.youtube.com/watch?v=yhv8l9F44qo">
 <div>
     <h3>Video</h3>
     <p>Volley: Easy, Fast Networking for Android</p>
diff --git a/docs/html/training/volley/request-custom.jd b/docs/html/training/volley/request-custom.jd
index 7b669b9..bc0ef1c 100644
--- a/docs/html/training/volley/request-custom.jd
+++ b/docs/html/training/volley/request-custom.jd
@@ -16,7 +16,7 @@
 </div>
 </div>
 
-<a class="notice-developers-video wide" href="https://developers.google.com/events/io/sessions/325304728">
+<a class="notice-developers-video wide" href="https://www.youtube.com/watch?v=yhv8l9F44qo">
 <div>
     <h3>Video</h3>
     <p>Volley: Easy, Fast Networking for Android</p>
diff --git a/docs/html/training/volley/request.jd b/docs/html/training/volley/request.jd
index 8a7dc62..a2b2ecd 100644
--- a/docs/html/training/volley/request.jd
+++ b/docs/html/training/volley/request.jd
@@ -17,7 +17,7 @@
 </div>
 </div>
 
-<a class="notice-developers-video wide" href="https://developers.google.com/events/io/sessions/325304728">
+<a class="notice-developers-video wide" href="https://www.youtube.com/watch?v=yhv8l9F44qo">
 <div>
     <h3>Video</h3>
     <p>Volley: Easy, Fast Networking for Android</p>
diff --git a/docs/html/training/volley/requestqueue.jd b/docs/html/training/volley/requestqueue.jd
index 43b1e3f..f8c61aa 100644
--- a/docs/html/training/volley/requestqueue.jd
+++ b/docs/html/training/volley/requestqueue.jd
@@ -17,7 +17,7 @@
 </div>
 </div>
 
-<a class="notice-developers-video wide" href="https://developers.google.com/events/io/sessions/325304728">
+<a class="notice-developers-video wide" href="https://www.youtube.com/watch?v=yhv8l9F44qo">
 <div>
     <h3>Video</h3>
     <p>Volley: Easy, Fast Networking for Android</p>
diff --git a/docs/html/training/volley/simple.jd b/docs/html/training/volley/simple.jd
index 4733958..ab61b9b 100644
--- a/docs/html/training/volley/simple.jd
+++ b/docs/html/training/volley/simple.jd
@@ -19,7 +19,7 @@
 </div>
 </div>
 
-<a class="notice-developers-video wide" href="https://developers.google.com/events/io/sessions/325304728">
+<a class="notice-developers-video wide" href="https://www.youtube.com/watch?v=yhv8l9F44qo">
 <div>
     <h3>Video</h3>
     <p>Volley: Easy, Fast Networking for Android</p>
diff --git a/rs/java/android/renderscript/AllocationAdapter.java b/rs/java/android/renderscript/AllocationAdapter.java
index 9bfd6ec..6d7e97e 100644
--- a/rs/java/android/renderscript/AllocationAdapter.java
+++ b/rs/java/android/renderscript/AllocationAdapter.java
@@ -244,23 +244,23 @@
     /**
      *
      *
-     * Create an arbitrary window into the base allocation
+     * Create an arbitrary window into the base allocation.
      * The type describes the shape of the window.
      *
      * Any dimensions present in the type must be equal or smaller
      * to the dimensions in the source allocation.  A dimension
      * present in the allocation that is not present in the type
-     * will be constrained away with the selectors
+     * will be constrained away with the selectors.
      *
-     * If a dimension is present in the type and allcation one of
-     * two things will happen
+     * If a dimension is present in both the type and allocation, one of
+     * two things will happen.
      *
-     * If the type is smaller than the allocation a window will be
+     * If the type is smaller than the allocation, a window will be
      * created, the selected value in the adapter for that dimension
-     * will act as the base address and the type will describe the
+     * will act as the base address, and the type will describe the
      * size of the view starting at that point.
      *
-     * If the type and allocation dimension are of the same size
+     * If the type and allocation dimension are of the same size,
      * then setting the selector for the dimension will be an error.
      */
     static public AllocationAdapter createTyped(RenderScript rs, Allocation a, Type t) {
